问题标签 [swingworker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在循环(线程)中制作 JProgressBar 更新值时出现问题
我试图让我的程序在执行某些操作时在方法中不断更新进度条值。然而,这直到最后才会发生,并且 UI 冻结。
在查看了与我的问题类似的问题后,我尝试实施公认的解决方案(使用线程),但是我无法让它正常工作。就像他们在哪里不在那里一样。
我的程序包含几个类,Main
一个是由netbeans 在JFrame Design模式下自动创建的,所以有些东西,例如static void main
,public Main
并不确定它的某些内容。下面我将把这些方法的片段连同我的线程实现放在一起。
我评论的所有内容I added...
都是我根据我在网上看到的教程和答案提出的,但似乎没有任何效果,感觉就像我尝试了近百万种不同的组合......
提前感谢您的帮助。
java - 为什么我的 SwingWorker 线程在执行完毕后仍继续运行?
我正在为控制台应用程序实现 GUI,我需要在指定的时间间隔内执行一些操作(例如,解析 XML 文件)。我决定将 javax.swing.Timer 与 SwingWorker 一起使用,以确保这些操作不会使我的应用程序无响应。
我以这种方式实现了计时器:
...并按如下方式使用它:
一切都如我所愿。Timer 创建一个新的 SwingWorker 实例并执行它。工作人员完成后,将创建并执行新的工作人员。
我感到困惑的是,在工作线程完成后,我仍然可以在 Netbeans 的调试窗口(例如 SwingWorker-pool-3-thread-1)或 Windows 任务管理器(线程完成后运行线程不会减少)。SwingWorker 线程的数量限制为 10 个,但让它们运行让我很尴尬。
在简单线程使用的情况下:
该线程在执行后自动消失。
这种 SwingWorker 行为正常吗?
java - 带有可更新 JProgressBar 的 Java Swing 线程
首先,我最近一直在使用 Java 的 Concurrency 包,但我发现了一个我被困住的问题。我想拥有和Application,并且Application可以拥有一个SplashScreen
带有状态栏和加载其他数据的。所以我决定使用SwingUtilities.invokeAndWait( call the splash component here )
. 然后SplashScreen
出现一个JProgressBar
并运行一组线程。但我似乎无法很好地处理事情。我已经查看SwingWorker
并尝试将其用于此目的,但线程刚刚返回。这是一些伪代码。以及我想要达到的目标。
- 有一个
SplashScreen
在加载信息时暂停的应用程序 - 能够在多个线程下运行
SplashScreen
- 在所有线程完成之前,让 Update-able的进度条
SplashScreen
不退出。
启动闪屏
闪屏结构
我尝试了很多东西,包括SwingWorkers
使用 CountDownLatch 的线程等。CountDownLatch 实际上以我想要处理的方式工作,但我无法更新 GUI。使用时,SwingWorkers
要么invokeAndWait
基本上无效(这是他们的目的),要么即使使用PropertyChangedListener
. 如果其他人有一些想法,很高兴听到它们。提前致谢。
我实际上已经准备好发布更好的代码来帮助并找到我的解决方案。我感谢所有帮助过的人。
java - SwingWorker 的问题
我正在尝试让 SwingWorker 工作。我目前有以下代码:
我期待图像出现在 JLabel 中,但我只看到 JFrame 弹出。文件已正确加载我已经在另一个设置中进行了测试。任何指针?
java - Swing中的后台线程
我很茫然,一个简单的swing worker的使用。我在 doInBackground() 中添加了一些简单的代码,但它没有执行,我没有收到异常。当我使用调试器时,他正在正常工作。))可能有人有这样的事情,或者告诉我如何缓存这个错误的想法,或者......对不起,代码很复杂。告诉我你需要更多的东西或评论。如果我删除“installer.setFPS(fPSCalculatorGhost.getFPS());”-string,一切都会好起来的。
一切都围绕着 fpsTask-object。它由 interfaceUpdate-thread(或应用程序工作线程)使用,并由初始化它的其他线程使用。结果:1)。fpsTask-object 在一个线程中初始化 2)。fpsTask-object 给另一个线程赋值。
当我从 FPSCalculatorGhost 最终制作 fpsTask 时,它开始工作。
java - 为什么 Eclipse 插件代码无法从外部 java swing 应用程序调用 swingworking 线程?
我已经实现了一个独立的 Java 应用程序,它使用 GUI 的 swing 框架。作为 GUI 的一部分,有一个 JTextArea 在单击按钮后出现,并且在后台处理作业后在 jtextarea 处附加一些文本。我正在使用 SwingWorker 库,因为我不希望我的 jtextarea 冻结应用程序并且它运行良好。所以作业代码位于覆盖的 doInBackground 内。
我面临的问题是当我将这个 GUI 应用程序作为 Eclipse 插件的一部分启动时。我已经用我的 Swing 应用程序构建了一个 jar,并且我已经向 Eclipse 工作台添加了一个扩展。在开始时,应用程序正确启动但是当应用程序流到了要调用swingworker的地步,这个特定的jtextarea被冻结了,什么也没发生。似乎我的Swingworker的doInBackground()函数中的代码没有被调用。我在 eclipse pugin 代码中启动应用程序,如下所示:
其中 MAinFrame 是 java 程序的 JFrame 类。你知道为什么会这样吗?
java - MVC 进度条线程
我在设计中使用 MVC 模式,当用户按下搜索按钮时,我会在模型中调用搜索,但我还想使用从该模型返回的信息更新进度条。
我尝试过使用 swingworker,但进度条没有更新。我怀疑我的线程做错了什么。
我在控制器中定义的按钮是:
这将调用模型中的搜索并在视图中进行以下调用:
模型中定义的用于测试的虚拟函数:
java - 在 MVC 中,模型做了什么,与 SwingWorker 有什么关系?
我阅读了很多关于 Java、Swing、MVC 和 SwingWorker 的内容,但我对模型在 MVC 中的作用完全感到困惑。
我正在构建一个有两个按钮的应用程序:
- 选择文件
- 读取文件
还有一个用于记录的文本框。
我目前在做什么:
- 视图包含小部件但没有逻辑
- 按钮的 actionPerformed() 方法调用 Controller 上的方法
- 控制器将获取所需的数据(包括显示 OptionPane.showOpenDialog())以获取文件
- 文件引用存储在模型中。
- 模型通知(PropertyChangeSupport,观察者模式)新文件的视图。
- 查看启用“读取文件”按钮
我的第一个问题:我应该将状态存储在模型中吗?也就是说,与操作顺序相关的信息:首先必须选择一个文件,然后才能读取它。那么我的模型将成为一个状态机。
我的第二个问题:我让 Controller 显示 OptionPane 是否正确?
然后乐趣开始。用户单击“读取文件”按钮。我所做的与“选择文件”按钮大致相同。View 调用 Controller,但 Controller 使用 SwingWorker 来读取文件,因为这不应该在 EDT 上完成。SwingWorker 发布中间日志消息,这些消息通过对 View 的引用(SwingWorker.process() 方法)添加到文本框。控制器监听来自 SwingWorker 的“状态”属性变化。当“状态”为“完成”时,控制器调用“get()”函数。如果一切正常,则在模型中设置结果。如果不是,则处理异常。
我的第三个也是最重要的问题:模型不应该读取文件吗?!MVC 的重点是关注点分离,以及所有好处(可测试性等)。如果我想要一个新视图(例如 CLI)怎么办?那么我的模型现在只是一个数据模型。它不知道如何读取文件!那么线程问题呢?
希望你能给我一些好的建议。互联网上有大量关于 SwingWorker、MVC 等的示例。但我的问题不是如何针对它们进行编码,而是如何设计。
java - 在调用既访问 Swing 组件又耗时的方法时,防止 Swing GUI 变得无响应
以下行:
使我的 GUI 无响应。
当调用此方法更新大部分 GUI 上的 laf 时,会花费大量时间,因此在此操作期间会使 GUI 无响应。
由于此操作正在操作 GUI,因此也不能为此使用 SwingWorker。从 SwingWorker 文档:
不应在事件调度线程上运行耗时的任务。否则应用程序变得无响应。
Swing 组件只能在 Event Dispatch Thread 上访问。
但这里的问题是该操作正在访问 Swing 组件并且非常耗时。
有没有防止这种反应迟钝的好方法?