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
A [gelöst]Objekte in einer Schleife erzeugen Java Basics - Anfänger-Themen 9
S [gelöst] Wie kann ich später über Objekte zeichnen Java Basics - Anfänger-Themen 2
H Aufgabe so richtig gelöst? Java Basics - Anfänger-Themen 14
P Erste Schritte [gelöst]Erzeugen einer Klasse aus der Klassenbibliothek Java Basics - Anfänger-Themen 4
F Erste Schritte (Gelöst) Anfängerfrage Arraylist ausserhalb der Main Methode Java Basics - Anfänger-Themen 2
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
X problem mit equals.gelöst Java Basics - Anfänger-Themen 2
N Aufgabe richtig gelöst? Java Basics - Anfänger-Themen 7
M Ist diese Aufgabe zu umständlich gelöst? Java Basics - Anfänger-Themen 9
A GELÖST -- Exception in thread "main" Java Basics - Anfänger-Themen 3
S Aufgabe gelöst, lässt sich aber nicht kompilieren Java Basics - Anfänger-Themen 3
J Vereinigung von 2 Mengen [gelöst] Java Basics - Anfänger-Themen 2
W ProcessBuilder Problem -->gelöst - - Jetzt JEditorPane Problem Java Basics - Anfänger-Themen 6
A [gelöst]Array mit ArrayList-Einträgen Java Basics - Anfänger-Themen 12
B While Schleife steuern (gelöst) Java Basics - Anfänger-Themen 2
Strahlungsleck [gelöst]File Pfadangabe funktioniert nicht mit Servername/IP Java Basics - Anfänger-Themen 2
A [gelöst]Aus der Klasse heraus auf ein anderes Objekt zugreifen Java Basics - Anfänger-Themen 4
A [gelöst]Zwei Ausgaben, die eigentlich gleich sein sollten Java Basics - Anfänger-Themen 9
A [gelöst]ArrayList Java Basics - Anfänger-Themen 6
Bloodredangel [gelöst] Kompilieren von .java-Dateien per javac Java Basics - Anfänger-Themen 5
J Aufgabenverteilung über einen Zeitraum: So geschickt gelöst? Java Basics - Anfänger-Themen 3
D Probleme bei Code Portierung von C# nach Java [Gelöst] Java Basics - Anfänger-Themen 4
L [Gelöst:] positive Null Java Basics - Anfänger-Themen 4
L Gelöst: Negative Eingaben sollen verweigert werden Java Basics - Anfänger-Themen 3
L [Gelöst] Cannot make a static reference ... Java Basics - Anfänger-Themen 12
L [gelöst] Einfache Aufgabe, läuft aber nicht. Java Basics - Anfänger-Themen 8
vogella *Gelöst *Im Programm warten (wait()) Java Basics - Anfänger-Themen 2
S die konsole[gelöst] Java Basics - Anfänger-Themen 16
S schaltjahr (gelöst zu 90 %), allerdings folgeprob :/ Java Basics - Anfänger-Themen 18
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

Ähnliche Java Themen

Anzeige

Neue Themen


Oben