问题标签 [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.

0 投票
1 回答
1782 浏览

java - SwingWorker 没有按预期工作

我试图找出 SwingWorker execute() 与 doInBackground() 之间的差异。所以我编写了这个简单的程序来测试差异。

当我运行这个程序时,我得到了以下异常:

但是,当我尝试使用 doInBackground()

该程序工作并打印预期的结果。那么我的错误是什么?并且我应该使用 doInBackground() 方法,因为我已经读过它不应该使用。

谢谢

0 投票
1 回答
693 浏览

java - java从同一个UI启动多个swingworkers

UI 和设置的简要说明

1)普通的香草框架,带有button1button2以及textarea1textarea2

2)Button1使用swingworker myswingworker1启动一个持续运行的task ,swingworker的process方法不断更新textarea1

3)Button2使用swingworker myswingworker2启动一个持续运行的task ,swingworker的process方法不断更新textarea2

在这种情况下,持续运行的任务是“adb logcat”,该命令不断将连续日志信息写入外流,我将其捕获并打印到 textarea。这种捕获和打印是在 swingworker 内部完成的。

问题

只有一个按钮似乎完成了一次将输出打印到文本区域的预期任务,按钮 1 或按钮 2,以先启动者为准。UI 永远不会冻结。

作为实验的一部分,我用命令“dir”替换了一个长时间运行的任务,该命令立即运行并返回,即我将“dir”附加到 button2。现在,如果我运行button2,它可以工作,然后button1它也可以工作。如果我反过来只运行由button1启动的长时间运行的任务,而由button2启动的任务似乎在等待长时间运行的任务结束,这违背了使用 swingworker 的全部目的。

如何解决这个问题?如何防止我的 UI 等待一名 swingworker 完成?

代码摘录

public class multiswing extends javax.swing.JFrame {

public class myswingworker1 extends SwingWorker {

}

public class myswingworker2 extends SwingWorker {

}

0 投票
4 回答
1892 浏览

java - Java 5 SwingWorker 替换

我们的 Swing 应用程序使用出色的 SwingWorker 类在后台线程中执行一些长时间运行的任务。但是,很多旧的 Mac 只支持 Java 5,所以我们希望将我们的应用程序编译为 5 而不是 6。因为 SwingWorker 是在 Java 6 中引入的,我们不能再使用它。

如果我只需要在后台做某事,然后在完成后在 GUI 中进行通信,那么以下内容是否可以接受?还是我忘记了一些重要的事情?

0 投票
1 回答
275 浏览

java - DefaultHttpClient 和 Swingworker 的 cookie 持久性

我有一个 swingworker 类调用一个方法,该方法使用 DefaultHttpClient 建立与安全网站的持久连接。在我登录并使用 swingworker 实例向站点发出请求后,swingworker 实例将关闭(正常)。我的问题是:我如何保持对站点的持久登录,以便将来可以使用另一个 swingworker 实例发出请求 - 无需再次登录站点(我已经创建了一个会话)?我无法将 DefaultHttpClient 的实例传递给 swingworker 类(至少我不知道如何)。我考虑过将 cookie 数据保存到文件中,然后将其传递给 DefaultHttpClient ......但我是否遗漏了一些更基本的东西?

谢谢,罗伯

0 投票
3 回答
1290 浏览

java - “单 LIFO 执行器”/ SwingWorker

Consider a Swing application with a JList or JTable, when the selection changes a SwingWorker is started and loads related data from database and updates UI. 这工作正常,用户界面响应。

但是,如果用户正在快速更改所选行(按住键向上/向下键),我想确保最后选择的行是最后加载的行,而且我不想徒劳地查询数据库。所以我想要的是一个单线程执行器,它的后进先出队列大小=1。因此,向其提交任务会删除任何先前提交的任务,并使其一次最多执行 1 个任务,并且最多有 1 个任务等待执行。

我在 java.util.concurrent 中找不到类似的东西,所以我编写了自己的 Executor。我这样做是对的,还是我错过了并发包中的某些内容?解决方案是可以接受的还是有更好的方法来实现我想要的?

这是一个示例,展示了如何使用它:

0 投票
4 回答
21093 浏览

java - 如何等待 SwingWorker 的 doInBackground() 方法?

假设我有以下代码:

我需要等到t.doTask()完成才能打印出“完成”,但我不确定具体如何。我知道我可能应该join()在这里使用,但我需要一个线程来调用它,而且我不知道如何doInBackground()从我需要调用的地方获取 's 线程join()。谢谢你的帮助。


编辑:感谢您的回复。不幸get()的是,等等并不能完全解决问题。在我的实际代码中,SwingWorker 还有一个重写的process()函数,它在后台线程运行时更新 GUI 窗口。 get()确实会停止打印“完成”直到 after doInBackground,但是 GUI 不会更新。我更新了我的示例代码以反映这一点,尽管现在它当然不会编译。

有没有办法让“完成”打印一次doInBackground完成?GUI 更新代码和“完成”语句是否在同一个线程上?我需要创建一个新线程吗?

0 投票
1 回答
1648 浏览

java - java - 如何在java swing中创建一个可调整大小的矩形?

我在重复同样的问题,我需要在 java swing 中创建一个可重新调整大小的矩形。

我怎样才能做到这一点?

任何帮助表示赞赏。

0 投票
4 回答
13472 浏览

java - java swing挂起系统中的setvisible方法

我有我目前正在处理的银行 gui 应用程序,我的 jdialog 的 setvisible 方法似乎有问题。在用户提取有效金额后,我会弹出一个简单的对话框,上面写着“正在进行交易”。在我的 dobackground 方法中,我不断轮询以检查是否已收到交易。我尝试使用 swingworker,但我不明白为什么它不起作用。如果我删除 setvisible 调用它工作正常,那么为什么 setvisible 会导致系统挂起?这是我的 jbutton mouselistener 中的代码:

0 投票
3 回答
2011 浏览

java - 如何从 Class 方法重复制作 Jlabel addText?

我试过 swingwoker ,但它只会更新一次...... http://piggyman007.blogspot.com/2010/04/java-swingworker-multithread.html

0 投票
2 回答
1611 浏览

java - 如何释放 Swingworker 分配的内存?

我的程序使用了多个Swingworker线程,我需要在每个线程完成后释放它的内存。无论我的线程是通过完成doInBackground()方法终止还是被 停止cancel(),线程本身都保留在那里(它仍然显示在 Jconsole 中)。

我取消引用Swingworker实例并强制进行垃圾收集,但我的 Java 进程从不释放任何内存(例如,如 Windows 任务管理器所示)。

如何完全删除已终止的Swingworker线程?

或者在一些复杂的处理过程中如何释放它在几个地方分配的内存?

任何建议都非常感谢。谢谢。