2013-05-29 46 views
4

我想在Windows 7下運行一些javafx應用程序。它在archlinux下正常工作。NPE在FileChooser

我願意在以下方式將文件選擇對話框:

@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 [email protected] 
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

我對JavaFX一無所知,但不應該使用'JFileChooser'而不是'FileChooser'? –

+0

@tieTYT它是一個swing組件,在javafx應用程序中使用swing組件並不那麼簡單 –

+0

使用哪個JFX構建? –

回答

4

這是問題:

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

問題影響的版本:2.2;修復版本:s:Lombard,所以修復在JFX8中可用(在JDK8中)。

要解決該問題,請爲初始文件夾調用<fileName>.getCanonicalPath()。從開發商


評論:

這個問題是Windows 7中特有的。它在舊版本的Windows上無法重現。

解決方法是將絕對路徑作爲文件選擇器的初始目錄(請參閱File.getAbsolutePath()/ getCanonicalPath())。

而且從用戶評論:

賈森Winnebeck添加評論 - 三月,18 2013下午4點30 我遇到這個問題,以及與標準錯誤完全相同的COM的錯誤,在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) 
} 

不管其他設置(擴展名過濾器,使用或空的窗口出現的錯誤)。使用new File(".").canonicalFile解決了該問題,因此根據其他報告,路徑中有...似乎是可能的原因。

+0

非常感謝。正是我需要的! –