2011-11-10 37 views
2

簡單代碼:爲什麼我需要一個runnable而不是直接從main調用?從java.sun

public class BasicApp implements Runnable { 

    JFrame mainFrame; 
    JLabel label; 

    public void run() { 
     mainFrame = new JFrame("BasicApp"); 
     label = new JLabel("Hello, world!"); 
     label.setFont(new Font("SansSerif", Font.PLAIN, 22)); 
     mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
     mainFrame.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       mainFrame.setVisible(false); 
       // Perform any other operations you might need 
       // before exit. 
       System.exit(0); 
      } 
     }); 
     mainFrame.add(label); 
     mainFrame.pack(); 
     mainFrame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     Runnable app = new BasicApp(); 
     try { 
      SwingUtilities.invokeAndWait(app); 
     } catch (InvocationTargetException ex) { 
      ex.printStackTrace(); 
     } catch (InterruptedException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

我可以把所有這些方法的到主(),但爲什麼我需要它也將實現可運行一個獨立的運行方法來執行呢?這個概念背後的想法是什麼?謝謝。

+1

你*可以*也將代碼放在一行中 –

+0

'Runnable'是關於併發性的,不是嗎? –

+0

@KerrekSB在這種情況下,是的,它是關於在EDT上運行「Swing stuff」。 – Bringer128

回答

9

從甲骨文SDN:Threads and Swing

一旦Swing組件已經實現,所有代碼都可能影響或依賴於該組件的狀態應該在事件派發線程中執行。

它的要點是當Swing很好並且準備好運行它時,代碼需要運行。當你打電話時不一定是正確的。

0

如果你打算在線程中運行你的代碼,那麼你需要實現接口runnable。當您實施runnable接口時,您需要實施run()方法。

1

run()方法在單獨的線程中啓動。所以你的GUI部分從其他應用程序「獨立」工作,不要在繪圖時停下來。

相關問題