2016-05-03 12 views
1

私はlearnig JavaFxの処理中ですが、問題が発生しました。 main()メソッドのSwing-inからJFileChooserを操作するのに慣れていた方法と同様に、JavaFxのFileChooserを使用しようとしていました。しかし、私はWindowオブジェクトが必要であることを知りました。私は回避策を探してみましたが、何も見つかりませんでした。私はまた、(あなたがJFileChooserで行うように)nullと、新しいStage()を試したので、それらはテーブルから外れています。私はJFileChooser.showOpenDialog()を模倣しようとしていました。それを動作させる合理的な方法はありますか?JavaFx FileChooser without stage

答えて

3

FXアプリケーションスレッドではmainメソッドは実行されないため、FileChooserを表示することはできません。 (SwingUtilities.invokeLater(...)を使用している場合を除き、Swingでも実際に行うことはできません)

JavaFXでは、FXアプリケーションスレッドで実行されるstart()メソッドでアプリケーションを起動する必要があります。 (多くのランタイム環境では、あなたもJavaFXアプリケーションでmain方法を必要としません。)

ちょうどあなたがprimaryStageへのアクセス権を持っている(または場合だけ、nullを渡すことができstartメソッドから、ファイルチューザを表示like):

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 IF(jfc.showOpenDialog(NULL)== JFileChooser.APPROVE_OPTION){ \t \t \t MAPFILE = jfc.getSelectedFile()。 \t \t}コード内の任意の場所(main()を含む) –

+1

あなたはそれを行うことができ、あなたの特定のプラットフォーム上で実行されます。 Swingのそのコードは間違っています:イベントディスパッチスレッドではないスレッドから 'JFileChooser'が表示されます。他のプラットフォームや将来のリリースで動作する保証はありません。これは非常に一般的なエラーです。そのため、JavaFXはスレッド化(多くの場合)をチェックし、間違っている場合は例外をスローするという手間がかかります。 –

+0

[フォーマットガイド] –

関連する問題