框架显示黑屏

时间:2012-01-02 06:38:01

标签: java swing listener concurrency

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();调用时。

你能解释为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

从侦听器执行的代码在EDT上执行。我猜测packetListner.listener()方法会阻止GUI冻结。你不应该阻止EDT。

阅读Concurrency上Swing教程中的部分,以获取此问题的完整描述和解决方案。

答案 1 :(得分:1)

我认为packetListener.listener();方法会执行一些阻止您的UI的复杂操作。

最好创建一个用于监听数据包的线程。 即,像这样使用它

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

希望这有助于你