问题标签 [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 - SwingWorker 没有按预期工作
我试图找出 SwingWorker execute() 与 doInBackground() 之间的差异。所以我编写了这个简单的程序来测试差异。
当我运行这个程序时,我得到了以下异常:
但是,当我尝试使用 doInBackground()
该程序工作并打印预期的结果。那么我的错误是什么?并且我应该使用 doInBackground() 方法,因为我已经读过它不应该使用。
谢谢
java - java从同一个UI启动多个swingworkers
UI 和设置的简要说明
1)普通的香草框架,带有button1和button2以及textarea1和textarea2
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 {
}
java - Java 5 SwingWorker 替换
我们的 Swing 应用程序使用出色的 SwingWorker 类在后台线程中执行一些长时间运行的任务。但是,很多旧的 Mac 只支持 Java 5,所以我们希望将我们的应用程序编译为 5 而不是 6。因为 SwingWorker 是在 Java 6 中引入的,我们不能再使用它。
如果我只需要在后台做某事,然后在完成后在 GUI 中进行通信,那么以下内容是否可以接受?还是我忘记了一些重要的事情?
java - DefaultHttpClient 和 Swingworker 的 cookie 持久性
我有一个 swingworker 类调用一个方法,该方法使用 DefaultHttpClient 建立与安全网站的持久连接。在我登录并使用 swingworker 实例向站点发出请求后,swingworker 实例将关闭(正常)。我的问题是:我如何保持对站点的持久登录,以便将来可以使用另一个 swingworker 实例发出请求 - 无需再次登录站点(我已经创建了一个会话)?我无法将 DefaultHttpClient 的实例传递给 swingworker 类(至少我不知道如何)。我考虑过将 cookie 数据保存到文件中,然后将其传递给 DefaultHttpClient ......但我是否遗漏了一些更基本的东西?
谢谢,罗伯
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。我这样做是对的,还是我错过了并发包中的某些内容?解决方案是可以接受的还是有更好的方法来实现我想要的?
这是一个示例,展示了如何使用它:
java - 如何等待 SwingWorker 的 doInBackground() 方法?
假设我有以下代码:
我需要等到t.doTask()
完成才能打印出“完成”,但我不确定具体如何。我知道我可能应该join()
在这里使用,但我需要一个线程来调用它,而且我不知道如何doInBackground()
从我需要调用的地方获取 's 线程join()
。谢谢你的帮助。
编辑:感谢您的回复。不幸get()
的是,等等并不能完全解决问题。在我的实际代码中,SwingWorker 还有一个重写的process()
函数,它在后台线程运行时更新 GUI 窗口。 get()
确实会停止打印“完成”直到 after doInBackground
,但是 GUI 不会更新。我更新了我的示例代码以反映这一点,尽管现在它当然不会编译。
有没有办法让“完成”打印一次doInBackground
完成?GUI 更新代码和“完成”语句是否在同一个线程上?我需要创建一个新线程吗?
java - java - 如何在java swing中创建一个可调整大小的矩形?
我在重复同样的问题,我需要在 java swing 中创建一个可重新调整大小的矩形。
我怎样才能做到这一点?
任何帮助表示赞赏。
java - java swing挂起系统中的setvisible方法
我有我目前正在处理的银行 gui 应用程序,我的 jdialog 的 setvisible 方法似乎有问题。在用户提取有效金额后,我会弹出一个简单的对话框,上面写着“正在进行交易”。在我的 dobackground 方法中,我不断轮询以检查是否已收到交易。我尝试使用 swingworker,但我不明白为什么它不起作用。如果我删除 setvisible 调用它工作正常,那么为什么 setvisible 会导致系统挂起?这是我的 jbutton mouselistener 中的代码:
java - 如何从 Class 方法重复制作 Jlabel addText?
我试过 swingwoker ,但它只会更新一次...... http://piggyman007.blogspot.com/2010/04/java-swingworker-multithread.html
java - 如何释放 Swingworker 分配的内存?
我的程序使用了多个Swingworker
线程,我需要在每个线程完成后释放它的内存。无论我的线程是通过完成doInBackground()
方法终止还是被 停止cancel()
,线程本身都保留在那里(它仍然显示在 Jconsole 中)。
我取消引用Swingworker
实例并强制进行垃圾收集,但我的 Java 进程从不释放任何内存(例如,如 Windows 任务管理器所示)。
如何完全删除已终止的Swingworker
线程?
或者在一些复杂的处理过程中如何释放它在几个地方分配的内存?
任何建议都非常感谢。谢谢。