2012-01-02 92 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的部分,以全面了解此问题和解决方案。