我选择了大约800个图像文件,每个图像文件的大小为5 MB,使用以下代码:
List<File> flist = fileChooser.showOpenMultipleDialog(label.getScene().getWindow());
当我点击打开时,filechooser
和主窗口冻结(并且不响应)。
我该怎么做才能改善这个问题? (我不想使用Swing。)
我的代码用于将图像文件名列表添加到tableView。不适用于加载图片。运行此代码后,我将在终端中获得输出:
Total Files added: 800.
但filechooser
和主窗口冻结(并且不响应)
public void addImage()
{
int i = 0;
List<File> list = fileChooser.showOpenMultipleDialog(label.getScene().getWindow());
if (list != null) {
for (File f : list) {
data.add( new ImgInfo(1 + data.size() + "", f));
i++;
}
System.out.println("Total Files added: " + i);
}
}
答案 0 :(得分:0)
我假设您正在进行一个图像处理项目,您实际上并不需要查看所有输入图像。如果所有文件都在一个文件夹中,我建议采用以下方法:
public void filesInFolder(File folder) {
for (File file : folder.listFiles()) {
if (fileEntry.isFile()) {
// Open File Here
}
}
}
答案 1 :(得分:0)
fileChooser.showOpenMultipleDialog()
不会挂起,使用时不会太慢。
这是我使用的示例应用程序。选择几千个文件并在ListView中显示其名称只需不到一秒钟。测试环境:JavaFX 8u20,Windows 7,6岁PC。
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.File;
import java.util.List;
public class SelectedFileInfoViewer extends Application {
@Override public void start(final Stage stage) throws Exception {
final ListView<File> chosenFilesView = new ListView<>();
final Button chooseFilesButton = new Button("Choose Files");
chooseFilesButton.setOnAction(event -> {
List<File> files = new FileChooser().showOpenMultipleDialog(stage);
if (files != null) {
chosenFilesView.getItems().setAll(files);
}
});
final Label numFilesChosen = new Label();
numFilesChosen.textProperty().bind(
Bindings.concat(
"Number of Files: ",
Bindings.size(
chosenFilesView.getItems()
).asString()
)
);
VBox layout = new VBox(
10,
chooseFilesButton,
chosenFilesView,
numFilesChosen
);
layout.setPadding(new Insets(10));
stage.setScene(new Scene(layout));
stage.show();
}
public static void main(String[] args) { launch(args); }
}