1

我有一个JFrame带有进度条的代码,我的代码应该在后台运行它,显示进度条的进度。

我在我的 Progressbar 类中实现了 runnable 并启动了线程。但是进度条框架没有显示完整..它卡住并且在我的代码完全执行后显示完整,即在主线程关闭之后。

我知道这是一些基本错误。

public class ProgressScriptUI extends JFrame implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        setTitle("Progressing to Generate DDL Scripts");
        setBounds(400, 250, 850, 400);
        getContentPane().setLayout(null);
        JProgressBar progressBar= new JProgressBar(0,100);
        progressBar.setBounds(200, 100, 500, 20);
        add(progressBar);
        setVisible(true);

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

}

//I am calling the below code in some other class
ProgressScriptUI progress = new ProgressScriptUI();


Thread uiThread = new Thread(progress);                                             
uiThread.start();
oracleValidateOLDorNEW.execute(); //Code that I need to call in back ground
4

2 回答 2

6

所有 UI 代码都必须在 Event Dispatching Thread 的上下文中执行。这使得在保持 UI 最新的同时在后台工作变得有点棘手。

查看Concurrency in Swing以获取有关解决方案的建议和建议。

可能最简单的方法是使用具有/数据SwingWorker功能的 a,以便将其同步回 EDT 以及进度回调publishprocess

你可以看看

作为一些例子......

于 2013-04-29T07:02:34.510 回答
5

我相信您正在使用 Swing 进行 UI。将SwingWorkers用于任何长时间运行的任务。

于 2013-04-29T06:57:31.917 回答