2016-05-03 15 views
1

Ich bin dabei, JavaFx zu lernen, und ich stieß auf ein Problem. Ich habe versucht, FileChooser von JavaFx zu verwenden, wie ich gewohnt war, mit JFileChooser von Swing-in der main() -Methode zu arbeiten. Allerdings habe ich herausgefunden, dass ich ein Window-Objekt brauche. Ich habe versucht, nach einem Workaround zu suchen, aber ich habe keinen gefunden. Ich habe auch versucht, null (wie Sie in JFileChooser) und neue Stage(), so dass diese aus dem Tisch sind. Ich habe versucht, den JFileChooser.showOpenDialog() nachzuahmen. Gibt es einen vernünftigen Weg, um es zum Laufen zu bringen?JavaFx FileChooser ohne Bühne

Antwort

3

Die Methode main wird nicht auf dem FX-Anwendungs-Thread ausgeführt, daher kann kein FileChooser angezeigt werden. (Sie können das auch nicht wirklich in Swing, außer Sie verwenden SwingUtilities.invokeLater(...).)

In JavaFX, ist die Verantwortung für den Start der Anwendung in der start() Methode, die auf der FX Application Thread ausgeführt wird. (In vielen Laufzeitumgebungen, Sie brauchen nicht einmal eine main Methode in JavaFX-Anwendungen.)

zeigen einfach die Datei Chooser von Anfang Methode, wo Sie Zugriff auf die primaryStage (oder kann null nur passieren, wenn Sie wie):

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

Was ich in Swing tun kann, ist JFileChooser jfc = neue JFileChooser(); \t \t if (jfc.showOpenDialog (null) == JFileChooser.APPROVE_OPTION) { \t \t \t mapFile = jfc.getSelectedFile(); \t \t} überall im Code (einschließlich main()) –

+1

Nur weil Sie es tun können, und es passiert zufällig auf Ihrer speziellen Plattform, macht es nicht richtig. Dieser Code in Swing ist falsch: Er zeigt einen 'JFileChooser' aus einem Thread an, der nicht der Ereignisversand-Thread ist. Es kann nicht garantiert werden, dass es auf anderen Plattformen oder in zukünftigen Versionen funktioniert. Dies ist ein sehr häufiger Fehler, weshalb JavaFX das Threading (in vielen Fällen) überprüft und Ausnahmen auslöst, wenn sie falsch sind. –

+0

[Format Anleitung] (http://StackOverflow.com/Help/formatting) –