Avatar billede madiedk Nybegynder
14. september 2008 - 15:11 Der er 9 kommentarer og
1 løsning

fejlmeddelse når jeg skifter tabbedpane mens tråd kører

Hej

jeg har et program med en tabbedpane og med 5 panes.
i pane 1 er der en knap som kører en tråd det tager ca 10 sek. og virker fint. hvis jeg skifter til en anden pane mens den tråd kører så kommer der en fejlmeddelsen:
(hvordan undgår jeg det, eller hvad betyder det)

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 306
        at javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1349)
        at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1292)
        at javax.swing.plaf.basic.BasicListUI.getPreferredSize(BasicListUI.java:559)
        at javax.swing.JComponent.getPreferredSize(JComponent.java:1632)
        at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:769)
        at java.awt.Container.layout(Container.java:1432)
        at java.awt.Container.doLayout(Container.java:1421)
        at java.awt.Container.validateTree(Container.java:1519)
        at java.awt.Container.validateTree(Container.java:1526)
        at java.awt.Container.validateTree(Container.java:1526)
        at java.awt.Container.validate(Container.java:1491)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.ensureCurrentLayout(BasicTabbedPaneUI.java:1421)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds(BasicTabbedPaneUI.java:1441)
        at com.sun.java.swing.plaf.windows.WindowsTabbedPaneUI.setRolloverTab(WindowsTabbedPaneUI.java:86)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.layoutContainer(BasicTabbedPaneUI.java:2376)
        at java.awt.Container.layout(Container.java:1432)
        at java.awt.Container.doLayout(Container.java:1421)
        at java.awt.Container.validateTree(Container.java:1519)
        at java.awt.Container.validate(Container.java:1491)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.ensureCurrentLayout(BasicTabbedPaneUI.java:1421)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds(BasicTabbedPaneUI.java:1441)
        at com.sun.java.swing.plaf.windows.WindowsTabbedPaneUI.setRolloverTab(WindowsTabbedPaneUI.java:86)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.setRolloverTab(BasicTabbedPaneUI.java:550)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.access$2000(BasicTabbedPaneUI.java:37)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.mouseMoved(BasicTabbedPaneUI.java:3623)
        at java.awt.Component.processMouseMotionEvent(Component.java:6086)
        at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3283)
        at java.awt.Component.processEvent(Component.java:5810)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4413)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3999)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2440)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Avatar billede _carsten Nybegynder
14. september 2008 - 15:53 #1
Jeg gætter !

En af de andre panes bruger data som hentes vha. pane 1 - har jeg ret ?
Avatar billede madiedk Nybegynder
14. september 2008 - 17:02 #2
ja altså jeg har nogle Jlist i de andre panes som bliver opdateret mens tråden kører. det kan man måske ik?
jeg forstår bare ik hvorfor jeg ikke kan skifte mellem de forskellige panes mens tråden kører. De forskellige komponenter (jbutton, jlist osv.) hedder jo stadig det samme så det er vel ligegyldigt hvilken pane jeg er på?
Avatar billede _carsten Nybegynder
14. september 2008 - 18:06 #3
Nej det kan du ikke, Swing aner ikke hvad den vise - er det en JList med 100 eller 200 elementer, så du kan altså ikke ændre JListens model (tilføje/fjerne elementer) under selve initieringen af den. På selve initierings tidspunktet skal størrelse være kendt.
Avatar billede _carsten Nybegynder
14. september 2008 - 18:13 #4
Du kan omgå det ved at initiere din JList med en tom model, og så lade tråden sætte modellen på din JList, når den er færdig med at adde elementer.

Eks

JList list = new JList(new DefaultListModel()); // Initier med tom model


DefaultListModel model = new DefaultListModel(); // model som tråd anvender

tråd kører ...
   
    model.addElement("Element x");
   
tråd færdig...

list.setModel(model);    // Add model til JList
Avatar billede _carsten Nybegynder
14. september 2008 - 18:16 #5
Brugeren vil så se en tom JList, hvis vedkommende klikker på fanen, og vedkommende længe nok vil også se listen fyldes med elementer
Avatar billede _carsten Nybegynder
14. september 2008 - 18:17 #6
Prøver lige igen :)

Brugeren vil så se en tom JList, hvis vedkommende klikker på fanen, og venter vedkommende længe nok vil personen også se listen fyldes med elementer
Avatar billede madiedk Nybegynder
14. september 2008 - 18:39 #7
okay, tak, det prøver jeg. men på det pane hvor knappen der starter tråden er, der er også en jlist der bliver opdateret løbende mens tråden kører og det virker. Så det kan altså kun lade sig gøre hvis jlisten er på samme pane som knappen der aktivere tråden? eller det er måske fordi at den jlist bliver fyldt op i selve den tråd som knappen starter?
Avatar billede _carsten Nybegynder
14. september 2008 - 19:28 #8
Nej det er fordi JListen på det tidspunkt er synlig, den skal ikke gentegnes
Avatar billede madiedk Nybegynder
17. september 2008 - 17:10 #9
okay, tak, smid et svar
Avatar billede _carsten Nybegynder
17. september 2008 - 17:54 #10
Kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester