Hmm also wie erkläre ich am besten mein Problem:
In meinem Programm werden eine Menge Daten über eine Swingoberfläche eingegeben. Die Swingoberfläche startet "leer", dass heisst es wird nur der Rahmen erzeugt mit JMenus oben drin bzw Icons (wie beim Programm jsmooth z.B.). Wenn ich jetzt auf "Neu" gehe oder auf "Datei öffnen" dann wird die Oberfläche im Inneren erzeugt. Damit der Anwender sieht, dass er was gedrückt hat und ne Vorstellung hat wie lange das erstellen noch dauert habe ich eine Progressbar eingebaut (Swing-Worker halt).
Dabei fliegt mir folgende Exception, wenn ich die Maus innerhalb des Swingfensters bewege.
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at javax.swing.plaf.basic.BasicTabbedPaneUI.tabForCoordinate(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI.setRolloverTab(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI.access$2000(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.mouseMoved(Unknown Source)
at java.awt.Component.processMouseMotionEvent(Unknown Source)
at javax.swing.JComponent.processMouseMotionEvent(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.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(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)
Ich kann den ganzen Code leider nicht posten, da es erstens mehr als 1000 Zeilen code (ohne Kommentar oder Leerzeilen) sind und zweitens Closed Source.
Starten tue ich das ganze so:
Wenn ich das task.get weglasse, dann fliegt oben genannte Exception, weil er anscheinend versucht die Swing-Komponenten anzusprechen bzw zu bestimmen, obwohl die ja gerade erst erstellt werden. Dafür läuft die Progressbar wie gewünscht.
Wenn ich das task.get einbaue, dann fliegt keine Exception mehr, aber die Progressbar wird dann zum Schluss abgearbeitet und springt von 0 auf 100 und is wieder weg. Anscheinend lässt dann der Swingworker nur den ThreadDatenBlatterstellung ablaufen. Dann kann ich das ganze ja gleich ohne Swingworker machen. Hmmm
Ich suche letzendlich nach einer Möglichkeit, wie ich der Maus was zu fressen geben kann (lol) oder wie ich sie abschalten kann für die Dauer des Auftrags.
Ich fummle an dem Problem schon seit mehreren Monaten rum. Die Exception ist zwar nicht so schlimm, weil der Rest gewohnt weiterläuft, da aber bald die Veröffentlichung meines Programmes ansteht, will ich das endlich beseitigen. Habe auch bereits mit anderen Javaproggern daran gesessen. Wir haben es nicht geschafft eine Lösung zu finden. Also ihr seit meine letzte Hoffnung.
hoffnungsvolle Grüße
Milbo
In meinem Programm werden eine Menge Daten über eine Swingoberfläche eingegeben. Die Swingoberfläche startet "leer", dass heisst es wird nur der Rahmen erzeugt mit JMenus oben drin bzw Icons (wie beim Programm jsmooth z.B.). Wenn ich jetzt auf "Neu" gehe oder auf "Datei öffnen" dann wird die Oberfläche im Inneren erzeugt. Damit der Anwender sieht, dass er was gedrückt hat und ne Vorstellung hat wie lange das erstellen noch dauert habe ich eine Progressbar eingebaut (Swing-Worker halt).
Dabei fliegt mir folgende Exception, wenn ich die Maus innerhalb des Swingfensters bewege.
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at javax.swing.plaf.basic.BasicTabbedPaneUI.tabForCoordinate(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI.setRolloverTab(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI.access$2000(Unknown Source)
at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.mouseMoved(Unknown Source)
at java.awt.Component.processMouseMotionEvent(Unknown Source)
at javax.swing.JComponent.processMouseMotionEvent(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.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(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)
Ich kann den ganzen Code leider nicht posten, da es erstens mehr als 1000 Zeilen code (ohne Kommentar oder Leerzeilen) sind und zweitens Closed Source.
Starten tue ich das ganze so:
Code:
try {
task = new ThreadDatenBlatterstellung(myDBs, oeffnen);
task.addPropertyChangeListener(this);
task.execute();
} catch (Exception e) {
System.out.println("DatenBlatterstellung wirft Exception: "+e);
}
try {
task.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Wenn ich das task.get weglasse, dann fliegt oben genannte Exception, weil er anscheinend versucht die Swing-Komponenten anzusprechen bzw zu bestimmen, obwohl die ja gerade erst erstellt werden. Dafür läuft die Progressbar wie gewünscht.
Wenn ich das task.get einbaue, dann fliegt keine Exception mehr, aber die Progressbar wird dann zum Schluss abgearbeitet und springt von 0 auf 100 und is wieder weg. Anscheinend lässt dann der Swingworker nur den ThreadDatenBlatterstellung ablaufen. Dann kann ich das ganze ja gleich ohne Swingworker machen. Hmmm
Ich suche letzendlich nach einer Möglichkeit, wie ich der Maus was zu fressen geben kann (lol) oder wie ich sie abschalten kann für die Dauer des Auftrags.
Ich fummle an dem Problem schon seit mehreren Monaten rum. Die Exception ist zwar nicht so schlimm, weil der Rest gewohnt weiterläuft, da aber bald die Veröffentlichung meines Programmes ansteht, will ich das endlich beseitigen. Habe auch bereits mit anderen Javaproggern daran gesessen. Wir haben es nicht geschafft eine Lösung zu finden. Also ihr seit meine letzte Hoffnung.
hoffnungsvolle Grüße
Milbo