2016-02-07 14 views
0

Я пытаюсь реализовать SwingWorker Thread при обновлении моего графического интерфейса. Я понимаю, что метод process() выполняется EDT, поэтому, если мне нужно обновить GUI, я должен поместить код обновления в этот метод.Swing Worker Thread Говорит, что нет метода Process() в суперклассе

Однако, когда я пытаюсь переопределить метод process(), я получаю ошибку, метод не реализует метод из супертипа.

Прошу ли я пропустить что-либо или метод 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

Там нет String process(String) метод на SwingWorker. Существует 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

Однако мой GUI-крючки, пока doInBackgound все еще работает. Я думал, что обновление моего графического интерфейса от метода process() позволит это, но его нет. Пожалуйста, как мне это сделать? –