2016-05-03 5 views
1

Я участвую в процессе обучения JavaFx, и у меня возникла проблема. Я пытался использовать FileChooser из JavaFx, как я привык работать с JFileChooser из Swing-in в методе main(). Однако я узнал, что мне нужен объект Window. Я попытался найти обходной путь, но я не нашел его. Я также попробовал null (как вы это делали в JFileChooser) и новый Stage(), поэтому они не работают. Я пытался имитировать JFileChooser.showOpenDialog(). Есть ли разумный способ заставить его работать?JavaFx FileChooser без этапа

ответ

3

Метод main не применяется к потоку приложения FX, поэтому вы не можете показать FileChooser. (Вы не можете этого сделать и в Swing, если вы не используете SwingUtilities.invokeLater(...).)

В JavaFX ответственность за запуск приложения лежит в методе start(), который выполняется в потоке приложения FX. (Во многих средах выполнения, вам даже не нужен метод main в приложениях JavaFX.)

Просто показать выбор файлов из метода запуска, где у вас есть доступ к primaryStage (или может просто передать null, если вы как):

public class MyApp extends Application { 

    public void start(Stage primaryStage) { 
     FileChooser configFileChooser = new FileChooser(); 
     File configFile = configFileChooser.showOpenDialog(primaryStage); 

     // ... parse file and create UI, etc... 

     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

Что я могу сделать в Swing - JFileChooser jfc = new JFileChooser(); \t \t, если (jfc.showOpenDialog (нуль) == JFileChooser.APPROVE_OPTION) { \t \t \t = jfc.getSelectedFile файле проекта(); \t \t} в любом месте кода (включая main()) –

+1

Просто потому, что вы можете это сделать, и это происходит на вашей конкретной платформе, не делает ее правильной. Этот код в Swing неверен: он показывает «JFileChooser» из потока, который не является потоком отправки событий. Нет гарантии, что он будет работать на других платформах или в будущих выпусках. Это очень распространенная ошибка, поэтому в JavaFX возникает проблема проверки потока (во многих случаях) и исключения исключений, если оно неверно. –

+0

[Руководство по форматированию] (http://stackoverflow.com/help/formatting) –