jtextarea.settext()メソッドはバッファリングされていますか?

StackOverflow https://stackoverflow.com/questions/4046491

  •  27-09-2019
  •  | 
  •  

質問

私はJava開発者ではありませんが、FTP経由でファイルをアップロードするために小さなアプレットを書く必要があります(実際、私はWeb開発者です)。フィードバックメッセージが表示される方法を除いて、すべてが正常に機能します。例で説明させてください:

私がそのようにいつかのように書いた場合、メソッド内(クリックイベントによって制御されます)

//....
myJpanel.setText("Connecting to remote server");

//actually, it's surrounded by try-catch statement
myFtpObject.connect(); //this is taken from a third part package 
myJpanel.setText("Connected")

このコードを実行しようとすると、接続が設定されます(その接続の後、問題なくファイルをアップロードします)が、jpanel内 myjpanel 私は「接続」を読みました(接続に数秒かかります)が、「リモートサーバーへの接続」文字列が表示されません。

JPanel Settextメソッドが何らかの形でバッファリングされているように聞こえます。
リアルタイムでメッセージを表示するにはどうすればよいですか?

(私はSystem.out.printlnをテストのためにやろうとしましたが、うまくいきました!)
ありがとう

役に立ちましたか?

解決

私がメソッド内でそのようにいつかのように書いた場合(クリックイベントによって制御されます)

イベントで実行されたコードリスナーはEDTで実行されます。問題は、長期にわたるタスクがスイングEDTをブロックしていることです。したがって、GUIはそれ自体を塗り直す機会を得ることはありません。

スイングチュートリアルのセクションを読んでください 並行性 詳細および解決策。基本的な解決策は、長期にわたるタスクのために別のスレッドを作成することです。

これが、System.out.println(..)が機能する理由でもあります。これは、異なるスレッドで実行されるためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top