我当前项目的一部分是读取一个.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/
1条答案
按热度按时间q7solyqu1#
简要说明
事实证明,为了获得一个filechooser弹出窗口,您仍然需要primarystage.show();和primarystage.close();阻止它停止。然后我做了一个黑客的方式使初级阶段不短暂弹出设置为0的透明度。
工作示例
所以我最终在扩展应用程序的类中所做的是:
在调用应用程序的类中: