2015-01-12 2 views
1

я выбираю около восьми сотен файлов изображений, каждый имеет размер 5 Мб, используя следующий код:fileChooser.showOpenMultipleDialog() tooo медленно и зависать при выборе большого количества файлов

List<File> flist=fileChooser.showOpenMultipleDialog(label.getScene().getWindow()); 

Когда я нажимаю открыт, filechooser и замораживание главного окна (и не отвечают)

Что мне делать, чтобы улучшить эту проблему? (Я не хочу использовать Swing)

Редактировать

Мой код для добавления списка имен файлов изображений в Tableview. Не для загрузки изображения. после запуска этого кода я выхожу из терминала: Всего добавленных файлов: 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

Вы, вероятно, следует искать альтернативный способ для открытия такого большого количества файлов? – Tanay

+2

Что на самом деле занимает время? Я могу использовать «FileChooser» для извлечения списка из 10 000 файлов без его подвешивания пользовательского интерфейса. Вы пытаетесь загрузить каждый файл в «Изображение»? Вероятно, вам нужно разместить немного больше кода и показать, где пользовательский интерфейс фактически висит. –

ответ

0

Я предполагаю, что вы работаете над проектом обработки изображения, где вы на самом деле не нужно просматривать все входные изображения. Я хотел бы предложить следующий подход, если все файлы находятся в одной папке:

public void filesInFolder(File folder) { 
    for (File file : folder.listFiles()) { 
     if (fileEntry.isFile()) { 
      // Open File Here 
     } 
    } 
} 
+0

Мне нужно выбрать несколько файлов из папки, а не всех файлов. – nidhin84

+0

Условие if в цикле может быть изменено для выбора определенных файлов, которые вы хотите открыть. – Tanay

0

fileChooser.showOpenMultipleDialog() не виснет и не слишком медленно, когда я использую его.

Вот пример приложения, которое я использовал. Выбор нескольких тысяч файлов и отображение их имен в ListView заняло менее секунды. Условия тестирования: JavaFX 8u20, Windows 7, 6-летний компьютер.

filelist

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); } 
} 
+0

Этот код также подходит для меня. Я использую Java8 на Ubuntu 12.04. – nidhin84

+0

после долгого ожидания, все наладилось. это ошибка javafx filechooser в linux. – nidhin84

+0

Поскольку ваша проблема связана с конкретными средами, вам может потребоваться зарегистрировать проблему в треестере по проблеме JavaFX: https://javafx-jira.kenai.com/, чтобы разработчики JavaFX могли ее исследовать, когда вы регистрируете проблему, может вернуться к этому ответу StackOverflow. – jewelsea