0

問題は、netbeans GUI ビルダーを使用して作成したテキストエリアにテキストを表示したいのですが、何も表示されません。これがメインの私のコードです

     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();

      }
4

1 に答える 1

1

あなたのコードには大きな問題はありませんが、完全ではないため、問題を正確に特定できません。を呼び出して 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();
            }
        });
    }

}
于 2012-05-21T06:30:13.267 に答える