private void write(){
try{
out = new BufferedWriter(new FileWriter("linked.txt"));
int x = 0;
int y = 0;
String sLine = "";
while (y < table.getRowCount()){ <---------- er bringt fehlermeldung bei table
while (x < table.getColumnCount()){
sLine += table.getValueAt(y, x);
sLine += "|";
x++;
}
out.write(sLine);
out.newLine();
sLine = "";
y++;
x = 0;
}
out.close();
}
catch( IOException ex ){ex.printStackTrace();}
"Cannot refer to a non-final varaible table inside an inner class defined in a different method"
aufgerufen wird write im
addActionListener eines Buttons.
unmittelbar über dem addActionListener wird die table ins scrollpane geadded.
wo liegt das problem???
in einigen Beispielen wurde es genauso gemacht und bei denen funzte es laut deren aussage.
Mach keine Inline Funktion drauß, sondern eine normale, dann müsste es gehen!
Wenn du table nur als Funktionsvariable angelegt hast, geht das sowieso net, du musst dir eine anonyme Klasse (der Listener) als eine innere Klasse vorstellen. Wenn das dann eine Funktionsvariable ist, kann der drauf net zugreifen, ist es eine Klassenvariable, so kann er es.
Lässt du die Klassenvariable so musst du sie als final == nicht veränderbar speichern!
Außerdem wunder ich mich immer warum ihr alle so neidig seid mit eurem Code herzeigen....
Glaubt ihr den klaut euch jemand??
...
warum ich den code nicht komplett reinstelle hab ich ja schon des öffteren geschrieben, weil ich auf nem Laptop schreibe und mit dem nicht hier ans netz darf und ich habe einfach nicht die zeit immer alles abzutippen was sich geändert hat. Ansonsten würde ich ja C&P machen.
so ganz komm ich mit deiner erläuterung nicht klar.
was ist eine Inline und was nicht??
die steht doch extra und wird dann beim listener aufgerufen.
die Tabelle wird bei mir so angelegt.
Code:
....
model model = new model();
JTable table = new JTable(model);
...
Klassenvariable = Variable ist in ganzer Klasse verwendbar
Funktionsvariable = Variable ist nur in der Funktion verwendbar!
Du kannst ja außerhalb der einen Funktion ja auch nicht auf model oder table zugreifen und ein anonym eingehängter Listener ist eine andere private innere Klasse, deswegen gehts nicht!
Klassenvariable = Variable ist in ganzer Klasse verwendbar
Funktionsvariable = Variable ist nur in der Funktion verwendbar!
Du kannst ja außerhalb der einen Funktion ja auch nicht auf model oder table zugreifen und ein anonym eingehängter Listener ist eine andere private innere Klasse, deswegen gehts nicht!
Eine Klassenvariable existiert unabhängig von einer Instanz der Klasse. Btw. eigentlich sprechen wir in Java von Methoden (statt Funktionen) , aber....
Eine Instanzvariable gehört zur jeweiligen Instanz der Klasse. Wie der Name schon sagt...
Exakt, deshalb ist der Begriff Klassenvariable von thE_29 nicht korrekt wiedergegeben worden.
Prinzipiell sind bei Java Klassenvariablen durch die Deklaration als static zu erkennen/definieren.
private JTable table ist deshalb keine Klassenvariable, sondern eine Instanzvariable.
Ich hab halt nur C/C++ gelernt und bin dann auf Java umgestiegen
Und in C hieß das halt alles noch Funktion und globale Variable, in C++ hieß es dann zwar schon wie in Java (Methoden, Instanz, etc) aber ich hab mir nie die Mühe gemacht, das auswendig zu lernen!
Was bringts dir wenn du weißt was ne Instanzvariable ist oder eine Klassenvariable, wenn du es net anwenden kannst.
Und im Berufsleben gibts keine Aufgabenstellung wie im Test. Glaube kaum das der Kunde ins Pflichtenheft reinschreibt, "mach mir nur Instanzvariablen, sonst gibts Haue"