Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren

W

Wambui

Aktives Mitglied
Hallo,

ich habe eine Frage bezüglich der Veränderbarkeit von Objekten/Instanzen während der Laufzeit. Ich gehe davon aus, dass der Compiler beim Programmstart alle Objekte initialisiert, so wie sie im Code stehen und auch wenn sie erst spät während der Laufzeit gebraucht werden.

Jetzt habe ich in meinem Projekt eine Klasse zur XML-Dateien-Verarbeitung (Erstellen, Lesen, Verändern usw.), die einen Wert für die Variable "path" benötigt, der in einer Textdatei auf der Festplatte abgespeichert ist. Ich benötige die diese Klasse XMLCreator während der Laufzeit an mehreren Stellen, ergo wird sie nach meinem Verständnis immer denselben Wert für "path" haben, auch wenn sich dieser Wert in der besagten Textdatei während der Laufzeit geändert hat.

Gibt es eine Möglichkeit ein Objekt der Klasse XMLCreator während der Laufzeit neu zu initialisieren, dass aber auch die Textdatei mit ihren veränderten Werten berücksichtigt?
Oder wie kann das realisiert werden? Konkret handelt es sich um Benutzereinstellungen. Die, wenn ich hier die Werte ändere, sofort auch das Aussehen/die Inhalte des Programmfensters verändern, sobald dieses den Focus bekommt. Momentan bekomme ich die neuen Einstellungen zwar in die GUI, aber andere GUI-Objekte, die abhängig sind, von dem was XMLCreator liefert haben noch die alten Inhalte und nicht die passenden zum neuen Wert.

Grüße
Wambui

Zum Verfolgen die Klasse, die den Wert benutzt.
Java:
public class XMLCreator {
    private static String path = System.getProperties().getProperty("user.home")+
            File.separator+PlatformDependence.offerValue("directory")+
            File.separator+new Settings().readSettings("pointOfDeparture")+"City.xml";
    
    private static File xmlFile = new File(path);
    private Namespace ns = Namespace.getNamespace("http://www.example.com/Preiskalkulator");
    private File defaultXmlFile = new File("resources"+File.separator+"City.xml"); 
    private String origin = new Settings().readSettings("pointOfDeparture");
    private String publictransport;
    private SAXBuilder builder = new SAXBuilder();
    private Document jdomDoc;

    public XMLCreator() {
        super();
    }

