【发布时间】:2017-02-13 07:41:23
【问题描述】:
我有以下Java 代码,它将JRadioButton 添加到JPanel 并处理其鼠标单击事件
JRadioButton offline = new JRadioButton();
offline.setText("Offline Mode");
modePanel.add(offline);
modePanel.setLayout(new GridLayout(2,1));
offline.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
offlineClicked(evt);
}
});
函数offlineClicked 大约需要 1 分钟 才能完全执行。
并且在其执行完成之前,不会处理执行的其他操作。
当offlineClicked 完成执行时,此后执行的所有操作似乎都进入事件队列并处理 FIFO。
因此,用户界面似乎已进入挂起状态。
可以做些什么来同时处理摆动句柄事件而不是等到最后一个完全执行。
【问题讨论】:
-
标准技术是永远不要在事件线程上执行应用程序工作。始终在单独的处理线程上运行应用程序工作,以便 UI 可以保持响应。有关于这个主题的完整书籍和教程,做一些谷歌搜索。从 Oracle 的教程开始。
-
您正在寻找按钮的
SwingWorker和ActionListener; for example (ofSwingWorker) -
每次点击都必须得到处理吗?或者您是否希望在第一次点击的初始过程完成之前忽略点击? - 在实现并发解决方案时(即使使用 SwingWorker 等),您必须考虑到这一点
-
@MadProgrammer,
SwingWorker成功了,谢谢。
标签: java swing concurrency event-handling jpanel