如何在Java中使用SwingWorker?
我是Java的新手,我看了一些有关SwingWorker的教程。但是,我不确定如何使用在上一个问题中给出的示例代码来实现它。
任何人都可以就我的代码片段解释如何使用SwingWorker和/或将我引向一个不错的教程吗?我已经看过了,但不确定自己是否了解。
回答:
通常,SwingWorker
用于在Swing
中执行长时间运行的任务。
在事件调度线程(EDT)上运行长时间运行的任务可能会导致GUI锁定,因此要做的一件事情是使用SwingUtilities.invokeLater
并invokeAndWait
保持GUI响应,从而在运行所需任务之前对其他AWT事件进行优先级排序(以的形式Runnable
)。
但是,问题SwingUtilities
在于它不允许将数据从已执行Runnable
的方法返回到原始方法。这就是SwingWorker
旨在解决的问题。
这是一个示例,其中a SwingWorker
用于在单独的线程上执行耗时的任务,并在稍后显示答案的消息框。
首先,SwingWorker
将进行类扩展:
class AnswerWorker extends SwingWorker<Integer, Integer>{
protected Integer doInBackground() throws Exception
{
// Do a time-consuming task.
Thread.sleep(1000);
return 42;
}
protected void done()
{
try
{
JOptionPane.showMessageDialog(f, get());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
doInBackground
和get
方法的返回类型指定为的第一种类型,SwingWorker
第二种类型是用于publish和process
方法返回的类型,本例中未使用。
然后,为了调用SwingWorker
,将调用该execute
方法。在此示例中,我们将钩ActionListener
到JButton
以执行AnswerWorker
:
JButton b = new JButton("Answer!");b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
new AnswerWorker().execute();
}
});
可以将上述按钮添加到中JFrame
,然后单击以获取消息框。以下内容可用于初始化Swing应用程序的GUI:
private void makeGUI(){
final JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(new FlowLayout());
// include: "class AnswerWorker" code here.
// include: "JButton" b code here.
f.getContentPane().add(b);
f.getContentPane().add(new JButton("Nothing"));
f.pack();
f.setVisible(true);
}
运行该应用程序后,将有两个按钮。一个标有“答案!”的标签 还有另一个“没事”。当一个人点击“答案!” 按钮,一开始什么都不会发生,但是单击“无”按钮将起作用,并表明GUI响应。
并且,一秒钟后,的结果AnswerWorker
将出现在消息框中。
以上是 如何在Java中使用SwingWorker? 的全部内容, 来源链接: utcz.com/qa/417043.html