    public void writeXML(String cityName,
                         String ticket,
                         String dticket,
                         String hotel,
                         String publictransport)
            throws XPathExpressionException, SAXException,
            ParserConfigurationException, JDOMException {
        Parser distance = new Parser();
        Parser duration = new Parser();
        try {
            if (ticket.length() == 0) {
                ticket = "0.00";
            }
            if (dticket.length() == 0) {
                dticket = "0.00";
            }
            if (hotel.length() == 0) {
                hotel = "0.00";
            }
            SAXBuilder builder = new SAXBuilder();
            Document document = builder.build(xmlFile);
            Element xmlRoot = document.getRootElement();
            Element city = new Element(ELEMENT_CITY);
            city.setAttribute(ATTRIBUTE_NAME, cityName);
            city.addContent(new Element(ELEMENT_DISTANCE).setText(String.valueOf(distance.parsedistance(origin, cityName))));
            city.addContent(new Element(ELEMENT_DURATION).setText(String.valueOf(duration.parseduration(origin, cityName))));
            city.addContent(new Element(ELEMENT_TICKET).setText(ticket));
            city.addContent(new Element(ELEMENT_DTICKET).setText(dticket));
            city.addContent(new Element(ELEMENT_HOTEL).setText(hotel));
            city.addContent(new Element(ELEMENT_PUBLICTRANSPORT).setText(publictransport));
            xmlRoot.addContent(city);

            XMLOutputter xmlOutput = new XMLOutputter();
            xmlOutput.setFormat(Format.getPrettyFormat());
            xmlOutput.output(document, new FileWriter(path));

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
    public void changeXML(String cityName,
                          String varMonthlyTicket,
                          String varRoundTripTicket,
                          String varHotel,
                          String varPublictransport) {
        try {
            jdomDoc = builder.build(xmlFile);
            Element costCalculator = jdomDoc.getRootElement();
            Iterator<?> cityList = costCalculator.getChildren(ELEMENT_CITY).iterator();
            while (cityList.hasNext()) {
                Element city = (Element) cityList.next();
                if (cityName.equals(city.getAttribute("name").getValue())) {
                    Element monthlyTicket = new Element(ELEMENT_TICKET);
                    monthlyTicket.addContent(varMonthlyTicket);
                    city.removeChild(ELEMENT_TICKET);
                    city.addContent(monthlyTicket);
                    Element roundTripTicket = new Element(ELEMENT_DTICKET);
                    roundTripTicket.addContent(varRoundTripTicket);
                    city.removeChild(ELEMENT_DTICKET);
                    city.addContent(roundTripTicket);
                    Element hotelCost = new Element(ELEMENT_HOTEL);
                    hotelCost.addContent(varHotel);
                    city.removeChild(ELEMENT_HOTEL);
                    city.addContent(hotelCost);
                    Element publicTransport = new Element(ELEMENT_PUBLICTRANSPORT);
                    publicTransport.addContent(varPublictransport);
                    city.removeChild(ELEMENT_PUBLICTRANSPORT);
                    city.addContent(publicTransport);
                }
            }

            XMLOutputter xmlOutput = new XMLOutputter();
            xmlOutput.setFormat(Format.getPrettyFormat());
            xmlOutput.output(jdomDoc, new FileWriter(path));

        } catch (JDOMException | IOException ex) {
            ex.printStackTrace();
        }
    }

    public void removeElement(String cityName) {
        try {
            jdomDoc = builder.build(xmlFile);
            Element costCalculator = jdomDoc.getRootElement();
            Iterator<Element> cities = costCalculator.getChildren("city").iterator();
            while (cities.hasNext()) {
                Element city = cities.next();
                if (cityName.equals(city.getAttribute("name").getValue())) {
                    cities.remove();
                }
            }
            XMLOutputter xmlOutput = new XMLOutputter();
			xmlOutput.setFormat(Format.getPrettyFormat());
			xmlOutput.output(jdomDoc, new FileWriter(xmlFile));
        } catch (JDOMException | IOException ex) {
            ex.printStackTrace();
        }
    }

    public List<String> readXml(String cityName) {
        List<String> results  = new ArrayList<String>();
        List<Element> elements = getCityElements(cityName);
        String result = null;
        if(elements != null) {
            results.add(cityName);
            for (Element element : elements) {
                results.add(element.getValue());
            }
        }
        return results;
    }

    /**
     * Read all elements of the document
     */
    private static List<Element> getRootElements() {
        SAXBuilder builder = null;
        Document jdomDoc = null;
        try {
            builder = new SAXBuilder();
            jdomDoc = builder.build(xmlFile);
        } catch (JDOMException ex) {
            System.err.println(ex);
        } catch (IOException ex) {
            System.err.println(ex);
        }
        if(builder != null && jdomDoc != null) {
            return jdomDoc.getRootElement().getChildren();
        }
        else {
            return null;
        }
    }

    private static List<Element> getCityElements(String cityName){
        List<Element> cities = getRootElements();
        if(cities != null) {
            for (Element element : cities) {
                if(element.getAttributeValue("name").equals(cityName)) {
                    return element.getChildren();
                }
            }
        }
        return null;
    }


    public List<String> CityList() {
        List<String> CityList = new ArrayList<>();
        try {
            if (new File(System.getProperties().getProperty("user.home")+
                    File.separator+PlatformDependence.offerValue("directory")+
                    File.separator+PlatformDependence.offerValue("setting")).exists()) {
                jdomDoc = builder.build(xmlFile);
            } else { //TODO Überprüfen wegen JAR-File!
                jdomDoc = builder.build(defaultXmlFile);
            }
            XPathFactory xFactory = XPathFactory.instance();
            XPathExpression xpath = xFactory.compile("/costcalculator/city/@name");
            for (Object object : xpath.evaluate(jdomDoc)) {
                CityList.add(((Attribute)object).getValue());
            }
        } catch (JDOMException | IOException ex) {
            ex.printStackTrace();
        }
        return CityList;
    }
}
 
Zuletzt bearbeitet:
J

Joose

Top Contributor
Ich gehe davon aus, dass der Compiler beim Programmstart alle Objekte initialisiert, so wie sie im Code stehen und auch wenn sie erst spät während der Laufzeit gebraucht werden.

Der Compiler kompiliert nur deinen Java Code. Die VM führt den Code dann aus!
Objekte werden erst initialisiert sobald sie gebraucht werden, alles andere würde einfach zuviel Arbeitsspeicher verbrauchen (vor allem wenn es Objekte gibt die dann gar nicht verwendet werden) und Performance beim Start kostet es ebenfalls.

Gibt es eine Möglichkeit ein Objekt der Klasse XMLCreator während der Laufzeit neu zu initialisieren, dass aber auch die Textdatei mit ihren veränderten Werten berücksichtigt?

Klar einfach
[Java]XMLCreator creator = new XMLCreator()[/code]
Schon wurde ein neues Objekt initialisiert.

Du musst natürlich dem XMLCreator so programmieren das die Werte ausgelesen werden sobald er initialisiert wird.
 
W

Wambui

Aktives Mitglied
Danke.
Das hatte ich zwar schon ausprobiert und hatte nicht funktioniert. Aber vielleicht habe Deinen Schlußsatz nicht umgesetzt. Ich schaue mir das noch einmal an.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Methoden [GELÖST ]Warum ruft sich die Methode von alleine auf? Java Basics - Anfänger-Themen 3
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
A GELÖST -- Exception in thread "main" Java Basics - Anfänger-Themen 3
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
A (Objekte Java Basics - Anfänger-Themen 6
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
I Objekte Hilfe Java Basics - Anfänger-Themen 8
G Klassen und Objekte Java Basics - Anfänger-Themen 2
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
O ObjectOutputStream Anzahl Objekte festhalten Java Basics - Anfänger-Themen 17
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
J Best Practice Dateiinhalte validieren und auf Objekte mappen Java Basics - Anfänger-Themen 3
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
E Methode mit Parametern um Objekte zu übergeben Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
A Objekte verknüpfen Java Basics - Anfänger-Themen 2
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
S Zählen der Zeiger auf Objekte Java Basics - Anfänger-Themen 35
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
M Klassen und Objekte Java Basics - Anfänger-Themen 2
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Array Objekte einer Klasse zuordnen Java Basics - Anfänger-Themen 15
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
Orkanson Objekte in ein Array einfügen Java Basics - Anfänger-Themen 5
X Objekte in ArrayList einfügen Java Basics - Anfänger-Themen 10
L Vorherige Objekte zählen und ausgeben Java Basics - Anfänger-Themen 11
Orkanson Objekte und Klassen Java Basics - Anfänger-Themen 8
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
D Objekte-Fragen Java Basics - Anfänger-Themen 1
T Objekte in der Methode Java Basics - Anfänger-Themen 8
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
E Eine Instanzvariable und zwei Objekte Java Basics - Anfänger-Themen 14
N Objekte in ArrayList finden Java Basics - Anfänger-Themen 10
K Comparable - Objekte aus Array vergleichen und größtes auswählen Java Basics - Anfänger-Themen 1
R getrennte Objekte aus Klasse erstellen : warum Inhalt dann gleich ? Java Basics - Anfänger-Themen 2
T Objekte in Listen vererben Java Basics - Anfänger-Themen 3
E Methoden Objekte in Methode aufrufen ohne getter und setter? Java Basics - Anfänger-Themen 1
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
R Objekte Vergleichen und Sortieren Java Basics - Anfänger-Themen 3
BobbGott Klassen 2 "Objekte" in einer Methode - wie? Java Basics - Anfänger-Themen 7
S Objekte mit gleichem Namen in unterschiedlichen Klassen Java Basics - Anfänger-Themen 3
S Objekte "gegebenfalls" erzeugen Java Basics - Anfänger-Themen 5
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
snipesss Objekte Java Basics - Anfänger-Themen 14
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
J Objekte in einer Liste Java Basics - Anfänger-Themen 3
D Mehrere Objekte in ein Objekt zusammenfassen Java Basics - Anfänger-Themen 16
W OOP Zwei Objekte beziehen sich aufeinander (Zirkelbezug)? Java Basics - Anfänger-Themen 4
D Objekte mit verschiedenen Attributen erstellen Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
T Objekte mit Verhalten Java Basics - Anfänger-Themen 14
Z OOP Objekte einer Klasse weiteren Klassen zur Verfügung stellen Java Basics - Anfänger-Themen 17
T Objekte erstellen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben