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();
调用构造函数时,它显示:
你能解释一下为什么会这样吗?
从侦听器执行的代码在EDT上执行。我猜packketlistener .listener()方法阻塞了,在这种情况下GUI将冻结。你不应该阻塞EDT。
请阅读Swing教程中有关并发性的部分,以获得该问题的完整描述和解决方案。
我认为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();
}
希望这对你有帮助