标签: swingworker

如何在Java中使用SwingWorker?

与我之前的问题相关:从Java中的另一个类调用重绘?

我是Java的新手,我已经看过一些关于SwingWorker的教程.但是,我不确定如何使用我在上一个问题中给出的示例代码来实现它.

任何人都可以解释如何使用SwingWorker关于我的代码片段和/或指向一个体面的教程?我看了,但我不确定我还明白.

java swingworker

44
推荐指数
2
解决办法
8万
查看次数

可以在main之外的类中使用进度条吗?

现在,我的主要是用10行调用一个gui.根据这些行中有多少行有文本,调用9个类中的1个(两行必须有文本).被调用的类执行计算,我希望将进度条绑定到.以下是其中一个被调用类的示例(每个类都相似,但足够不同以保证新类.)我认为问题违反了EDT规则,但我在其上看到的所有示例都涉及到论点.运行代码时会出现框架,但在完成所有计算之前,进度条不会更新.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class twoLoan extends JFrame {

    static JFrame progressFrame;
    static JProgressBar progressBar;
    static Container pane;
    double amountSaved = 0;
    int i = 0;

    public void runCalcs(Double MP, Double StepAmt,
        Double L1, Double L2, Double C1, Double C2,
        Double IM1, Double IM2, Double M1Start, Double M2Start) {

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
        }

        int iterations = (int) (MP - (M1Start * M2Start));

        //Create all components
        progressFrame = new JFrame("Calculation Progress");
        progressFrame.setSize(300, …
Run Code Online (Sandbox Code Playgroud)

java swing swingworker jprogressbar

31
推荐指数
1
解决办法
2万
查看次数

停止/取消SwingWorker线程?

我正试图找出如何在按下按钮时停止运行SwingWorker线程.我一直在四处寻找,我在解决如何做到这一点时遇到了一些麻烦.目前这就是我所拥有的:

new MySwingWorkerClass(args).execute();
Run Code Online (Sandbox Code Playgroud)

我正在创建一个按钮,我想用它来停止线程:

button = new JButton("Stop");
button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) 
        {
        // Stop the swing worker thread
        }
});
Run Code Online (Sandbox Code Playgroud)

我已经环顾四周寻找答案,到目前为止我已经设法找到了取消方法.我不明白如何使用它来阻止我的摇摆工作者.我尝试了以下但它不起作用:

SwingWorker.cancel(true);
Run Code Online (Sandbox Code Playgroud)

java swing swingworker

26
推荐指数
2
解决办法
3万
查看次数

使用SwingWorker时如何处理异常?

我在Java 6中使用SwingWorker来避免在事件派发线程上运行长时间运行的代码.

如果在我的done()方法中调用get()会返回异常,那么处理异常的适当方法是什么?

我特别关注可能的InterruptedExceptions.JavaDoc示例简单地忽略了异常,但多年来我已经了解到吞咽异常导致难以调试的代码.

示例用法如下:

new SwingWorker<String, Void>() {

    @Override
    protected String doInBackground() throws Exception {
        // do long-running calculation
        return result;
    }

    @Override
    protected void done() {
        try {
            setTextField(get());
        } catch (InterruptedException e) {
            e.printStackTrace();  
        } catch (ExecutionException e) {
            e.printStackTrace();  
        }
    }
}.execute();
Run Code Online (Sandbox Code Playgroud)

java swing swingworker

22
推荐指数
1
解决办法
8773
查看次数

如果线程启动执行程序,则无法从Future <?>和SwingWorker获取ArrayIndexOutOfBoundsException

我通过使用Executor玩SwingWorker的多线程,我在那里错误地从Vector中识别出错误的元素,看起来像这个代码相当忽略了Vector中的元素不存在

我的问题 - >如何/有可能以某种方式捕获此异常

简单的输出

run:
Thread Status with Name :StartShedule, SwingWorker Status is STARTED
Thread Status with Name :StartShedule, SwingWorker Status is DONE
Thread Status with Name :StartShedule, SwingWorker Status is STARTED
Thread Status with Name :StartShedule, SwingWorker Status is DONE
Thread Status with Name :StartShedule, SwingWorker Status is STARTED
Thread Status with Name :StartShedule, SwingWorker Status is DONE
BUILD SUCCESSFUL (total time: 11 seconds)
Run Code Online (Sandbox Code Playgroud)

