Frage von chuckn0rris9, 25

Er findet das Objekt vom BufferedWriter nicht....?

Hallo, Ich würde gerne aus meiner GUI eine Textdatei erstellen.

    public static void main(String[] args) throws IOException {
    FileWriter fw = new FileWriter("ausgabe.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    new MMGUI();

Hier hab ich die Objekte angelegt,

public void jButton1_MouseClicked(MouseEvent evt) {

// TODO hier Quelltext einfügen

ThemaEins=jTextField1.getText();
ThemaZwei=jTextField2.getText();
ThemaDrei=jTextField3.getText();
ThemaVier=jTextField4.getText();


bw.write(ThemaEins);
bw.newLine();
bw.write(ThemaZwei);
bw.close()  ; 



}

Hier will ich die Aus dem Jtextflied den Text rausholen... als fehler kommt aber :

Java-Compiler
MMGUI.java:137:5: error: cannot find symbol
    bw.write(ThemaEins);
    ^
  symbol:   variable bw
  location: class MMGUI
MMGUI.java:138:5: error: cannot find symbol
    bw.write(ThemaZwei);
    ^
  symbol:   variable bw
  location: class MMGUI
MMGUI.java:139:5: error: cannot find symbol
    bw.close()  ; 
    ^
  symbol:   variable bw
  location: class MMGUI
3 errors

der findet das das angelegte objekt nicht.... ich komme nicht weiter... hoffe ihr könnt mir vllt helfen.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von KnusperPudding, Community-Experte für Java, 12
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("ausgabe.txt");
BufferedWriter bw = new BufferedWriter(fw);

new MMGUI(); }

Da sich der Filewriter und BufferedWriter innerhalb einer Methode befinden, sind diese lokale Variablen, auf die auch nur innerhalb dieser Methode zugegriffen werden kann.

Wenn du diese nun in deine GUI verwenden willst, hätte ich hier zwei Ansätze für dich:

1. Du deklarierst deinen BufferedWriter als Instanz-Variable und initialisierst diese ggf. über den Konstruktor und greifst so von deiner GUI aus drauf zu.

Aber persönlich halte ich das für keine allzuschöne Lösung, da ich gerne nur dann eine Writer-Instanz aufmachen möchte, wenn ich auch vorhabe etwas zu schreiben. Weshalb ich auch zu Vorschlag 2 komme:

2. Du erstellst eine eigene Methode für das Schreiben in die Datei, auf die du von deinem Button beispielsweise zugreifst:

public static void writeFile(String context) {
   BufferedWriter bw = new BufferedWriter(new FileWriter("ausgabe.txt"));
    bw.write(context);
    ....
}
Kommentar von chuckn0rris9 ,

ich teste es gleich mal, danke erstmal :)

Antwort
von DexterNemrod, 19

Deine Klasse MMGUI kennt nur die referenzen, die du ihr im Konstruktor übergeben hast.

Damit sie deinen BufferedWriter erkennt musst du die Zeile in deiner Main ändern und new MMGUI(bw) schreiben. Zusätzlich braucht deine MMGUI Klasse einen Konstruktor mit einem Attribut vom Typ BufferedWriter. Den speichert sie dann in einer Instanzvariable und schon kannst du auch in der jButton1_MouseClicked darauf zugreifen.

Siehe auch http://openbook.rheinwerk-verlag.de/javainsel/javainsel_05_005.html#dodtp0fb99ec... für eine Erklärung, wie man einen Konstruktor schreibt.

Kommentar von chuckn0rris9 ,

also statt im main das Objekt anzulegen, im konstruktor anlegen? hab ich das richtig verstanden?

Kommentar von DexterNemrod ,

Entweder das oder das Objekt von der Main explizit an den Konstruktor übergeben.

Keine passende Antwort gefunden?

Fragen Sie die Community