我对Java没有信心,但我正在开发一种监控公司服务器HDisks的工具,因为我们遇到了一些问题。
我一直在创建一个简单的框架,其中包含一个简单的菜单,JPanel
包含一些信息,但这并不重要。
我的想法很简单:按JButton
的{{1}},然后我的服务(这是一个类扩展JFrame
并在每个周期睡眠一段时间)开始。
我做了所有课程,但是我遇到了这个问题:当我按下按钮时,后台课程开始了,但我失去了对主框架的控制。
如何在背景类之间分隔框架类?
答案 0 :(得分:0)
然后我的服务(这是一个类扩展线程并在每个周期休眠一段时间)开始。我创建了所有类,但是我遇到了这个问题:当我按下我的JButton时,后台类启动了,但是我放松了对主JFrame的控制。
不完全确定"松散控制主JFrame"手段。但我猜测它不再响应用户事件。
这是因为你的Thread.sleep导致Event Dispatch Thread (EDT)
睡觉,所以你要么:
在任何情况下,我都会建议您在ActionListener中添加一个SwingWorker
按钮。 SwingWorker
将为您创建线程,它允许您与框架正确通信。
阅读Concurrency上Swing教程中的部分,了解更多信息和示例,以帮助您入门。本教程将详细介绍EDT
。
答案 1 :(得分:0)
您能提供更多信息吗? 但是根据我的理解,你应该为你的JButton添加一个事件监听器。 示例代码:
BackGroundThread task = new BackGroundThread();
JButton btn = new JButton("Run task");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
task.start();
}
});