0

私はここに来たばかりで、Java プログラミングも初めてですが、何日も気になるので、あなたに質問するためだけにサインアップしなければなりませんでした。とにかく、私はTCPクライアントを書いています。System.in から読み取ってソケットに送信するスレッドと、ソケットから読み取って System.out に書き込むスレッドの 2 つのスレッドを作成しました。それはうまくいきましたが、今は GUI を作成する必要があり、GUI をインタラクティブに保ちたい場合はタスクやサービスを使用する必要があることを知っていますが、スレッドをサービスとして作成する方法がわかりません。コードは次のとおりです(ターミナルで機能しました):

public static class ReadThread extends Thread
{
    BufferedReader in;
    String word;

    ReadThread(BufferedReader in)
    {
        this.in = in;
    }

    @Override
    public void run()
    {
        try {
            while((word = in.readLine()) != null)
                System.out.println(word);
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

これと同様に、私は WriteThread を作成しましたが、この投稿を乱雑にしたくないので...とにかく、これをサービスとして実装しようとしたときに、「in」を最終的に作成する必要があり、他のエラーが発生したため、などなど。私の特定のケースで私を助けていただければ幸いです。私はおそらくこのサイトで JavaFX GUI の問題をすべて読んでいるからです。:D

4

1 に答える 1

1

これが私がサービスを実装する方法です

public class ReadService extends Service {

    BufferedReader in;
    String word;

    @Override
    protected Task createTask() {
        return new Task() {
            @Override
            protected Object call() throws Exception {
                try {
                    while((word = in.readLine()) != null)
                        System.out.println(word);
                } catch (IOException ex) {
                    Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
                }
                return null;
            }
        };
    }

    public BufferedReader getIn() {
        return in;
    }

    public void setIn(BufferedReader in) {
        this.in = in;
    }
}

そして、あなたがあなたのサービスを呼び出さなければならない場所。

 ReadService readService = new ReadService();
         readService.setIn(//HEre your in);
          readService.restart();

サービスの開始、キャンセル、失敗、終了時にハンドラーを追加することもできます...

  readService.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
      @Override
      public void handle(WorkerStateEvent workerStateEvent) {
          // Here the finish action
      }
  });

そのこと

于 2013-06-22T11:15:35.927 に答える