2014-02-23 77 views
1

我有一個奇怪的行爲,當我單擊開始按鈕時,我想要一個名爲status的JTextField來更改其文本以顯示用戶該文件正在處理中。但是,應用程序只是開始處理.txt文件,並且在文件處理期間從未更新狀態。JTextField在從txt文件讀取時沒有正確更新

代碼:

private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {            
    statusTextField.setText("Processing files."); 
    int startLine = Integer.parseInt(startLineTextField.getText()); 

    try { 
     if (selectedFile != null) {   
      if (selectedFile.getName().contains(".txt")) {     
       mainController.start(new FileInputStream(selectedFile), startLine); 

       statusTextField.setText("Finished !"); 
       mainController.displayFoundAccounts(); 
      } else if (selectedFile.getName().contains(".zip")) { 
       ZipFile zipFile = new ZipFile(selectedFile); 
       Enumeration<? extends ZipEntry> entries = zipFile.entries(); 

       while (entries.hasMoreElements()) { 
        ZipEntry entry = entries.nextElement(); 
        InputStream inputStream = zipFile.getInputStream(entry);      
        mainController.start(inputStream, startLine);      
       } 

       statusTextField.setText("Finished !"); 
       mainController.displayFoundAccounts(); 
      } 
     } else { 
      System.out.println("No file selected."); 
     } 
    } catch (Exception ex) { 
     System.out.println("Error: " + ex); 
     Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); 
     statusTextField.setText("Stopped."); 
    } 
} 

我不知道我在哪裏錯誤的,因爲statusTextField.setText("Processing files.");被稱爲第一線。

回答

2

您應該在不同的線程上處理這些文件,而不是在EDT上。可能這就是更新不可見的原因。例如:

private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {            
    statusTextField.setText("Processing files."); 
    int startLine = Integer.parseInt(startLineTextField.getText()); 
    new Thread() { 
     public void run() { 
     try { 
      if (selectedFile != null) { 
      ...  
      SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       statusTextField.setText("Finished !"); 
      } 
      }); 
     } catch (Exception ex) { 
      ... 
     } 
    }.start(); 
    } 
+0

謝謝。我創建了一個工作線程,它工作。 – Mythul