2012-05-21 2 views
0

Я использую swingworker для выполнения длительной задачи. Между этой задачей я хочу отображать текст в TextArea.The проблема в том, что я хочу отображать текст в текстовом поле, созданное мной, используя NetBeans GUI Builder, но не отображается anything.Here мой код ГлавнаяJava SwingWorker: ничего не отображается в textarea

 public class SaveTraffic extends SwingWorker<Void, String> { 



    @Override 
    public Void doInBackground() throws IOException { 


     while (f.num() !=2) { 

      { 

       publish(captor.getPacket().toString()); 
       writer.writePacket(captor.getPacket()); 

      } 
     } 

     return null; 
     }//end main function 


     @Override 
     public void process(List<String> chunks) { 
     for (String text : chunks) { 

     f.showPackets(text); 
     } 
    } 
     @Override 
     public void done() { 
     System.out.println("I am DONE"); 

    } 

Это мой код в GUI, который ничего не отображает в текстовое поле, хотя он печатает пакеты непрерывно в функции showPacket

 public void showPackets(String Packet) 
    { 

     jTextArea1.append(Packet); 
    } 


     private void jButton3MouseClicked(java.awt.event.MouseEvent evt) { 
     SaveTraffic p = new SaveTraffic(); 

     p.execute(); 

     } 

ответ

1

У меня не так много проблем с кодом, bu так как он не является полным, я не могу точно определить проблему. Вы убедились, что ваш SwingWorker фактически запущен, позвонив по номеру execute()? Что вы видите в своих журналах?

Найдите ниже рабочий пример. Попытайтесь выявить различия с вашим кодом. Если вы не можете найти ошибку, попробуйте отправить SSCCE, который позволит нам помочь вам.

import java.util.List; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 
import javax.swing.SwingWorker; 

public class Test { 

    private JFrame frame; 
    private JTextArea textArea; 

    protected void initUI() { 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     textArea = new JTextArea(); 
     frame.add(new JScrollPane(textArea)); 
     frame.setSize(400, 200); 
     frame.setVisible(true); 
     new SaveTraffic().execute(); 
    } 

    protected void showPackets(String text) { 
     textArea.append(text); 
     textArea.append("\n"); 
    } 

    class SaveTraffic extends SwingWorker<Void, String> { 

     @Override 
     public Void doInBackground() { 
      for (int i = 0; i < 100; i++) { 
       publish("Packet-" + i); 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 

      return null; 
     } 

     @Override 
     public void process(List<String> chunks) { 
      for (String text : chunks) { 
       showPackets(text); 
      } 
     } 

     @Override 
     public void done() { 
      System.out.println("I am DONE"); 

     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new Test().initUI(); 
      } 
     }); 
    } 

} 
+0

Я редактировал мой код, я бы позвонить выполнить, но до сих пор он ничего – Xara

+0

не показывать @Zara Вы пробовали помещать некоторые журналы в вашем While-цикле? Что ты видишь? Если это не поможет, напишите полный компилируемый код. Код, который вы показываете нам, не содержит особых проблем. –

+0

Мой цикл while содержит то, что я показал в коде, он в основном получает сетевые пакеты один за другим, которые я хочу отображать в textarea. Во-вторых, что вы подразумеваете под журналами? – Xara