通过取消注释

//changeTableValues1(); // un-comment for get ArrayIndexOutOfBoundsException
Run Code Online (Sandbox Code Playgroud)

一切都正确,我得到ArrayIndexOutOfBoundsException并输出

run:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: …
Run Code Online (Sandbox Code Playgroud)

java swing exception-handling vector swingworker

20
推荐指数
2
解决办法
8356
查看次数

SwingWorker:什么时候被称为完成方法?

Javadoc的done()方法SwingWorker:

在doInBackground方法完成后在Event Dispatch Thread上执行.

我已经找到了在取消工人的情况下不是这样的线索.
Done在每种情况下都会被调用(正常终止或取消),但是当cancelled没有排入 EDT时,就像正常终止时那样.

doneSwingWorker取消a的情况下调用时是否有一些更精确的分析?

澄清:这个问题不是关于如何做到cancelSwingWorker.这里假设SwingWorker以正确的方式取消.
而且当它们应该完成时,它不是关于线程仍在工作.

java swing swingworker cancellation

19
推荐指数
2
解决办法
2万
查看次数

在process()调用完成之前执行SwingWorker,done()

我已经和SwingWorker一起工作了一段时间并且最终出现了一种奇怪的行为,至少对我而言.我清楚地了解到,由于性能原因,一次调用中对publish()方法的几次调用是有用的.这对我来说非常有意义,我怀疑SwingWorker会保留某种队列来处理所有调用.

根据教程和API,当SwingWorker结束执行时,doInBackground()正常完成或工作线程从外部取消,然后调用done()方法.到现在为止还挺好.

但是我有一个示例(类似于教程中所示),其中在执行process()方法之后 done()执行了方法调用.由于两个方法都在Event Dispatch Thread中执行,因此我希望done()在所有process()调用完成后执行.换一种说法:

预期:

Writing...
Writing...
Stopped!
Run Code Online (Sandbox Code Playgroud)

结果:

Writing...
Stopped!
Writing...
Run Code Online (Sandbox Code Playgroud)

示例代码

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;

public class Demo {

    private SwingWorker<Void, String> worker;
    private JTextArea textArea;
    private Action startAction, stopAction;

    private void …
Run Code Online (Sandbox Code Playgroud)

java swing swingworker

19
推荐指数
1
解决办法
3668
查看次数

如何使SwingWorker代码可测试

考虑以下代码:

public void actionPerformed(ActionEvent e) {
    setEnabled(false);
    new SwingWorker<File, Void>() {

        private String location = url.getText();

        @Override
        protected File doInBackground() throws Exception {
            File file = new File("out.txt");
            Writer writer = null;
            try {
                writer = new FileWriter(file);
                creator.write(location, writer);
            } finally {
                if (writer != null) {
                    writer.close();
                }
            }
            return file;
        }

        @Override
        protected void done() {
            setEnabled(true);
            try {
                File file = get();
                JOptionPane.showMessageDialog(FileInputFrame.this,
                    "File has been retrieved and saved to:\n"
                    + file.getAbsolutePath());
                Desktop.getDesktop().open(file);
            } catch (InterruptedException …
Run Code Online (Sandbox Code Playgroud)

java tdd swing unit-testing swingworker

16
推荐指数
2
解决办法
1901
查看次数

如何让我的SwingWorker示例正常工作?

我已经制作了自己的SwingWorker示例,以熟悉它的工作原理.

我想要做的是以下内容:当单击按钮时,我想要一个进度条出现,直到任务完成我想简单地删除进度条并在对话框中添加一个字符串.

单击该按钮时,进度条会出现,但永远不会消失.(10秒后永远不会删除进度条,永远不会放置标签)

这是一个SSCCE:

package swingtesting;

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;

public class SwingTesting {

    /**
     * Creates a frame that will hold a simple button to make use of SwingWorker
     */
     public static void main(String[] args) {
         // TODO code application logic here
         JFrame frame = new JFrame();
         JButton button = new JButton();

         button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new GuiWorker().execute();
            }
         });
         button.setText("Test Me");
         frame.getContentPane().add(button); …
Run Code Online (Sandbox Code Playgroud)

java swing jdialog swingworker

16
推荐指数
2
解决办法
1万
查看次数

15
推荐指数
4
解决办法
8148
查看次数