私は、ユーザーがアプリケーション内のリンクをクリックするのが非常に簡単なアプリケーションを作成しています。これにより、Finder(Macの場合)/Windowsエクスプローラーで特定のフォルダーが開きます。これは、リンクまたはボタンのクリックイベントで発生する可能性があります。
Swingを介してこれらのネイティブOSアプリケーション(特定のフォルダー用)を開く方法はありますか?
簡潔な答え:
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().open(new File("C:\\"));
}
長い答え: それがどの OS であるかを読み取ってから OS 固有のコマンドを実行することは機能しますが、何を行う必要があるかをある程度ハードコーディングする必要があります。
各 OS がディレクトリを開く方法を Java に処理させます。私たちの頭痛の種であってはなりません。<3 抽象化。
#open(File)メソッドのドキュメントを読むと、操作をサポートするすべての OS でリンクが開かれることがわかります。UnsupportedOperationException
現在のプラットフォームがフォルダーまたはファイルを開くことをサポートしていない場合 (たとえば、ヘッドレス環境ですか? もちろん、開かない理由についての私の推測は推測です)、. ユーザーがフォルダーを読み取るためのアクセス権を持っていない場合 (Windows Vista/7/8、Unix ベースのマシン) SecurityException
、. だから私に言わせれば、かなりうまく処理されています。
更新:オブジェクトを取得する前に if チェックを追加して、 #getDesktop() Java ドキュメントDesktop
に記載されているように、コードが厄介な例外HeadlessException
やUnsupportedOperationException
例外から保護されるようにしました。
Runtime.getRuntime().exec("command here");
java が実行されているシステムでコマンドを実行するために使用します。
explorer.exe の場合、フォルダーの絶対パスを引数として渡すだけです。
Explorer.exe "C:\Program Files\Adobe"
open
Mac OS X では、次のコマンドを使用できます。
open /users/
使用している OS を検出する方法と、実行するコードをここで確認できます。たとえば、これは Windows を使用しているかどうかを確認します。
public static boolean isWindows() {
String os = System.getProperty("os.name").toLowerCase();
// windows
return (os.indexOf("win") >= 0);
}