0

私は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を実行しようとしましたが、うまくいきました!)
ありがとう

4

1 に答える 1

1

メソッド内にそのようなものを書いた場合(クリックイベントによって制御されます)

イベントリスナーで実行されるコードは、EDTで実行されます。問題は、長時間実行されているタスクがSwingEDTをブロックしていることです。したがって、GUIが自分自身を再描画する機会はありません。

詳細と解決策については、同時実行に関するSwingチュートリアルのセクションをお読みください。基本的な解決策は、長時間実行されるタスク用に別のスレッドを作成することです。

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

于 2010-10-28T20:18:11.583 に答える