小编use*_*698的帖子

在后台和线程中加载JavaFX图像

我认为这将是一个简单的问题,但我找不到答案.我有一个与JavaFX Scene对象关联的ImageView对象,我想从磁盘加载大图像并使用ImageView依次显示它们.我一直在试图找到一种重复检查Image对象的好方法,当它在后台加载完成后,将它设置为ImageView,然后开始加载一个新的Image对象.我提出的代码(下面)有时会工作,有时则不会.我很确定我遇到了JavaFX和线程的问题.它有时加载第一张图像并停止.变量"processing"是类中的布尔实例变量.

在后台加载JavaFX中的图像并在加载后将其设置为ImageView的正确方法是什么?

public void start(Stage primaryStage) {

       ... 

       ImageView view = new ImageView();
       ((Group)scene.getRoot()).getChildren().add(view);

       ... 

        Thread th = new Thread(new Thread() {
            public void run() {

                while(true) {
                    if (!processing) {

                        processing = true;         
                        String filename = files[count].toURI().toString();
                        Image image = new Image(filename,true);

                        image.progressProperty().addListener(new ChangeListener<Number>() {
                            @Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number progress) {
                                if ((Double) progress == 1.0) {
                                    if (! image.isError()) {
                                        view.setImage(image);
                                    }
                                    count++;
                                    if (count == files.length) {
                                        count = 0; …
Run Code Online (Sandbox Code Playgroud)

multithreading background javafx image imageview

5
推荐指数
1
解决办法
3939
查看次数

标签 统计

background ×1

image ×1

imageview ×1

javafx ×1

multithreading ×1