JavaFXFileChooser在窗口“关闭”后停止所有其他代码

wfveoks0  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(387)

我当前项目的一部分是读取一个.txt日志文件,如果该日志文件在其正常路径中不存在,我想打开一个javafx filechooser,让用户指向该文件。但在它的当前状态下,它会弹出“文件选择器”窗口,在我指向.txt文件的位置后,它会使整个程序处于空闲状态。
在扩展应用程序的类中:

public class GetDirectory extends Application {

    @Override
    public void start(final Stage primaryStage) {
        FileChooser fileChooser = new FileChooser();
        FileChooser.ExtensionFilter extFilter = new   FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
        fileChooser.getExtensionFilters().add(extFilter);
        File file = fileChooser.showOpenDialog(primaryStage);
        main.gamedata.LogReader logReader = new LogReader();
        logReader.setPathTemp(file.getAbsolutePath());
        primaryStage.close();
    }
}

在我需要文件路径的另一个类中的方法中:

private List<String> getHearthstoneLogContent(String pathToFile) {
        try {
            File file = new File(pathToFile);
            if (file.exists() && !file.isDirectory()) {
                return Files.readAllLines(Paths.get(pathToFile));
            } else {
                // The out_log.txt file does not exist, we should let the user choose the path.
                Application.launch(GetDirectory.class);
                System.out.println("sup");
                return Files.readAllLines(Paths.get(pathTemp));
                }
            } catch (Exception e) {
                e.printStackTrace();
        }
        return null;
    }

但是“sup”永远不会打印到控制台上。
我试过的
我想可能是因为应用程序没有关闭,所以我尝试使用:

primaryStage.close();
    PlatformImpl.tkExit();
    Platform.exit();

但是我们不能使用它,因为它产生了一个illegalstateexception:toolkit已经退出。
我不想做的事
我不想把我所有的代码都封装在javafx中,因为我只需要它来完成这么小的任务。
如果您想更仔细地了解相关项目:http://github.com/nymann/decksniffer/

q7solyqu

q7solyqu1#

简要说明
事实证明,为了获得一个filechooser弹出窗口,您仍然需要primarystage.show();和primarystage.close();阻止它停止。然后我做了一个黑客的方式使初级阶段不短暂弹出设置为0的透明度。
工作示例
所以我最终在扩展应用程序的类中所做的是:

public class test1 extends Application{
    public static String fileAsString;

    @Override
    public void start(Stage primaryStage) throws Exception {
        FileChooser fileChooser = new FileChooser();
        File file = fileChooser.showOpenDialog(primaryStage);
        fileAsString = file.getAbsolutePath();

        primaryStage.setOpacity(0);
        primaryStage.show();
        primaryStage.close();
    }
}

在调用应用程序的类中:

public class test2 {

    public test2() {
        testFromMethod();
    }

    public static void main(String[] args) {
        new test2();
    }

    private void testFromMethod() {
        System.out.println("Hello from testFromMethod()!");
        Application.launch(test1.class);
        System.out.println("Goodbye from testFromMethod()!");
        System.out.println(test1.fileAsString);
    }
}

相关问题