2012-03-18 51 views
7

我的Java版本是:validateTree在Java中7.x中不工作(在Java中6.x中被罰款)

Java插件10.3.1.255用版本的JRE 1.7.0_03-B05 Java的熱點( TM)客戶機VM

所以當我有6.x版本的一切都很好,升級我有了這個之後:

 
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: This function should be called while holding treeLock 
     at java.awt.Component.checkTreeLock(Component.java:1196) 
     at java.awt.Container.validateTree(Container.java:1682) 
     at pl.recorder.ScenarioWindow.showUploadPanel(PlayerWindow.java:721) 
     at pl.recorder.actions.UploadFilesAction.execute(DesignFilesAction.java:71) 
     at pl.recorder.actions.EndTestAction.actionPerformed(EndTestAction.java:91) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
     at java.awt.Component.processMouseEvent(Component.java:6505) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
     at java.awt.Component.processEvent(Component.java:6270) 
     at java.awt.Container.processEvent(Container.java:2229) 
     at java.awt.Component.dispatchEventImpl(Component.java:4861) 
     at java.awt.Container.dispatchEventImpl(Container.java:2287) 
     at java.awt.Component.dispatchEvent(Component.java:4687) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
     at java.awt.Container.dispatchEventImpl(Container.java:2273) 
     at java.awt.Window.dispatchEventImpl(Window.java:2713) 
     at java.awt.Component.dispatchEvent(Component.java:4687) 
     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
     at java.awt.EventQueue.access$000(EventQueue.java:101) 
     at java.awt.EventQueue$3.run(EventQueue.java:666) 
     at java.awt.EventQueue$3.run(EventQueue.java:664) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
     at java.awt.EventQueue$4.run(EventQueue.java:680) 
     at java.awt.EventQueue$4.run(EventQueue.java:678) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 

我改變validateTree()validate()和驚喜;) - 埃弗特興工作正常,但我不知道這個變化是否也可以在Java 6.x(我猜不是)。我如何改變這個代碼在Java 6x和7x中工作。

+0

什麼代碼?另請參閱[初始線程](http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)。 – trashgod 2012-03-18 21:39:41

回答

0

我不能完全肯定,但我認爲你可以使用:

System.getProperty("java.version"); 

就檢查它是否是6或7,並做不同的事情取決於這一點。

10

「這不是一個錯誤,這是一個功能」 的Java 7的;)

這個功能應該被稱爲按住treeLock

這是強迫你寫:

synchronized(getTreeLock()) { 
    validateTree(); 
} 
+0

當我假設客戶端將Java更新爲1.7時,剛剛收到其中一箇舊程序停止工作的問題。這解決了這個問題:)在我的情況下,我想確保操作在包含組件的大小已知並且驗證不夠時完成。 – Boro 2014-06-03 14:15:07

相關問題