1

У меня есть JFrame с индикатором выполнения и моим кодом, который должен запускать его в фоновом режиме, показывая ход выполнения.MultiThreading в java, я хочу, чтобы и UI, и код выполнялись параллельно

Я реализовал runnable в своем классе Progressbar и начал поток. Но рамка индикатора выполнения не отображается полностью .. и она застревает, и она отображается полностью после того, как мой код полностью выполнен. После завершения основного потока.

Я знаю, что это некоторая основная ошибка.

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

+0

общественного класса ProgressScriptUI расширяет JFrame реализует Runnable { \t \t @Override \t общественности недействительным запуска() { \t \t // TODO Auto-сгенерированный метод STUB \t \t SETTITLE ("прогрессирующих для генерации DDL скриптов"); \t \t setBounds (400, 250, 850, 400); \t \t getContentPane(). SetLayout (null); \t \t JProgressBar progressBar = новый JProgressBar (0,100); \t \t progressBar.setBounds (200, 100, 500, 20); \t \t добавить (progressBar); \t \t setVisible (true); \t \t \t \t setVisible (true); \t \t setDefaultCloseOperation (EXIT_ON_CLOSE); \t} \t \t } –

+0

Вы можете отредактировать свое сообщение и вставить код там – sanbhat

ответ

5

Я считаю, что вы используете Swing для интерфейса. Используйте SwingWorkers для выполнения любой задачи.

6

Весь код пользовательского интерфейса должен быть выполнен в контексте раздела «Диспетчер событий». Это делает немного сложной работу в фоновом режиме, сохраняя пользовательский интерфейс в актуальном состоянии.

Взгляните на Concurrency in Swing за предложениями и рекомендациями по решениям.

Вероятно, проще было бы использовать SwingWorker, который имеет функциональность publish/process данных, так что он синхронизируется обратно в EDT, а также о ходе обратных вызовов

Вы посмотрите на

В некоторых примерах ....