Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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 执行后台任务时不确定JProgressBar_Java_Multithreading_Swing_Swingworker_Jprogressbar - Fatal编程技术网

Java 执行后台任务时不确定JProgressBar

Java 执行后台任务时不确定JProgressBar,java,multithreading,swing,swingworker,jprogressbar,Java,Multithreading,Swing,Swingworker,Jprogressbar,我想在前台显示一个JProgressBar,在后台运行一个任务,但我的程序不会简单地启动进度条 import java.awt.EventQueue; import java.util.concurrent.TimeUnit; import javax.swing.JFrame; import javax.swing.JProgressBar; public class sw { private JFrame frame; /** * Launch the application.

我想在前台显示一个
JProgressBar
,在后台运行一个任务,但我的程序不会简单地启动进度条

import java.awt.EventQueue;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;
import javax.swing.JProgressBar;


public class sw {

private JFrame frame;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                sw window = new sw();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 * @throws InterruptedException 
 */
public sw() throws InterruptedException {
    initialize();
}

/**
 * Initialize the contents of the frame.
 * @throws InterruptedException 
 */
private void initialize() throws InterruptedException {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JProgressBar progressBar = new JProgressBar();
    progressBar.setIndeterminate(true);
    progressBar.setBounds(96, 91, 146, 14);
    frame.getContentPane().add(progressBar);
    progressBar.setVisible(true);
    for(int i=0;i<5;i++)
    {
        System.out.println(i);
        TimeUnit.SECONDS.sleep(1);
    }
    progressBar.setVisible(false);
   }
   }
导入java.awt.EventQueue;
导入java.util.concurrent.TimeUnit;
导入javax.swing.JFrame;
导入javax.swing.JProgressBar;
公共类软件{
私有JFrame;
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
软件窗口=新软件();
window.frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
/**
*创建应用程序。
*@抛出中断异常
*/
public sw()抛出InterruptedException{
初始化();
}
/**
*初始化框架的内容。
*@抛出中断异常
*/
private void initialize()引发InterruptedException{
frame=新的JFrame();
机架立根(100450300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JProgressBar progressBar=新的JProgressBar();
progressBar.SetUndeterminate(真);
进步杆.立根(96,91,146,14);
frame.getContentPane().add(progressBar);
progressBar.setVisible(true);

对于(int i=0;我不阻止EDT(事件调度线程)。发生这种情况时,GUI将“冻结”。有关详细信息和修复方法,请参阅。顺便说一句-有趣的是,您添加了用于解决此问题的最常用方法的标记(a
SwingWorker
),但是代码中没有提到它。为什么不呢?为了更快地获得更好的帮助,请发布一个or。我知道实现它的几种方法,但是它们很长,我无法理解这些示例,因为它们通常执行一些特定的任务。如果有帮助的话,我将包含整个代码。我想Swing Worker对我来说相当复杂。好吧..让我来看看重温“如何去做(?)"-第一步,尝试实现您认为应该有效的方式。尝试为您长期运行的代码实现一个
SwingWorker
。当您遇到*特定问题时,请与我们联系。这既不是一个辅导网站,也不是一个代码生成服务。投票以“太广泛”结束。作为Andrew提到的一些事情的一部分,请不要阻止EDT(事件调度线程)。发生这种情况时,GUI将“冻结”。有关详细信息和修复方法,请参阅。顺便说一句-很有趣,您添加了用于解决此问题的最常用方法的标记(a
SwingWorker
),但是代码中没有提到它。为什么不呢?为了更快地获得更好的帮助,请发布一个or。我知道实现它的几种方法,但是它们很长,我无法理解这些示例,因为它们通常执行一些特定的任务。如果有帮助的话,我将包含整个代码。我想Swing Worker对我来说相当复杂。好吧..让我来看看重温“如何去做(?)“-第一步,尝试实现你认为应该有效的方式。尝试为你长期运行的代码实现一个
SwingWorker
。当你遇到一个*特定问题时,请与我们联系。这既不是一个辅导网站,也不是一个代码生成服务。投票以“过于宽泛”的方式结束。正如Andrew提到的一些事情