2016-09-21 5 views
3

Java 9では、com.apple.eio.FileManagerを直接使用できません。MacでJava 9でデスクトップパスを取得する方法

public static File getDesktopFolder() throws FileNotFoundException { 
    final int desktopOSType = FileManager.OSTypeToInt("desk"); 
    final String desktopFolderName = FileManager.findFolder(desktopOSType); 
    return new File(desktopFolderName); 
} 

を次のように今まで私はデスクトップを見つけることcom.apple.eio.FileManagerを使用するためのJava 9での交換があり、ユーザーの「デスクトップ」のパスの場所を取得するために、Mac上でこれを使用しました?私の一時的な解決策は、the similar Windows-oriented question hereへの回答を使用することです:

public static File getDesktopFolder() { 
    return new File(System.getProperty("user.home"), "Desktop"); 
} 

しかしこれは脆いようで、潜在的に特定のロケールまたは特定の奇妙な構成のシステムでバグだらけ。

答えて

1

Platform-Specific Desktop FeaturesがJDK9で削除されました。あなたはJDK 9 にそれらに対して、コンパイルすることができませんのでcom.apple.eawtcom.apple.eioパッケージで

APIは、 をカプセル化しているが、彼らは、実行時にアクセス可能なままなので、 にコンパイルされた既存のコード古いバージョンは引き続き実行されます。

最終的に、appleおよびcom.appleパッケージ内の内部クラスとそのサブパッケージを使用するライブラリまたはアプリケーションは、新しいAPIに移行する必要があります。

私は同じAPI内editopenbrowseなどのスタブを見ることができ、まだそれらのすべてが指定された法的に必要なもののJEP:272に提案されているように代わりにコードを移行するための新しいAPIは、java.awt.Desktop. ですパス名を指定し、いずれもドキュメントに従って作成しません。

また、ユーザーのデスクトップにファイルを作成する目的で、既存のアプローチが脆弱でバグの原因になるのはどうしてもわかりません。

return new File(System.getProperty("user.home"), "Desktop"); 

別の方法あなたが

Error:(3, 17) java: package com.apple.eio is not visible (package 
com.apple.eio is declared in module java.desktop, which does not 
export it) 

のようなエラーを取得し終わるかもしれないとすると、Java 9で既存のコードを利用するために/一時的なハックをしています編集中に--add-exports as proposed in Module Systemを使用する

--add-exports java.desktop/com.apple.eio=ALL-UNNAMED 
関連する問題