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

对于 1.6+ 代码,请Desktop.open(File)改用。


当然,在调用之前要做的明智的事情是检查File.exists()

OTOH,Desktop.open(File)抛出了一系列方便的异常,包括:

  • NullPointerException- 如果文件为空
  • IllegalArgumentException- 如果指定的文件不存在
  • UnsupportedOperationException- 如果当前平台不支持该Desktop.Action.OPEN动作
  • IOException- 如果指定文件没有关联应用程序或关联应用程序启动失败

如果处理得当,异常将指示直接问题。


顺便说一句,Desktop该类被设计为跨平台的,并且将处理定义了关联的任何文件类型。从这个意义上说,对于这样的事情,它比尝试使用Process.

于 2012-02-11T11:04:36.833 回答
2

我认为问题在于您忽略了您尝试打开的文件具有文件扩展名的事实。

默认情况下,Windows 资源管理器不显示文件扩展名——这可能是您不知道它们存在的原因。

记事本在您的第一个示例中起作用的原因是记事本会自动.txt为其文件名参数添加扩展名,以防您自己没有提供扩展名。所以实际上正在打开的文件不是status但是status.txt.

VLC 没有这种“高级”功能,因为它没有设计用于使用的特定文件扩展名。

因此,您需要查找dir命令输出并将完整文件名添加为参数。

如果这是真正的问题 - 您可能需要修改 Windows 资源管理器设置以显示文件扩展名:

在此处输入图像描述

或者,更好的是,切换到对程序员更友好的操作系统 :)

于 2012-02-11T11:30:07.030 回答