2017-05-22 16 views
0

私はaws s3バケットに画像ファイルをアップロードするためのjavafxプロジェクトを開発中です。画像をアップロードする前に、画像の高さ、重さ、サイズなどの画像の有効性を確認します。アップロードプロセスは時間がかかるので、アップロードの進捗状況を監視(画面表示)するためのモニタを作成します。コードが正常に動作しているが、問題があるjavafxのバックグラウンドサービスとサービス監視

class Monitor extends Stage { 
private TextArea textArea = new TextArea(); 
    Monitor(){ 
     this.setTitle("Image Uploading Monitor"); 
     this.getIcons().add(new Image("/rok.png")); 
     this.setFullScreen(false); 
     this.setResizable(false); 
     this.textArea.setEditable(false); 
     this.textArea.setPrefSize(700, 450); 
     Pane pane = new Pane(); 
     pane.getChildren().add(this.textArea); 
     Scene scene = new Scene(pane, 700, 450); 
     this.setScene(scene); 
    } 

    void print(String string) { 
     this.textArea.appendText(string); 
     this.textArea.selectPositionCaret(textArea.getLength()); 
    } 
} 

そして、すべての画像アップロードした後、私はモニターにメッセージを印刷したい

for (File image : images) { 
    uploadFileToS3Bucket(image, "uploadingLocation"); 
    monitor.print("Uploading image"+image.getName()+"\n"); 
} 

、モニターは、すべての画像のアップロード後に出力を示しています。

私は穴のプロジェクトを1つのスレッドで実行しているので、どのように問題を解決するためにマルチスレッドを使用できますか?

答えて

1

バックグラウンドスレッドで画像をアップロードするためのコードを入れて、FXのアプリケーションスレッドにmonitor.print(..)への呼び出しをスケジュール:

new Thread(() -> { 
    for (File image : images) { 
     uploadFileToS3Bucket(image, "uploadingLocation"); 
     Platform.runLater(() -> monitor.print("Uploading image"+image.getName()+"\n")); 
    } 
}).start(); 

これはあなたのuploadFileToS3Bucket()メソッドはUIの作業を実行しない前提としています。

+0

ありがとうございました。それは私の問題を解決しました –

+0

@ Md.ShougatHossain質問に答えた場合、答えを正しいとマークしてください:それは、同様の質問を持つ他の人がそれをより簡単に見つけるのを助けるでしょう。 –

関連する問題