2016-03-31 99 views
0

我遇到過任何類型的擺動組件出現問題的時間太長,無法加載大約一天。我嘗試過使用不同的IDE,我更新了Java JDK,但任何類型的swing組件都需要很長時間才能加載,我目前在我的引擎中使用它來加載項目並保存,但它顯示時間太長,所以我創建一個空的程序,只是執行以下操作:擺動元件加載時間過長?

import javax.swing.JOptionPane; 

public class main { 
public main() { 
} 

public static void main(String[] args) { 
    long now = System.currentTimeMillis(); 
    int result = JOptionPane.showOptionDialog(null, "Save before quitting ?", "Red Engine", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); 
    System.out.println(System.currentTimeMillis() - now + "ms"); 
} 
} 

,這是結果:5015ms 所以它採取五秒鐘加載這件事,我也有隻初始化一個JFrame同樣的問題。

import javax.swing.JFrame; 

public class main { 
public main() { 
} 

public static void main(String[] args) { 
    long now = System.currentTimeMillis(); 
    JFrame frame = new JFrame(); 
    System.out.println(System.currentTimeMillis() - now + "ms"); 
} 
} 

,這是結果:4505ms

那麼這到底是怎麼回事與Java? waaay太令人沮喪了。我使用jdk1.8.0_77順便說一句。

感謝您的任何幫助。

+2

由於它需要啓動事件分派線程,並將所需的連接加入到核心操作系統中,這可能並不令人驚訝。從美國東部時間範圍內嘗試並創建您的用戶界面開始,看看是否有所作爲。有關更多詳細信息,請參見[初始線程](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html) – MadProgrammer

回答

1

問題是,當您創建一個Swing框架/對話框時,您將啓動巨大的Swing機器。 Swing需要至少3個額外的線程才能工作,所以Swing應用程序的啓動時間可能比控制檯應用程序稍長(但最小)。

我試着重現你的結果,但只有50ms的幀創建(總共80ms)。即使當我初始化主線程中的所有小部件時,我也會得到相同的結果。爲了獲得正確的結果,您應該初始化Swing Event Dispatcher Thread(EDT)中的所有Swing小部件。這裏是我的代碼:

public class SwingTest { 

    public static void main(String[] args) throws Exception { 
     final long now = System.currentTimeMillis(); 
     // for correct result wee need to do all in the swing thread 
     SwingUtilities.invokeAndWait(new Runnable() { 

      @Override 
      public void run() { 
       final JFrame f = new JFrame(); 
       System.out.println(System.currentTimeMillis() - now); 
       f.pack(); 
       f.setVisible(true); 
      } 
     }); 
     System.out.println(System.currentTimeMillis() - now); 
    } 
} 
+0

'System.out.println(System.currentTimeMillis() - now);'should在'f.setVisible(true);'之後 – mKorbel