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

Swing Progress Bar通过Worker更新到EventDispatch线程

程磊
2023-03-14
问题内容

我有一个 JAVA6
GUI处理数据导入到我们的数据库。我已经实现了工作的JProgressBar。我知道对GUI所做的更改必须通过事件分发线程完成-
我认为我做不到(正确/完全)。

通过传入在主程序中创建的JProgressBar构造后台Worker线程UploadWorker,并在完成后直接设置更改进度条的值:

// when constructed, this gets set to the main program's JProgressBar.
JProgressBar progress;



protected Void doInBackground() throws Exception {
    write("<!-- Import starting at " + getCurrentTime() + " -->\n");
    boolean chunked = false;
    switch (importMethod) {

            //do some importing

    }

    write("<!-- Import attempt completed at " + getCurrentTime() + "-->\n");

    //here changes to the GUI are made
    progress.setMaximum(0);
    progress.setIndeterminate(false);
    progress.setString("Finished Working");
    return null;
}

这可以正常工作,但有时(并非总是)在标准输出中抛出多个NPE,并且用户抱怨:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.basic.BasicProgressBarUI.updateSizes(Unknown Source)
...etc...

无论如何,我相信我需要做一些事情才能在适当的线程上执行这些更新,对吗?怎么样?


问题答案:

您可以只创建一个新的Runnable来执行GUI更新,然后使用SwingUtilities.invokeLater在GUI线程中调用它。



 类似资料:
  • 目前,我正在尝试使用SwingWorker构建Swing应用程序,以不断更新面板。 我想在这里完成的是从数据库加载数据,每个数据都将作为面板中的图标发布。图标的颜色基于严重程度字段的值。例如: 示例数据在这张图片中,我有12个对象_id A001的数据。doInBackground()方法中的函数将循环12次,并调用publish()函数在面板中显示图标。图标的颜色基于每个对象id的严重性字段的最

  • 我是这个社区的新手! 我想问一下SwingWorker及其与GUI的关系。 我知道有一些关于SwingWorker的问题得到了回答,我已经读了很多,并提出了一些有用的建议。 现在我想发布一些我为一个基本应用程序写的代码,它计算来自指定目录的文件和文件夹的数量。 由于搜索可能需要很多时间,我希望在过程中显示进度条。此外,我希望用户可以通过单击按钮或简单地关闭包含进度条的框架来停止计数过程。 以下是关

  • Worker jd.createWorker(string scriptPath) 创建一个 Worker 线程。目前限制最多只能创建一个 Worker,创建下一个 Worker 前请先调用 Worker.terminate 参数 string scriptPath worker 入口文件的绝对路径 返回值 Worker Worker 对象

  • 我正在尝试迁移到AndroidX,以便将素材组件用作按钮、带输出线的textInputLayout等。问题是,如果我没有错,就像官方网站上说的那样,首先我必须下载Android3.2。我已经下载了3.2 Beta 5,然后我将compileSdkVersion从26更新到了28,我添加了依赖实现'com.google.android.Material:Material:1.0.0-beta01',

  • 本文向大家介绍Android 中通过实现线程更新Progressdialog (对话进度条),包括了Android 中通过实现线程更新Progressdialog (对话进度条)的使用技巧和注意事项,需要的朋友参考一下 作为开发者我们需要经常站在用户角度考虑问题,比如在应用商城下载软件时,当用户点击下载按钮,则会有下载进度提示页面出现,现在我们通过线程休眠的方式模拟下载进度更新的演示,如图(这里为

  • 问题内容: 是否可以使用Tire更新elasticsearch设置?我有这个curl命令,我想自动运行。 该值可通过轮胎获得,但我不确定如何应用。 问题答案: 可能,但是很丑:) 在将来的版本中会变得更好…