Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe via JFileChooser den String eines XML files ermittelt. Ich möchte den String nun von der einen Klasse an die andere übergeben. In der zweiten Klasse (wo der String übergeben wird) möchte ich mit dem SAXBuilder das File verarbeiten.
Das Problem an der ganzen Geschichte ist, dass ich den String nicht von Klasse A nach Klasse B bringe? Wie funktioniert so etwas?
Besten Dank für Deine Antwort. Leider schnalle ich das ganze immer noch nicht richtig. Was macht das return eigentlich genau und wieso setzt Du das dort ein?
Ist es korrekt das Du den Filenamen von einer Klasse in die andere mittels diesem Tag übergibst?
public boolean bearbeiteDatei(String filename)
Kannst Du mir das Prinzip deines Codes kurz erläutern, das würde mir sehr sehr viel bringen. Besten Dank
Das ist die Methode der Klasse Bearbeiter, die du ja in einem if block der Klasse Liefrant aufrufst.
Deshalb das return, am Ende der Methode. Ein if block brauch ja schließlich ein true um in den Block zu springen.
Zum verstehen guck dir diesen Code an !!! Hoffe ist korrekt :lol:
Kannst es z.B. auch so machen, nur weißt du jetzt nicht ob das Bearbeiten in der Methode erfolgreich war oder nicht!
Code:
class Bearbeiter {
...
public boolean bearbeiteDatei(String filename) {
...
}
}
class Lieferant {
...
public void chooseFile(...) {
// Gerödel mit JFileChooser
Bearbeiter worker = new Bearbeiter(); // Objekt der anderen Klasse erzeugen
worker.bearbeiteDatei(filename) // Methodenaufruf
...
}
}
Und wenn es nicht allzuviel Mühe bereitet:
[schild=5 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Lies die Fehlermeldungen![/schild]
Die sind nämlich nicht nur dafür da, deinen Monitor auf Trab zu halten.
Ich bin es mal wieder, ich habe versucht eure Ideen umzusetzen. Leider bin ich nicht sehr viel weiter gekommen. Ich rufe nun aus der Klasse FileAuswahl, die Methode "FileAuswaehlen" auf, sobald diese ein File hat, möchte ich die Methode "saxwer" aufrufen, welche dann die Methofe "GetNames" aufruft, die mir dann das File aus "FileAuswaehlen" in die Methode "saxwer" zurückliefern soll.
Leider wird nur "null" in die Methode "GetNames" geliefert anschliessend erscheint folgende Fehlermeldung;
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.jdom.input.SAXBuilder.fileToURL(SAXBuilder.java:925)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:788)
at FahrplanXML.FileAuswahl.saxwer(FileAuswahl.java:83)
at FahrplanXML.FileAuswahl.FileAuswaehlen(FileAuswahl.java:50)
at FahrplanXML.grundoberflaeche$1.actionPerformed(grundoberflaeche.java:78)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Hier noch einmal der Code:
Code:
package FahrplanXML;
import java.io.File;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;
public class FileAuswahl {
private File filenames;
public void FileAuswaehlen() {
JFileChooser datei = new JFileChooser();
datei.setFileFilter(new FileFilter()
{
@Override public boolean accept (File f)
{
return f.isDirectory() ||
f.getName().toLowerCase().endsWith(".xml");
}
@Override public String getDescription()
{
return "XML-Files";
}
} );
int state = datei.showOpenDialog(null);
if (state == JFileChooser.APPROVE_OPTION )
{
filenames = datei.getSelectedFile();
System.out.println (filenames);
if (filenames != null)
{
try {
System.out.print(filenames);
saxwer();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
{
System.out.println("Kein File");
}
}
else
System.out.println("Auswahl abgebrochen");
System.exit(0);
}
public void saxwer() throws JDOMException, IOException {
FileAuswahl filename = new FileAuswahl();
File files = filename.getNames();
System.out.println (files);
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(files);
Element schedulemessage = doc.getRootElement();
Element messageidentification = schedulemessage.getChild("MessageIdentification");
Attribute messageidentificationwert = schedulemessage.getAttribute("MessageIdentification");
System.out.println(messageidentificationwert);
}
public File getNames() {
System.out.println (filenames);
return this.filenames;
}
}
Hmm, die Klasse ist natürlich nicht vollständig, aber was solls.
In Zeile 79 erstellst du eine Instanz der Klasse FileAuswahl.
Soweit OK.
In Zeile 80 rufst du die Methode getNames() auf.
Nur, wo rufst du die Methode FileAuswaehlen auf? Ich habs nicht gesehen.
Damit enthält filenames natürlich den Initialisierungswert Null,
der dir dann in der Zeile 84 die NullPointerException wirft.
Die Methode saxwer ist bereits Methode der Klasse FileAuswahl.
Warum schreibst du in dieser Methode ...= new FileAuswahl() ?
Du hast ja gar keinen Konstruktor, oder ist der nur nicht im
abgedruckten Code zu sehen?