2012-05-21 23 views
0

我使用SwingWorker的執行長,使得任務之間運行task.In,我想在TextArea.The問題顯示文本,我想顯示在使用我所創建的textarea的文本的NetBeans GUI構建器,但它並沒有顯示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代碼,它顯示沒有在textarea的,雖然它連續打印的數據包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實際上是通過調用​​開始的嗎?你在日誌中看到了什麼?

查找工作下面的例子。嘗試找出與您的代碼的差異。如果您無法找到該錯誤,請嘗試發佈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

我已經編輯我的代碼,我做的調用execute但仍沒有任何顯示 – Xara

+0

@Zara你有沒有試圖把一些日誌記錄在你的while循環?你看到了什麼?如果這沒有幫助,請發佈完整的可編譯代碼。您向我們展示的代碼不包含任何特定問題。 –

+0

我While循環只包含了我在代碼中所顯示的,它基本上得到網絡數據包一個接一個,我想在textarea.Secondly顯示,你是什麼意思的日誌? – Xara