2016-06-15 9 views
0

私は自分のスイングアプリケーションを実行し、:私はこの解決策を見つけたJava例外「AWT-EventQueueの-0」とjava.lang.ClassCastException

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException 
at javax.swing.LayoutComparator.compare(Unknown Source) 
at javax.swing.LayoutComparator.compare(Unknown Source) 
at java.util.TimSort.countRunAndMakeAscending(Unknown Source) 
at java.util.TimSort.sort(Unknown Source) 
at java.util.Arrays.sort(Unknown Source) 
at java.util.ArrayList.sort(Unknown Source) 
at java.util.Collections.sort(Unknown Source) 
at javax.swing.SortingFocusTraversalPolicy.enumerateAndSortCycle(Unknown Source) 
at javax.swing.SortingFocusTraversalPolicy.getFocusTraversalCycle(Unknown Source) 
at javax.swing.SortingFocusTraversalPolicy.getFirstComponent(Unknown Source) 
at javax.swing.LayoutFocusTraversalPolicy.getFirstComponent(Unknown Source) 
at javax.swing.SortingFocusTraversalPolicy.getDefaultComponent(Unknown Source) 
at java.awt.FocusTraversalPolicy.getInitialComponent(Unknown Source) 
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(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.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$500(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.SequencedEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$500(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(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) 

が、これが完全に問題を解決するかどうかはわかりません。 は、私が変更した場合:

public class MainFrame extends JFrame { 
    ... 
} 
public static void main(String[] args){ 
    new MainFrame(); 
} 

に:

public static void main(String[] args){ 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      new MainFrame(); 
     } 
    }); 
} 

は、私は、これは完全にoccuringからの例外の上排除し、唯一の理由は、エラーの原因となるイベントディスパッチスレッドの外にフォームを作成することがされたことを確認することができますか?ここで

は自分のアプリケーションのコードを単純化されています

public class App { 

    //MyFrame can be show independently or in a TabbedPane 
    public static class MyFrame extends JFrame { 
     public MyFrame() { 
      setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 

      for (int i = 0; i < 8; i++) { 
       JPanel panel = new JPanel(); 
       panel.setBorder(BorderFactory.createTitledBorder("Panel " + i)); 
       panel.add(new JLabel("label " + i)); 
       add(panel); 
      } 

      pack(); 
      setVisible(true); 
     } 
    } 

    public static class MainTabsFrame extends JFrame { 
     public MainTabsFrame() { 
      JTabbedPane tabsPane = new JTabbedPane(); 

      JFrame frame = new MyFrame(); 
      tabsPane.addTab("My Frame 1", frame.getContentPane()); 
      frame.setVisible(false); 

      add(tabsPane); 
      pack(); 
      setLocationRelativeTo(null); 
      setDefaultCloseOperation(EXIT_ON_CLOSE); 

      setVisible(true); 
     } 
    } 

    public static void main(String[] args) { 
     new MainTabsFrame(); 
    } 
} 
+0

[SSCCE](http://sscce.org)を入力してください。 –

+0

"時には初めから"という意味を明確にすることはできますか? – ChadNC

+0

アプリケーションの起動中にエラーが発生しました。私はスイングEDTにスローされているからといって正確に言うことはできません。さらに、すべての実行でエラーが発生するわけではありません。 – hal

答えて

2

それは、コードの1行が必要です。

これが最終的なソリューションです:

public static void main(String[] args){ 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      JFrame _mf= new MainFrame(); 
      _mf.setVisible(true); 
     } 
    }); 
} 

も最初の作成と可視化をSwingのオブジェクトを必要とする操作のすべての種類は、イベントディスパッチスレッドによって実行されなければならないことを覚えておいてください、そうしてくださいJFrame。

+0

スイングオブジェクトのステータスを 'myJFrame.isVisible()'のようにチェックすると、EDTからも行う必要があります。 – hal

+0

より良いはずですが、別の側からは読み取り専用の操作を実行するので、それほど必要ではありません。 – Sandro

関連する問題