2016-02-07 13 views
0

我正試圖在更新我的GUI時實現SwingWorker線程。我明白process()方法是由EDT執行的,所以如果我需要更新GUI,我應該在該方法中放置更新代碼。Swing Worker Thread說沒有超類中的Process()方法

但是,當我嘗試重寫process()方法時,出現錯誤,Method未實現超類型的方法。

請問我是否丟失了某些東西或Process()方法不再存在?

class SwingWorkerThread extends SwingWorker<String, String> { 

    @Override 
    protected String doInBackground() throws Exception { 
     String Pub = "A"; 

     for (int i = 0; i < 20; i++) { 
      Pub = String.valueOf(i); 

      publish(Pub); 
     } 

     return Pub; 
    } 

    @Override 
    protected String process(String h) { 
     System.out.println(Pub); 
     MainFrame.TextArea.setText(Pub); 
     return null; 
    } 

    @Override 
    protected void done() { 
     String status; 
     status = get(); 
     try { 

      System.out.println("Done"); 

     } catch (Exception ex) { 
      System.out.println("Error: " + ex); 
     } 
    } 

} 
+0

除非這是一個內部類....這不會編譯。你甚至使用了一個合適的IDE,或者你只是在某些命令控制檯上插入某些東西? – specializt

回答

3

SwingWorker上沒有String process(String)方法。有一個void process(List<V>),這可能是你想要的。

(這仍然不會修復一個事實,即Pub是一個局部變量,並在該方法中不可見)

2

SwingWorker's processmethod有不同的參數和不同的返回類型:

protected void process(List<V> chunks) 

只有方法具有相同簽名的子類(即名稱加上其參數的數量和類型)和返回類型可以重寫超類方法。 https://docs.oracle.com/javase/tutorial/java/IandI/override.html

+0

我已經能夠解決它。 –

+0

但是,當doInBackgound仍在工作時,我的GUI掛鉤。我認爲從process()方法更新我的GUI會解決這個問題,但不是。請,我該如何解決這個問題 –