2012-01-02 31 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

なぜ、すべてのダウン票を助け、この

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(); } 

希望のようにそれを使うのか? – Basic

答えて

1

私はpacketListener.listener();メソッドがUIをブロックする複雑な操作を実行すると思います。

パケットを受信するためのスレッドを作成する方がよい。 すなわち、これはあなたに

+0

@ user1089146、私はあなたに1週間以上前にこの答えをくれました。このチュートリアルでは、別のスレッドを使用する必要がある理由を説明する正確な問題について説明します。それはコードを簡単にするためのスレッドを作成するSwingWorkerを使用した実用的なソリューションを提供します。 – camickr

3

リスナーから実行されるコードは、EDTで実行されます。 packetListList.listener()メソッドがブロックされている場合、GUIがフリーズしていると思います。あなたはEDTを妨害すべきではありません。

ConcurrencyのSwingチュートリアルのセクションを読んで、この問題とその解決方法の詳細を確認してください。

関連する問題