javafx中的后台服务和服务监控

时间:2017-05-22 15:08:59

标签: java javafx

我正在开发一个用于将图像文件上传到aws s3存储桶的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 个答案:

答案 0 :(得分: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工作。