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 :(得分: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();
}
希望这有助于你