2011-12-31 9 views
0

私のためにいくつかのファイルをWindows共有にアップロードする簡単なプログラムを作成しようとしています。私はすべての基本的な機能を持っていますが、私はいくつかの仕上げタッチで問題があります。私はGUIを持っているだけで、アップロードに関するいくつかの情報、つまり進行状況バーとラベルを表示したいだけです。setTextとsetValueが正しく動作しない

private void btn_UploadActionPerformed(java.awt.event.ActionEvent evt) { 

    upl.setFiles(files); 

    for(int i = 0; i < files.length; i++){ 
     progressLabel.setText("Uploading " + files[i].getName()); 
     upl.uploadFile(i); 
     uploadProgress.setValue(uploadProgress.getValue() + 90/files.length); 

    } 

    uploadProgress.setValue(100); 

} 

ユーザーがアップロード]ボタンを押したときに実行されます:ここでは、コードです。問題は、setTextとsetValueが実際には動作しないことです。アップロードボタンを押すと、アップロードが開始され、終了しますが、ラベルのテキストは変更されず、進行状況も表示されません。アップロードが完了すると変更されます。

全体のソースコードはここで見つけることができます:Code

任意の提案を? P.P. javaの新機能:

答えて

3

I second JB Nizet場合によっては、イベントディスパッチスレッドの代わりにバックグラウンドスレッドを使用すると、タスクの実行中にユーザーインターフェイスがフリーズすることがなくなります。 JavaのチュートリアルからのFYI

、スレッドの以下の種類の

スイングプログラマのお得な情報:

  • 初期スレッド、最初のアプリケーションのコードを実行するスレッド。

  • すべてのイベント処理コードを実行するイベントディスパッチスレッド、。 Swingフレームワークとやり取りするほとんどのコードもこのスレッドで実行する必要があります。また、時間のかかるバックグラウンドタスクが実行されるバックグラウンドスレッドとして知られている

  • ワーカースレッド、。
+0

ありがとう!私はまだスレッドで仕事をしなかった...しかし、私はそれが始まる時だと思う。 – Squeazer

+0

@Squeazerええ、これは正しい時間です:)幸せなコーディング、乾杯.. – COD3BOY

4

あなたはイベントディスパッチスレッドでアップロードを行っています。したがって、同じスレッドで実行されるペイントコードは、アップロードが完了するまで実行できません。イベント処理コードはできるだけ早く終了する必要があります。長いタスクを実行する場合は、別のバックグラウンドスレッドで実行する必要があります。

SwingWorkerを使用して必要な処理を行います。 Its javadocに分かりやすい例があります。

+0

助けてくれてありがとう! – Squeazer

関連する問題