Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用SwingWorker避免冻结GUI_Java_Multithreading_Swing_Freeze_Swingworker - Fatal编程技术网

Java 如何使用SwingWorker避免冻结GUI

Java 如何使用SwingWorker避免冻结GUI,java,multithreading,swing,freeze,swingworker,Java,Multithreading,Swing,Freeze,Swingworker,我正在做一个程序,在一个特定的文件夹中创建一些Excel文件(.xlsx),我的GUI有一个问题,因为当我调用创建这个文件的方法时,它是冻结的 我希望在GUI中有一个不确定的进度条,除了有一个异常和一个JLabel来显示excel文件正在创建之外,它不会停止 MailPanel类:当我点击一个名为“Generate”的按钮调用generateExcel()类的方法“generateExcel”时,它就是一个接口 GenerateExcel类:其中它是生成文件的重要方法 我知道我必须将Swing

我正在做一个程序,在一个特定的文件夹中创建一些Excel文件(.xlsx),我的GUI有一个问题,因为当我调用创建这个文件的方法时,它是冻结的

我希望在GUI中有一个不确定的进度条,除了有一个异常和一个JLabel来显示excel文件正在创建之外,它不会停止

MailPanel类:当我点击一个名为“Generate”的按钮调用generateExcel()类的方法“generateExcel”时,它就是一个接口


GenerateExcel类:其中它是生成文件的重要方法

我知道我必须将SwingWorker添加到GenerateExcel类以解冻GUI,但我无法得到它

该方法创建文档,因此doInBackground工作,但面板中的进度条继续冻结

public class GenerateExcel extends SwingWorker<Integer, Void> {

    String jsonFileProject, jsonFileIssues, key, ruta, excelFile;

    public GenerateExcel(String jsonFileProject, String jsonFileIssues,
            String key, String ruta, String excelFile) {
        super();
        this.jsonFileProject = jsonFileProject;
        this.jsonFileIssues = jsonFileIssues;
        this.key = key;
        this.ruta = ruta;
        this.excelFile = excelFile;
    }

    public static void generateExcel(String jsonFileProject, String jsonFileIssues, String key, String ruta, String excelFile) {
        .....
        .....
        .....
    }

    @Override
    protected Integer doInBackground() throws Exception {
        // TODO Auto-generated method stub
        generateExcelExterno(jsonFileProject, jsonFileIssues, key, ruta, excelFile);
        return 100; //for example
    }
}
公共类GenerateExcel扩展SwingWorker{
字符串jsonFileProject、jsonFileIssues、key、ruta、excelFile;
public GenerateExcel(字符串jsonFileProject、字符串JSonfileIsues、,
字符串键、字符串ruta、字符串EXCEL文件){
超级();
this.jsonFileProject=jsonFileProject;
this.jsonFileIssues=jsonFileIssues;
this.key=key;
this.ruta=ruta;
this.excelFile=excelFile;
}
publicstaticvoidgenerateexcel(stringjsonfileproject、stringjsonfileissues、stringkey、stringruta、stringexcelfile){
.....
.....
.....
}
@凌驾
受保护的整数doInBackground()引发异常{
//TODO自动生成的方法存根
generateExcelExterno(jsonFileProject、jsonFileIssues、key、ruta、excelFile);
返回100;//例如
}
}

我认为我们详细回答问题的能力受到提供的有限信息的限制,但问题的要点是,您需要在控制类中设置SwingWorker—ActionListener,然后执行它。SwingWorker的
doInBackground()
方法的内部应该包含长时间运行的代码调用。不要在doInBackground内部进行任何Swing呼叫

一些有用的链接:

  • 当前位置我最喜欢这个

“……但我拿不到它!”
——那么你会想帮助我们帮助你。你会想创建一个很短的程序来模拟你的问题,然后发布一个。这个短程序编译并运行,没有访问Excel的代码,而是用
线程.sleep(…)
替换长时间运行的进程。让我们看看您创建和使用SwingWorker的最佳尝试,然后我们将更好地了解您可能会犯的错误。您还需要详细描述您的尝试如何不起作用。这似乎是一个好的开始…问题是什么
“该方法不创建文件,gui继续冻结…”
——那么您就不会在SwingWorker的
doInBackground()
方法中调用长时间运行的代码。听着,我们可以从这里一直瞎猜到永远,但如果你真的想要一个像样的答案,你的明智之举将是创建并发布某种类型的。你的选择。代码更难,这是一个总结。我只是意识到这些文件是在后台创建的,但是我不想停止的进度条被冻结了。。。
public class GenerateExcel extends SwingWorker<Integer, Void> {

    String jsonFileProject, jsonFileIssues, key, ruta, excelFile;

    public GenerateExcel(String jsonFileProject, String jsonFileIssues,
            String key, String ruta, String excelFile) {
        super();
        this.jsonFileProject = jsonFileProject;
        this.jsonFileIssues = jsonFileIssues;
        this.key = key;
        this.ruta = ruta;
        this.excelFile = excelFile;
    }

    public static void generateExcel(String jsonFileProject, String jsonFileIssues, String key, String ruta, String excelFile) {
        .....
        .....
        .....
    }

    @Override
    protected Integer doInBackground() throws Exception {
        // TODO Auto-generated method stub
        generateExcelExterno(jsonFileProject, jsonFileIssues, key, ruta, excelFile);
        return 100; //for example
    }
}