2014-11-27 2 views
0

В моем приложении, когда нажата кнопка резервного копирования, для создания резервной копии базы данных требуется некоторое время, поэтому мне нужно отобразить jframe, содержащую сообщение «Please Wait ..», и хотите, чтобы он удалялся, когда процесс резервного копирования завершен. Ниже приведен мой код, но он никогда не показывает jframe, но приложение застревает до тех пор, пока процесс не завершится.Показывать JFrame while waitFor еще один процесс для завершения

try { 

      WaitView wait = new WaitView(); 
      wait.setLocationRelativeTo(null); 
      wait.setVisible(true); 

      Process p = Runtime.getRuntime().exec("cmd /c mysqlbackup.bat", null, new File("C:\\MySQLBackups"));    
      p.waitFor(); 

      wait.dispose(); 

      MessageService.showMessageDialog(MessageService.BACKUP_SUCCESSFUL, "Successful", "info"); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

ответ

0

Wrap код в SwingUtilities.invokeLater()

 Process p = Runtime.getRuntime().exec("cmd /c mysqlbackup.bat", null, new File("C:\\MySQLBackups"));    
     p.waitFor(); 

     wait.dispose(); 

     MessageService.showMessageDialog(MessageService.BACKUP_SUCCESSFUL, "Successful", "info"); 

Но на самом деле это лучше запускать succh Ong задачи в отдельном потоке. Проверьте примеры SwingWorker.

+0

, пожалуйста, можете ли вы предложить мне модифицированный код для этого –

0

ОК, как указано в СтаниславЕ, я изменил код, как показано ниже, и он работал!

 final WaitView wait = new WaitView(); 
     wait.setLocationRelativeTo(null); 
     wait.setVisible(true); 

     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       try { 
        Process p = Runtime.getRuntime().exec("cmd /c mysqlbackup.bat", null, new File("C:\\MySQLBackups")); 
        p.waitFor(); 

        wait.dispose(); 

        MessageService.showMessageDialog(MessageService.BACKUP_SUCCESSFUL, "Successful", "info"); 
       } catch (InterruptedException ex) { 
        Logger.getLogger(HomeView.class.getName()).log(Level.SEVERE, null, ex); 
       } catch (IOException ex) { 
        Logger.getLogger(HomeView.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }); 
Смежные вопросы