mercredi 29 avril 2015
Klassen Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren
Posted on 07:04 by verona
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.
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 Code:
-
public class XMLCreator {
-
-
private Namespace ns = Namespace.getNamespace("http://ift.tt/1bTSilK;);
-
private SAXBuilder builder = new SAXBuilder();
-
-
public XMLCreator() {
-
super();
-
}
-
-
String ticket,
-
String dticket,
-
String hotel,
-
String publictransport)
-
throws XPathExpressionException, SAXException,
-
ParserConfigurationException, JDOMException {
-
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();
-
city.setAttribute(ATTRIBUTE_NAME, cityName);
-
xmlRoot.addContent(city);
-
-
XMLOutputter xmlOutput = new XMLOutputter();
-
-
ex.printStackTrace();
-
}
-
}
-
-
String varMonthlyTicket,
-
String varRoundTripTicket,
-
String varHotel,
-
try {
-
jdomDoc = builder.build(xmlFile);
-
Iterator<?> cityList = costCalculator.getChildren(ELEMENT_CITY).iterator();
-
while (cityList.hasNext()) {
-
if (cityName.equals(city.getAttribute("name").getValue())) {
-
monthlyTicket.addContent(varMonthlyTicket);
-
city.removeChild(ELEMENT_TICKET);
-
city.addContent(monthlyTicket);
-
roundTripTicket.addContent(varRoundTripTicket);
-
city.removeChild(ELEMENT_DTICKET);
-
city.addContent(roundTripTicket);
-
hotelCost.addContent(varHotel);
-
city.removeChild(ELEMENT_HOTEL);
-
city.addContent(hotelCost);
-
publicTransport.addContent(varPublictransport);
-
city.removeChild(ELEMENT_PUBLICTRANSPORT);
-
city.addContent(publicTransport);
-
}
-
}
-
-
XMLOutputter xmlOutput = new XMLOutputter();
-
-
ex.printStackTrace();
-
}
-
}
-
-
try {
-
jdomDoc = builder.build(xmlFile);
-
Iterator<Element> cities = costCalculator.getChildren("city").iterator();
-
while (cities.hasNext()) {
-
if (cityName.equals(city.getAttribute("name").getValue())) {
-
cities.remove();
-
}
-
}
-
XMLOutputter xmlOutput = new XMLOutputter();
-
ex.printStackTrace();
-
}
-
}
-
-
List<String> results = new ArrayList<String>();
-
List<Element> elements = getCityElements(cityName);
-
if(elements != null) {
-
results.add(cityName);
-
results.add(element.getValue());
-
}
-
}
-
return results;
-
}
-
-
/**
-
* Read all elements of the document
-
*/
-
private static List<Element> getRootElements() {
-
SAXBuilder builder = null;
-
try {
-
builder = new SAXBuilder();
-
jdomDoc = builder.build(xmlFile);
-
} catch (JDOMException ex) {
-
}
-
if(builder != null && jdomDoc != null) {
-
return jdomDoc.getRootElement().getChildren();
-
}
-
else {
-
return null;
-
}
-
}
-
-
List<Element> cities = getRootElements();
-
if(cities != null) {
-
if(element.getAttributeValue("name").equals(cityName)) {
-
return element.getChildren();
-
}
-
}
-
}
-
return null;
-
}
-
-
-
public List<String> CityList() {
-
List<String> CityList = new ArrayList<>();
-
try {
-
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");
-
}
-
ex.printStackTrace();
-
}
-
return CityList;
-
}
-
}
Klassen Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren
Inscription à :
Publier les commentaires (Atom)
0 commentaires:
Enregistrer un commentaire