0

次のコードは、メモ帳でステータスを非常にうまく開きます。

import java.util.*;
class test
{
public static void main(String args[])
{
    try{
    ProcessBuilder pb=new ProcessBuilder("notepad","F:/status");
    pb.start();
    }catch(Exception e)
    {
        System.out.println(e);
    }
}
}

次のコードは曲を再生しません:

import java.util.*;
class test
{
public static void main(String args[])
{
    try{
    ProcessBuilder pb=new ProcessBuilder("C:/Program Files (x86)/VideoLAN/VLC/vlc","D:/02 Tu Jaane Na");
    pb.start();
    }catch(Exception e)
    {
        System.out.println(e);
    }
}
}
4

2 に答える 2

2

問題は、開こうとしているファイルのファイル名拡張子が。であるという事実を無視していることだと思います。

Windowsエクスプローラーは、デフォルトではファイル拡張子を表示しません。これが、おそらくファイル拡張子の存在に気付いていない理由です。

最初の例でメモ帳が機能した理由は、自分で.txtファイル名を指定しなかった場合に備えて、メモ帳がファイル名パラメーターに拡張子を自動的に追加するためです。したがって、実際には、開いているファイルはではありませstatusstatus.txt

VLCには、動作するように設計された特定のファイル名拡張子がないため、この「高度な」機能はありません。

dirしたがって、コマンド出力を検索し、完全なファイル名をパラメーターとして追加する必要があります。

それが本当の問題である場合は、ファイル拡張子を表示するようにWindowsエクスプローラーの設定を変更することをお勧めします。

ここに画像の説明を入力してください

または、より良いのは、よりプログラマーに優しいOSに切り替えることです:)

于 2012-02-11T11:30:07.030 に答える
2

1.6+ コードの場合は、Desktop.open(File)代わりに使用してください。


もちろん、それを呼び出す直前に行う賢明なことは、 を確認することFile.exists()です。

OTOH は、次Desktop.open(File)のような多数の便利な例外をスローします。

  • NullPointerException- ファイルが null の場合
  • IllegalArgumentException- 指定したファイルが存在しない場合
  • UnsupportedOperationExceptionDesktop.Action.OPEN- 現在のプラットフォームがアクションをサポートしていない場合
  • IOException- 指定されたファイルに関連付けられたアプリケーションがない場合、または関連付けられたアプリケーションの起動に失敗した場合

適切に処理された場合、例外は差し迫った問題を示します。


余談ですが、このDesktopクラスはクロスプラットフォームになるように設計されており、関連付けが定義されているすべてのファイル タイプを処理します。その意味では、Process.

于 2012-02-11T11:04:36.833 に答える