当前位置: 首页 > 面试题库 >

如何在Java中使用SwingWorker?

卫景明
2023-03-14
问题内容

我是Java的新手,我看了一些有关SwingWorker的教程。但是,我不确定如何使用在上一个问题中给出的示例代码来实现它。

任何人都可以就我的代码片段解释如何使用SwingWorker和/或将我引向一个不错的教程吗?我已经看过了,但不确定自己是否了解。


问题答案:

通常,SwingWorker用于在Swing中执行长时间运行的任务。

在事件调度线程(EDT)上运行长时间运行的任务可能会导致GUI锁定,因此要做的一件事情是使用SwingUtilities.invokeLaterinvokeAndWait保持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();
        }
    }
}

doInBackgroundget方法的返回类型指定为的第一种类型,SwingWorker第二种类型是用于publish和process方法返回的类型,本例中未使用。

然后,为了调用SwingWorker,将调用该execute方法。在此示例中,我们将钩ActionListenerJButton以执行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将出现在消息框中。



 类似资料:
  • 问题内容: 我想对英语句子加标签,并进行一些处理。我想使用openNLP。我已经安装了 当我执行命令时 它提供输出POSTagging Text.txt中的输入 我希望它安装正确吗? 现在如何从Java应用程序内部进行此POStagging?我已将openNLPtools,jwnl,maxent jar添加到项目中,但是如何调用POStagging? 问题答案: 这是我放在一起的一些(旧)示例代码

  • 问题内容: 我正在尝试使用Java中的HtmlUnit登录网站。首先,我输入用户名,然后输入密码。之后,我需要从下拉框中选择一个选项。输入用户名和密码似乎有效,但是当我尝试从下拉框中选择项目时出现错误。谁能帮我解决这个问题?我的代码如下: 问题答案: 这是HTMLunit的单元测试中的代码。 请注意,他们使用的是getSelectsByName而不是getElementById。 这是这些单元测试

  • 问题内容: 使用Java工具, 我可以使用WSDL生成打SOAP Web服务所需的存根和类。 但是我不知道如何在REST中做同样的事情。如何获得击中REST Web服务所需的Java类。无论如何,要使用该服务的方式是什么? 谁能给我指路? 问题答案: 工作示例,请尝试以下操作:

  • 问题内容: 我是Java的初学者,并且正在使用newboston的Java教程(youtube)。在教程36-37中,他开始使用String.format();。他在过去的教程中没有解释。这是他正在上课的代码: 因此,他正在做的是进行某种军事时间课程,并使用String格式。所以我要问的是,是否有人可以向我解释String.format()的工作方式以及上述格式的工作方式。谢谢您的帮助! 问题答案

  • 问题内容: 我是Java的初学者。我只想使用Eclipse输出。 我试过了,但是没有用。 问题答案: java.lang不包含名为StringUtils的类。有一些第三方库,例如Apache Commons Lang 或Spring framework 。确保在项目类路径中有相关的jar,然后导入正确的类。

  • 问题内容: 在Java中使用curl。我的问题是Java内置的curl或我必须从任何第三方资源安装它才能与Java一起使用。如果是这样,如何在java中安装curl。我已经搜寻了很长时间,但没有找到任何帮助。希望有人能帮助我。 提前致谢。 问题答案: 你可以使用和/或。 另请参见有关该主题的Oracle简单教程。但是,它有点冗长。为了减少冗长的代码结尾,你可能需要考虑使用Apache HttpCl