2016-04-20 26 views
0

我試圖用SwingUtilitiesClassCastException異常拋出

Thread tt = new Thread(new Runnable() 
    { 
     public void run() 
     { 
      try 
      { 
       SwingUtilities.invokeAndWait(new Runnable() 
       { 

        @Override 
        public void run() 
        { 
         new Loadingframe(); 

        } 
       }); 
      } catch (InvocationTargetException e) 
      { 
       e.printStackTrace(); 
      } catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 

     } 
    }); 
    tt.start(); 

類Loadingframe創建JFrame是一個非常簡單JFrame。有時,在運行這段代碼,我得到ClassCastException異常在

new Loadingframe(); 

我也試過InvokeLaterThreads only without Swing但同樣的錯誤太

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException 
at javax.swing.LayoutComparator.compare(LayoutComparator.java:75) 
at javax.swing.LayoutComparator.compare(LayoutComparator.java:42) 
at java.util.TimSort.binarySort(TimSort.java:292) 
at java.util.TimSort.sort(TimSort.java:217) 
at java.util.Arrays.sort(Arrays.java:1512) 
at java.util.ArrayList.sort(ArrayList.java:1454) 
at java.util.Collections.sort(Collections.java:175) 
at javax.swing.SortingFocusTraversalPolicy.enumerateAndSortCycle(SortingFocusTraversalPolicy.java:136) 
at javax.swing.SortingFocusTraversalPolicy.getFocusTraversalCycle(SortingFocusTraversalPolicy.java:110) 
at javax.swing.SortingFocusTraversalPolicy.getFirstComponent(SortingFocusTraversalPolicy.java:445) 
at javax.swing.LayoutFocusTraversalPolicy.getFirstComponent(LayoutFocusTraversalPolicy.java:166) 
at javax.swing.SortingFocusTraversalPolicy.getDefaultComponent(SortingFocusTraversalPolicy.java:535) 
at java.awt.FocusTraversalPolicy.getInitialComponent(FocusTraversalPolicy.java:169) 
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:420) 
at java.awt.Component.dispatchEventImpl(Component.java:4752) 
at java.awt.Container.dispatchEventImpl(Container.java:2292) 
at java.awt.Window.dispatchEventImpl(Window.java:2739) 
at java.awt.Component.dispatchEvent(Component.java:4703) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:702) 
at java.awt.EventQueue$3.run(EventQueue.java:696) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:724) 
at java.awt.EventQueue$4.run(EventQueue.java:722) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:721) 
at java.awt.SequencedEvent.dispatch(SequencedEvent.java:128) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:749) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:702) 
at java.awt.EventQueue$3.run(EventQueue.java:696) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:724) 
at java.awt.EventQueue$4.run(EventQueue.java:722) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:721) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

和我的加載類

public class Loadingframe extends JFrame 
{ 
    public Loadingframe() 
    { 
     this.setType(Type.UTILITY); 
     this.setUndecorated(true); 
     setBackground(new Color(0, 0, 0, 0)); 
     setSize(new Dimension(500, 500)); 

     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new GridBagLayout()); 
     JButton b = new JButton(
       new ImageIcon(getClass().getResource("/reso/loading11.png"))); 
     b.setBorderPainted(false); 
     b.setFocusPainted(false); 
     b.setContentAreaFilled(false); 
     add(b); 
     this.setVisible(true); 
     this.addWindowFocusListener(new WindowFocusListener() 
     { 

      @Override 
      public void windowLostFocus(WindowEvent e) 
      { 
       Loadingframe.this.dispose(); 
      } 

      @Override 
      public void windowGainedFocus(WindowEvent e) 
      { 
      } 
     }); 
     this.setFocusable(true); 
     getContentPane().requestFocus(); 
    } 
} 
+1

什麼是加載,類或方法? –

+0

@MehrajMalik一類擴展JFrame的 –

+0

份額ClassCastException異常 – dumitru

回答

1

我看你的天堂」 t設置平臺的外觀和感覺,還是你?

像這樣

try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
    } catch (Exception e) { } 

間歇性錯誤,有時造成的,因爲沒有被登記在鞦韆上保持Componet Hierarchy的Swing組件。通常情況下,當我們在除EDT之外的其他線程上加載GUI時,會發生這種情況(Event Dispatcher Thread)。 爲確保您註冊組件,請執行以下操作:

Thread tt = new Thread(new Runnable() 
    { 
     public void run() 
     { 
      try 
      { 
       SwingUtilities.invokeAndWait(new Runnable() 
       { 

        @Override 
        public void run() 
        { 
         EventQueue.invokeLater(new Runnable() { public void run() { 
          new Loadingframe(); 

         }}); 

        } 
       }); 
      } catch (InvocationTargetException e) 
      { 
       e.printStackTrace(); 
      } catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 

     } 
    }); 
+0

很高興,幫助 –