ich hätte noch einmal etwas anderes... Ich kann leider nicht debuggen, weil ich die Methode über einen Webservice aufrufe und bekomme immer beim Aufruf einer bestimmten Array eine Exception. Nun wollte ich kurz reinfragen ob folgender Zugriff eine typische Syntax ist, dann könnte ich schonmal ausschließen, dass es der Aufruf ist...:
Im Setter sieht noch alles gut aus, da lasse ich die Daten auch über eine Schleife anzeigen... Jetzt gehe ich eine Methode weiter, starte n Timer, warte 5 Sek, gehe noch eine Methode weiter und Rufe die selbe Array wie folgt erneut auf und bekomme die NPE....
Code:
for (int k=0; k < this.resultArrayAbt_Nr.length; k++)
{
System.out.println("Abt_Nr...: " + this.resultArrayAbt_Nr[k]);
System.out.println("");
}
Also im Setter überschreibe ich ja die Array und habe auch das richtige Result, deswegen bin ich mir recht sicher, dass die Array korrekt gefüllt ist... Und die Schleife habe ich ja per Guternberg kopiert... Das verwundert mich etwas...
Heißt denn NPE, dass die Array komplett leer ist oder das er nur den Index nicht findet?
Und natürlich vielen Dank, dass du dir so viel Mühe machst!!!
NPE heißt dass die Referenz auf kein Objekt zeigt, in deinem Fall also resultArrayAbt_Nr = null ist.
Dass du da im Setter was zuweist und es dort dann auch funktioniert habe ich schon verstanden, du hast aber mehrere Threads im Spiel, da muss man aufpassen. Es ist nicht sichergestellt, dass alle Threads "dieses Setzen" auch mitbekommen/sehen! (daher vermutete ich ja auch ein Sichtbarkeitsproblem)
Deswegen fragte ich ja, was passiert wenn du mal
Code:
public volatile String[] resultArrayAbt_Nr;
oder synchronized ausprobierst
Vllt. hilft uns allen auch ein kleines Minimalbeispiel was wir alle ausführen können auch aus (vllt kannst du da etwas vorbereiten). Dann kann man das besser nachvollziehen
Hi, volatile hat leider noch nichts bewirkt... Kannst du mir evtl. sagen ob es in Java eine Möglichkeit gibt eine Array zu refreshen? ich kenne das von AS3 her, dann hat er die immer noch ein neu gespeichert... Gruß!
Mhm dort sehe ich aber keinen EDT?! Der Listener wird doch dort gar nicht ausgeführt...Erstelle in der main zumindest irgendwie ein JFrame und mache ihn visible oder so ?!
Oder versteh ichs hier einfach nur nicht? Kann ja auch sein
Hä? Das verstehe ich jetzt nicht... Woran liegt das? Das ist mir eben garnicht aufgefallen. Also in dem anderen Pojekt geht das, da habe ich aber auch keinen Main-Void... Kannst du mir das mit dem JFrame etwas genauer erklären? Gruß!
Du hast in deinem Beispiel einfach kein GUI-Thread, ganz einfach. Haue zumindest ein new JFrame().setVisible(true) in deine main oder so
Ohne den EDT macht der (Swing-)Timer keinen Sinn. Wieso du da überhaupt einen Swing-Timer mit ActionListener gewählt hast, verstehe ich sowieso nicht, hast du dafür eine Erklärung?
Es gibt zwei Timer-Klassen. Einmal die aus java.util und einmal eben aus dem Swing-Package.
Da du aber gar keine GUI-Aktion ausführen willst (zumindest ist keine erkennbar) macht es auch kein Sinn den Code von dem GUI-Thread ausführen zu lassen(was du automatisch durch den Swing-Timer bzw. dem Listener machst).
Im Gegenteil, den Code den du in updateDatabase ausführst dauert viel zu lange und du würdest deine GUI nur blockieren in der Zeit.
Versuche es vllt. also auch mal mit dem anderen Timer
Davon mal abgesehen, tritt das Problem in dem Beispiel aber auch nicht auf, wenn ich ne Gui starte erkennt er jetzt auch die Array... Das ist doch verhext heute.. Besser erstmal bis morgen warten... Besten Dank erstmal... Gruß!