1

我有一个JFrame与进度条和我的代码应该在后台运行它显示进度条中的进度。java中的多线程,我想同时执行UI和代码

我在我的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 
+1

向我们展示一些代码。 – Manish 2013-04-29 06:56:51

+0

公共类ProgressScriptUI延伸的JFrame实现Runnable { \t \t @Override \t公共无效的run(){ \t \t // TODO自动生成方法存根 \t \t的setTitle( “进展为生成DDL脚本”); \t \t setBounds(400,250,850,400); \t \t getContentPane()。setLayout(null); \t \t JProgressBar progressBar = new JProgressBar(0,100); \t \t progressBar.setBounds(200,100,500,20); \t \t add(progressBar); \t \t setVisible(true); \t \t \t \t setVisible(true); \t \t setDefaultCloseOperation(EXIT_ON_CLOSE); \t} \t \t } – 2013-04-29 06:59:57

+0

您可以编辑您的文章并粘贴代码 – sanbhat 2013-04-29 07:00:37

回答

5

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

6

所有UI代码必须在事件分派线程的上下文中执行。这使得在保持UI更新的同时在后台执行工作有点棘手。

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

也许最简单的办法是使用一个SwingWorker使其同步回至美国东部时间以及进度回调

你可以看看

由于一些例子....