Java SwingWorker:textarea中没有显示任何内容

时间:2012-05-21 06:04:13

标签: java jtextarea swingworker

我正在使用swingworker来执行长时间运行的任务。在该任务之间,我想在TextArea中显示文本。问题是我想在使用netbeans GUI构建器创建的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函数中连续打印数据包但在textarea中不显示任何内容

     public void showPackets(String Packet)
     {

       jTextArea1.append(Packet);
     }


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

      p.execute();

      }

1 个答案:

答案 0 :(得分:1)

我的代码没有太多问题,但由于它没有完整,我无法准确定位问题。您是否通过致电execute()确保实际启动了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();
            }
        });
    }

}