首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileChooser中的NPE

FileChooser中的NPE
EN

Stack Overflow用户
提问于 2013-05-30 03:20:15
回答 1查看 803关注 0票数 4

我正在尝试在windows7下运行一些javafx应用程序,它在archlinux下运行得很好。

我将通过以下方式打开文件选择器对话框:

代码语言:javascript
复制
  @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:

代码语言:javascript
复制
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)

你知道我该怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-30 03:37:29

这是一个问题:

RT-21999 Win: FileChooser does not accept valid initial directory

问题影响版本: 2.2;修复版本: Lombard,因此可以在JFX8 (JDK8版本)中进行修复。

要解决此问题,请调用初始文件夹的<fileName>.getCanonicalPath()

开发者的评论:

这个问题是Windows7特有的。它不能在旧版本的Windows上重现。

解决方法是将绝对路径作为文件选择器的初始目录传递(请参见File.getAbsolutePath()/getCanonicalPath())。

来自用户的评论:

Jason Winnebeck添加了一条评论- Mar,18 2013 04:30 PM我也遇到过这种情况,并将完全相同的COM错误打印到stderr,结果是NullPointerException。实际上,我一开始尝试了getAbsolutePath,但这并不适用于所有路径,对于某些路径,您必须使用getCanonicalPath,谢天谢地,我找到了这个解决方法。所以,我没有太多额外的信息可以提供,除了这里有一些再现它的groovy代码:

代码语言:javascript
复制
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 )
}

无论其他设置如何(扩展筛选器、使用哪个窗口或null),都会出现错误。使用new File( "." ).canonicalFile解决了这个问题,因此根据另一个报告,路径中有...似乎是可能的原因。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16822166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档