mercredi 29 avril 2015

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

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 Code:

  1. public class XMLCreator {
  2. private static String path = System.getProperties().getProperty("user.home")+
  3. File.separator+PlatformDependence.offerValue("directory")+
  4. File.separator+new Settings().readSettings("pointOfDeparture")+"City.xml";
  5.  
  6. private static File xmlFile = new File(path);
  7. private Namespace ns = Namespace.getNamespace("http://ift.tt/1bTSilK;);
  8. private File defaultXmlFile = new File("resources"+File.separator+"City.xml");
  9. private String origin = new Settings().readSettings("pointOfDeparture");
  10. private String publictransport;
  11. private SAXBuilder builder = new SAXBuilder();
  12. private Document jdomDoc;
  13.  
  14. public XMLCreator() {
  15. super();
  16. }
  17.  
  18. public void writeXML(String cityName,
  19. String ticket,
  20. String dticket,
  21. String hotel,
  22. String publictransport)
  23. throws XPathExpressionException, SAXException,
  24. ParserConfigurationException, JDOMException {
  25. Parser distance = new Parser();
  26. Parser duration = new Parser();
  27. try {
  28. if (ticket.length() == 0) {
  29. ticket = "0.00";
  30. }
  31. if (dticket.length() == 0) {
  32. dticket = "0.00";
  33. }
  34. if (hotel.length() == 0) {
  35. hotel = "0.00";
  36. }
  37. SAXBuilder builder = new SAXBuilder();
  38. Document document = builder.build(xmlFile);
  39. Element xmlRoot = document.getRootElement();
  40. Element city = new Element(ELEMENT_CITY);
  41. city.setAttribute(ATTRIBUTE_NAME, cityName);
  42. city.addContent(new Element(ELEMENT_DISTANCE).setText(String.valueOf(distance.parsedistance(origin, cityName))));
  43. city.addContent(new Element(ELEMENT_DURATION).setText(String.valueOf(duration.parseduration(origin, cityName))));
  44. city.addContent(new Element(ELEMENT_TICKET).setText(ticket));
  45. city.addContent(new Element(ELEMENT_DTICKET).setText(dticket));
  46. city.addContent(new Element(ELEMENT_HOTEL).setText(hotel));
  47. city.addContent(new Element(ELEMENT_PUBLICTRANSPORT).setText(publictransport));
  48. xmlRoot.addContent(city);
  49.  
  50. XMLOutputter xmlOutput = new XMLOutputter();
  51. xmlOutput.setFormat(Format.getPrettyFormat());
  52. xmlOutput.output(document, new FileWriter(path));
  53.  
  54. } catch (IOException ex) {
  55. ex.printStackTrace();
  56. }
  57. }
  58.  
  59. public void changeXML(String cityName,
  60. String varMonthlyTicket,
  61. String varRoundTripTicket,
  62. String varHotel,
  63. String varPublictransport) {
  64. try {
  65. jdomDoc = builder.build(xmlFile);
  66. Element costCalculator = jdomDoc.getRootElement();
  67. Iterator<?> cityList = costCalculator.getChildren(ELEMENT_CITY).iterator();
  68. while (cityList.hasNext()) {
  69. Element city = (Element) cityList.next();
  70. if (cityName.equals(city.getAttribute("name").getValue())) {
  71. Element monthlyTicket = new Element(ELEMENT_TICKET);
  72. monthlyTicket.addContent(varMonthlyTicket);
  73. city.removeChild(ELEMENT_TICKET);
  74. city.addContent(monthlyTicket);
  75. Element roundTripTicket = new Element(ELEMENT_DTICKET);
  76. roundTripTicket.addContent(varRoundTripTicket);
  77. city.removeChild(ELEMENT_DTICKET);
  78. city.addContent(roundTripTicket);
  79. Element hotelCost = new Element(ELEMENT_HOTEL);
  80. hotelCost.addContent(varHotel);
  81. city.removeChild(ELEMENT_HOTEL);
  82. city.addContent(hotelCost);
  83. Element publicTransport = new Element(ELEMENT_PUBLICTRANSPORT);
  84. publicTransport.addContent(varPublictransport);
  85. city.removeChild(ELEMENT_PUBLICTRANSPORT);
  86. city.addContent(publicTransport);
  87. }
  88. }
  89.  
  90. XMLOutputter xmlOutput = new XMLOutputter();
  91. xmlOutput.setFormat(Format.getPrettyFormat());
  92. xmlOutput.output(jdomDoc, new FileWriter(path));
  93.  
  94. } catch (JDOMException | IOException ex) {
  95. ex.printStackTrace();
  96. }
  97. }
  98.  
  99. public void removeElement(String cityName) {
  100. try {
  101. jdomDoc = builder.build(xmlFile);
  102. Element costCalculator = jdomDoc.getRootElement();
  103. Iterator<Element> cities = costCalculator.getChildren("city").iterator();
  104. while (cities.hasNext()) {
  105. Element city = cities.next();
  106. if (cityName.equals(city.getAttribute("name").getValue())) {
  107. cities.remove();
  108. }
  109. }
  110. XMLOutputter xmlOutput = new XMLOutputter();
  111. xmlOutput.setFormat(Format.getPrettyFormat());
  112. xmlOutput.output(jdomDoc, new FileWriter(xmlFile));
  113. } catch (JDOMException | IOException ex) {
  114. ex.printStackTrace();
  115. }
  116. }
  117.  
  118. public List<String> readXml(String cityName) {
  119. List<String> results = new ArrayList<String>();
  120. List<Element> elements = getCityElements(cityName);
  121. String result = null;
  122. if(elements != null) {
  123. results.add(cityName);
  124. for (Element element : elements) {
  125. results.add(element.getValue());
  126. }
  127. }
  128. return results;
  129. }
  130.  
  131. /**
  132.   * Read all elements of the document
  133.   */
  134. private static List<Element> getRootElements() {
  135. SAXBuilder builder = null;
  136. Document jdomDoc = null;
  137. try {
  138. builder = new SAXBuilder();
  139. jdomDoc = builder.build(xmlFile);
  140. } catch (JDOMException ex) {
  141. System.err.println(ex);
  142. } catch (IOException ex) {
  143. System.err.println(ex);
  144. }
  145. if(builder != null && jdomDoc != null) {
  146. return jdomDoc.getRootElement().getChildren();
  147. }
  148. else {
  149. return null;
  150. }
  151. }
  152.  
  153. private static List<Element> getCityElements(String cityName){
  154. List<Element> cities = getRootElements();
  155. if(cities != null) {
  156. for (Element element : cities) {
  157. if(element.getAttributeValue("name").equals(cityName)) {
  158. return element.getChildren();
  159. }
  160. }
  161. }
  162. return null;
  163. }
  164.  
  165.  
  166. public List<String> CityList() {
  167. List<String> CityList = new ArrayList<>();
  168. try {
  169. if (new File(System.getProperties().getProperty("user.home")+
  170. File.separator+PlatformDependence.offerValue("directory")+
  171. File.separator+PlatformDependence.offerValue("setting")).exists()) {
  172. jdomDoc = builder.build(xmlFile);
  173. } else { //TODO Überprüfen wegen JAR-File!
  174. jdomDoc = builder.build(defaultXmlFile);
  175. }
  176. XPathFactory xFactory = XPathFactory.instance();
  177. XPathExpression xpath = xFactory.compile("/costcalculator/city/@name");
  178. for (Object object : xpath.evaluate(jdomDoc)) {
  179. CityList.add(((Attribute)object).getValue());
  180. }
  181. } catch (JDOMException | IOException ex) {
  182. ex.printStackTrace();
  183. }
  184. return CityList;
  185. }
  186. }


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

0 commentaires:

Enregistrer un commentaire