我正在尝试在Windows 7下运行一些javafx应用程序。它在archlinux下工作正常。
我按以下方式打开文件选择器对话框:
@Override
public void start(final Stage primaryStage) {
FileChooser fileChooser = new FileChooser();
fileChooser.setInitialDirectory(myInitialDir);
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Wav files (*.wav)", "*.wav");
fileChooser.getExtensionFilters().add(extFilter);
File file = fileChooser.showOpenDialog(primaryStage);
}
我上面提到的 - 在linux下一切都很好,但是在windows下我得到了奇怪的NPE:
Error:80070057 in SHCreateItemFromParsingName((PCWSTR)folder, NULL, IID_IShellItem, (void **)&pItem)
COM Error:80070057 0@0.
Error:80004005 in pOpenDialog->GetResults(&pFiles)
COM Error:80004005 5>?>7=0==0O >H81:0
java.lang.NullPointerException
at com.sun.glass.ui.CommonDialogs.showFileChooser(CommonDialogs.java:120)
at com.sun.javafx.tk.quantum.QuantumToolkit.showFileChooser(QuantumToolkit.java:1486)
at javafx.stage.FileChooser.showDialog(FileChooser.java:285)
at javafx.stage.FileChooser.showOpenDialog(FileChooser.java:234)
at ru.gkalabin.diploma.gui.equalizer.EqualizerDemo$1.handle(EqualizerDemo.java:107)
任何想法我该如何解决这个问题?
答案 0 :(得分:4)
这是问题:
RT-21999 Win: FileChooser does not accept valid initial directory
问题影响版本:2.2;修复版本/:Lombard,因此修复在JFX8中可用(在JDK8中)。
要解决此问题,请致电<fileName>.getCanonicalPath()
获取初始文件夹。
开发人员的评论:
此问题是特定于Windows 7的。它在旧版Windows上无法重现。
解决方法是将绝对路径作为文件选择器的初始目录传递(请参阅File.getAbsolutePath()/ getCanonicalPath())。
来自用户的评论:
Jason Winnebeck发表评论 - 2013年3月18日04:30 PM 我也遇到过这种情况,将完全相同的COM错误打印到stderr,导致NullPointerException。我实际上一开始尝试了getAbsolutePath,但这对所有路径都不起作用,对于一些你必须使用getCanonicalPath,谢天谢地我发现这张票给了我解决方法。所以,我没有太多额外的信息要提供,除了这里有一些重现它的groovy代码:
public void openFile() throws IOException {
FileChooser chooser = new FileChooser()
chooser.title = "Select FXML"
chooser.setInitialDirectory( new File( "." ) );
chooser.extensionFilters.add( new FileChooser.ExtensionFilter(
"FXML or SVG Files",
["*.fxml", "*.svg"]
))
Window window = sceneProperty.get().window
File selected = chooser.showOpenDialog( window )
}
无论其他设置如何(扩展过滤器,使用哪个Window或为null),都会发生错误。使用new File( "." ).canonicalFile
修复了问题,因此根据其他报告,似乎路径中有.
和..
可能是原因。