Tag: swingworker

java swing中的setvisible方法挂起系统

我有正在处理的银行gui应用程序,我的jdialog的setvisible方法似乎有问题。 在用户撤回有效金额后,我弹出一个简单的对话框,显示“正在进行交易”。 在我的dobackground方法中,我继续轮询以检查是否已收到交易。 我尝试使用swingworker,我不明白为什么它不起作用。 如果我删除setvisible调用它工作正常,那么为什么setvisible导致系统挂起? 这是我的jbutton mouselistener中的代码: SwingWorker worker = new SwingWorker(){ JDialog waitForTrans = new JDialog((JFrame)null,true); public String doInBackground() throws Exception { waitForTrans.add(new JLabel(“Updating balance in system. Please Wait…”)); waitForTrans.setMinimumSize(new Dimension(300,100)); waitForTrans.setDefaultCloseOperation(DISPOSE_ON_CLOSE); waitForTrans.setVisible(true); Bank.getInstance().sendTransaction(currentPin,”-“+withdraw); while(!Bank.getInstance().hasCompletedTransaction){ } return null; } public void done(){ try { this.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException […]

使用paintComponent进行Java幻灯片图像延迟

我正在整理一个幻灯片程序,用于衡量用户在每张幻灯片上花费的时间。 幻灯片演示了几个不同的魔术技巧。 每个技巧都会显示两次。 在重复之间显示临时图像。 在每个技巧之间显示过渡图像。 在第一次重复播放时,在显示下一个图像之前,点击后,JPanel颜色在屏幕上闪烁。 在第二次重复相同的技巧期间不会发生这种情况。 图像可能需要很长时间才能加载。 是否有一种简单的方法来预加载图像,以便第一次没有延迟? NOTE: Original code deleted. 编辑2013年1月10日:此代码现在适用于较慢的计算机。 trashgod的第二个附录帮助最多。 mouseClick控件结构定期要求SwingWorker类加载40个或更少的当前技巧,同时还将使用过的图像设置为null。 我已经将我的代码简化为两个Image []并添加了一个main方法,因此它是独立的。 仍然需要运行图像。 现在这是非常简单的代码,如果你想用大量图片制作幻灯片,我认为这将是一个很好的起点。 注意:我想我在使用多个Image []时想出了如何正确实现SwingWorker。 trashgod和kleopatra这个实现符合你的建议吗? 我最终没有使用发布和进程,因为我无法弄清楚如何使用索引数组正常工作,但因为StringWorker没有加载数组中的所有图像(只有40)和代码调用StringWorker每20个图像,应该有一个相当不错的缓冲区。 编辑1/10/2013通过在Mouse类上扩展MouseAdapter来改变MouseListener。 还修复了我的paintComponent方法,以包含对super.paintComponent(g)的调用。 向我的SwingWorker类ImageWorker添加了发布/处理方法。 添加了一个包装类ArrayWrapper,允许传递imageArray [i]及其相应的索引int i并使用publish进行处理。 package slideshow3; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseAdapter; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import java.util.List; public class SlideShow3 extends JFrame […]

Java Swingmultithreading和ui冻结

无法想出这个。 使用worker或invokeLater,UI仍然会冻结。 下载每个文件后,我想要更新JList。 但JList只会在胎面返回后更新。 这是代码: public class MyUi extends javax.swing.JFrame{ … private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){ SwingUtilities.invokeLater(new Runnable() { //To get out of the event tread public void run() { dl(); } }); } private void dl(){ … //ini and run the download class Download myDownload = new Download(); myDownload.doDownload(myDlList); } public void updateJlist(String myString){ myModel.addElement(myString); […]

开始挥杆应用程序的最佳实践

启动java swing应用程序的最佳实践方法是什么? 也许有另一种方法可以做到这一点。 我想知道我是否必须使用SwingUtilities类来启动应用程序(可能性)(第一种可能性)。 public class MyFrame extends JFrame { public void createAndShowGUI() { this.setSize(300, 300); this.setDefaultCloseOperation(EXIT_ON_CLOSE); // add components and stuff this.setVisible(true); } public static void main(String[] args) { // First possibility MyFrame mf = new MyFrame(); mf.createAndShowGUI(); // Secound possibility SwingUtilities.invokeLater(new Runnable() { @Override public void run() { MyFrame mf = new MyFrame(); […]

等待取消的未来实际完成

我有一个SwingWorker调用一些不检查线程中断的代码。 在调用worker.cancel(true) , worker.get()方法将立即抛出CancellationException (正如它应该的那样)。 但是,由于后台任务的代码从不检查其线程是否被中断,因此它很乐意继续执行。 是否存在等待后台任务实际完成的标准方法? 我希望显示一个“正在取消……”消息或类似的东西,直到任务终止。 (我确信如果有必要,我可以在工人类中使用标志来完成此操作,只需查找其他任何解决方案。)

Swing:无法让JButton更新 – repaint()无法正常工作

我第一次使用Swing来创建一个简单的GUI。 它由一个JFrame组成,我在其上放置了一个JButton ,当单击它时,调用一些其他代码需要大约。 3秒钟返回。 就在调用此代码之前,在actionPerformed() ,我想更新按钮上的文本以通知用户正在进行处理。 我的问题是,直到3秒钟的呼叫返回后,按钮上的文字才会更新。 我希望在通话过程中出现更新的文本,然后我会将其更改回来。 在JButton上调用repaint()不会做任何事情,并且在JFrame上调用它会导致“ Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException中的Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException当我单击按钮时抛出Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException ”。

什么是可以运行的最大swing工作线程数

可以运行的Swing Worker线程的数量是否有上限,或者就内存支持而言是这样吗? 这也是可配置的吗?

为什么选择SwingWorker? 为什么不只是Thread或Runnable?

使用SwingWorker而不是Thread或Runnable什么好处?

使用Java的SwingWorker超时完成任务

我正在尝试在我的应用程序中实现SwingWorker类。 有没有办法设置一段时间,之后,SwingWorker“超时”? 我在想,可能会抛出一个OutOfTimeexception,我可以捕获然后再处理。 我只是不确定如何实现它。 感谢你的帮助!

如何将SwingWorker的发布委托给其他方法

我的“问题”可以用以下描述。 假设我们有一个密集的过程,我们希望在后台运行并让它更新Swing JProgress栏。 解决方案很简单: import java.util.List; import javax.swing.JOptionPane; import javax.swing.JProgressBar; import javax.swing.SwingWorker; /** * @author Savvas Dalkitsis */ public class Test { public static void main(String[] args) { final JProgressBar progressBar = new JProgressBar(0,99); SwingWorker w = new SwingWorker(){ @Override protected void process(List chunks) { progressBar.setValue(chunks.get(chunks.size()-1)); } @Override protected Void doInBackground() throws Exception { for […]