2012-01-02 89 views
0
btnnew.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      try { 
       System.out.println("Hello"); 
       packetListener.listener(); 
      } catch (Exception e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 
    }); 

運行時出現黑屏。但是當它顯示的構造函數調用packetListener.listener();時。框架顯示黑屏

你能解釋一下爲什麼會發生這種情況嗎?

+0

爲什麼所有的下跌票? – Basic 2012-01-02 22:08:40

回答

1

我認爲packetListener.listener();方法執行一些複雜的操作會阻止你的用戶界面。

更好地創建一個線程來偵聽數據包。 即使用這樣

try { 
    System.out.println("Hello"); 
    new Thread(new Runnable() { 
     public void run() { 
packetListener.listener(); 
      } 
    }).start();   

     } catch (Exception e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

希望這有助於你

+0

@ user1089146,我在一週前給你這個答案。本教程解釋了您的確切問題,解釋了爲什麼您需要使用單獨的線程。它甚至提供了一個使用SwingWorker的工作解決方案,它可以爲您創建線程,讓代碼更輕鬆。 – camickr 2012-01-11 16:07:51

3

從監聽器執行的代碼在EDT上執行。我猜測packetListner.listener()方法在這種情況下將會凍結GUI。你不應該阻止美國東部時間。

請閱讀Swing教程中有關Concurrency的部分,以全面瞭解此問題和解決方案。