Tag: swingworker

SecondaryLoop而不是SwingWorker?

从SecondaryLoop的文档中,不清楚何时应该使用这个新function而不是SwingWorker ,一些有趣的案例会很有用。

能够在Future 对象上获得进展

参考java.util.concurrent包和Future接口,我注意到(除非我弄错了)启动冗长任务并能够查询进度的能力仅来自SwingWorker实现类。 这引出了以下问题: 有没有办法在非GUI非Swing应用程序(映像控制台应用程序)中在后台启动冗长的任务并允许其他线程检查进度? 在我看来,没有理由将此function限制在swing / GUI应用程序中。 否则,我看到的唯一可用选项是通过ExecutorService :: submit返回Future对象。 但是,基本Future接口不允许监视进度。

即使使用包装类,SwingWorkerexception也会丢失

我一直在努力解决SwingWorker的可用性问题,该问题包含后台任务中抛出的任何exception,例如, 在此SO线程中描述的。 该线程给出了问题的一个很好的描述,但没有讨论恢复原始exception。 我已被传递的applet需要向上传播exception。 但我甚至无法抓住它。 我正在使用此博客条目中的SimpleSwingWorker包装器类来尝试解决此问题。 这是一个相当小的课程,但我会在最后重新发布它仅供参考。 调用代码看起来很像 try { // lots of code here to prepare data, finishing with SpecialDataHelper helper = new SpecialDataHelper(…stuff…); helper.execute(); // this will call get+done on the actual worker } catch (Throwable e) { // used “Throwable” here in desperation to try and get // anything at all to […]

将默认光标更改为忙碌光标无法按预期方式工作

经过多次尝试使JProgressBar按预期工作,我终于成功实现了我的目标。 我曾经使用@MadProgrammer的建议并使用SwingWorker来最终使程序正常工作。 现在,当我的JProgressBar从0%变为100%时,我希望光标变为BUSY_CURSOR http://sofzh.miximages.com/java/Cursor hourglass white.png 。 我用Google搜索并发现了这一点 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 是代码来做到这一点。 我已经尝试过,但它没有按预期工作。 相关的代码: JProgressBar progress; JButton button; JDialog dialog; //Fields of my GUI class progress=new JProgressBar(JProgressBar.HORIZONTAL,0,100); button=new JButton(“Done”); dialog=new JDialog(); //Done from methods progress.setValue(0); progress.setStringPainted(true); progress.setBorderPainted(true); //Also done from methods button.addActionListener(this); //Also done from methods dialog.setLayout(new FlowLayout(FlowLayout.CENTER)); dialog.setTitle(“Please wait…”); dialog.setBounds(475,150,250,100); dialog.setModal(true); //Also done from methods dialog.add(new […]

打开jdialog后更新jlabel文本

我必须查询数据库以获取要在JLabel上写入的数据并加速打开对话框 在完成SwingWorker进程后,我创建了没有文本和设置文本的JLabel 但是JLabel文本没有更新 有没有办法实现这一目标 这是我的对话框的src代码: package com.caisse.caisseFrame.dialogs; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Image; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.SwingWorker; import com.caisse.ConnectDB; import com.caisse.CustomComponent.JButtonCustom; import com.caisse.CustomComponent.JPanelCustom; import com.caisse.caisseFrame.CaisseFrame; import com.soqop.caisse.dao.TicketDAO; public class LectureXDialog extends JDialog { /** * […]

Java SwingWorker不会在任务完成时终止

好的,所以我一直在玩SwingWorker并获得一些简化的代码来更新gui,但是我很难弄清楚如何让线程在完成时正确终止。 目前,它只通过停止选项终止。 如何设置它以在完成其进程时正确终止线程? 目前, return null; 它进入包装线并挂起。 我的代码如下: package concurrency; import java.util.List; import java.util.Random; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import java.awt.Insets; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; public class PBTest extends JFrame implements ActionListener { private final GridBagConstraints constraints; private final JProgressBar pb, pbF; private final […]

与swingworker的对话是鸡/蛋

我试图通过不在主线程(EDT)上执行长任务来遵循Java最佳实践。 所以我打算使用带有Modal Dialog的swingWorker。 这样,modal dialog阻止用户执行任何操作,直到该任务完成,并且我可以在进程发生时更新对话框的状态。 现在的问题是,使用modal dialog,它不仅会阻止用户,而且在调用setVisible之后也不会阻止任何内容 所以,如果我这样做 dialog.setVisible(true); new SwingWorkerTask().execute(); //This does not get called 如果我这样做 new SwingWorkerTask().execute(); dialog.setVisible(true); // Well what the point of setting visible after the fact. 那么如何在任务发生时阻止用户操作并显示对话框? 谢谢

在下载过程中使用swingworker更新JProgressBar

问题已解决!!!!!! 非常感谢trashgod和HoverCraftFullOfEels! 我终于通过使用下面的例子并略微改变它来获得这个概念。 更改允许缩放进度条(默认为100个单位)。 再次感谢您的耐心和愿意为此而努力。 意味着很多人,~Kyte ps – + 1全部’围绕:) /** @see http://stackoverflow.com/questions/4637215 */ public class Threading_01 extends JFrame { private static final String s = “0.00”; private JProgressBar progressBar = new JProgressBar(0, 100); private JLabel label = new JLabel(s, JLabel.CENTER); public Threading_01() { this.setLayout(new GridLayout(0, 1)); this.setTitle(“√2”); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(progressBar); this.add(label); this.setSize(161, 100); this.setLocationRelativeTo(null); this.setVisible(true); […]

调用SwingWorker.get()时防止GUI冻结

我有一个程序,我正在加载一个文件,同时我正在显示一个窗口,通知用户该文件正在加载。 我决定创建一个FileLoader类,它实际上是处理文件的SwingWorker和实现PropertyChangeListener的ProgressWindow,以通知用户传递给它的SwingWorker的状态。 我的代码目前看起来像这样: FileLoader loader = new FileLoader(filePath); new ProgressWindow(loader, “Loading File”, “Loading File”); //ProgressWindow’s constructor calls loader.execute() inherited from SwingWorker doc = loader.get(); //GUI Freezes when called 问题在于每当我调用loader.get()时,它都会冻结GUI,因此进度窗口中的进度条不会运行,整个过程毫无意义。 据我所知,这是因为控制GUI的线程与调用loader.get()的线程相同,而loader.get()在loader.execute()运行时保持不变。 到目前为止,我已经尝试为loader.get()命令或loader.execute()方法创建一个新线程,并在线程上调用SwingUtilities.invokeLater(),但随后整个程序冻结。 我考虑过为SwingWorker.isDone()创建一个ChangeListener,然后运行loader.get(),但这需要对我的代码进行一些修改,而我宁愿不这样做。 谁能告诉我最好的办法是什么?

SwingWorker中的error handling

我的问题是基于理论的问题,但它确实满足了我的特定需求。 当你的SwingWorker抛出a)你可以预料到并且b)需要从中恢复并继续的exception时,你会怎么做,但是你想通知用户这个错误已经发生了? 如何获取预期的exception并通知用户而不违反“ doInBackground()没有Swing代码”规则? 考虑到这个问题,我已经开发了一个SSCCE,我想提出下面的问题。 SSCCE: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.concurrent.ExecutionException; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; public class Test { public static void main(String args[]) { final JFrame frame = new JFrame(); JButton go = new JButton(“Go.”); go.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) […]