在java中使用MultiThreading,我希望UI和代码并行执行

pra*_*han 1 java swing multithreading jprogressbar event-dispatch-thread

我有一个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
Run Code Online (Sandbox Code Playgroud)

Mad*_*mer 6

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

查看Swing中的Concurrency以获取解决方案的建议和建议.

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

你可以看看

作为一些例子....


Cro*_*zin 5

我相信你正在使用Swing for UI.使用SwingWorkers执行任何长时间运行的任务.