Java 为什么我可以在命令提示符中设置路径,但不能在程序中设置路径?

Java 为什么我可以在命令提示符中设置路径,但不能在程序中设置路径?,java,path,Java,Path,我想使用此Windows命令在Java程序中设置一个路径(此路径包含一些在程序的本机外围设备中使用的DLL文件): 但这会在程序运行时导致异常: java.io.IOException:无法运行程序“path=%path%;C:\Users\NetBeansProjects\IPTV1.7\third\u party\”:CreateProcess error=2,系统找不到指定的文件 我不知道为什么我可以在命令提示符下毫无问题地设置路径,但却在代码中引发了一个异常 String path =

我想使用此Windows命令在Java程序中设置一个路径(此路径包含一些在程序的本机外围设备中使用的DLL文件):

但这会在程序运行时导致异常:

java.io.IOException:无法运行程序“path=%path%;C:\Users\NetBeansProjects\IPTV1.7\third\u party\”:CreateProcess error=2,系统找不到指定的文件

我不知道为什么我可以在命令提示符下毫无问题地设置路径,但却在代码中引发了一个异常

String path = "C:\\Users\\NetBeansProjects\\IPTV1.7\\3rd_party\\";
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("path=%path%;"+ path);

当您在命令提示符下键入此命令时,
cmd
程序将对其进行处理,并为您更改
路径
变量。当您使用
Runtime
尝试此操作时,不会创建
cmd
进程,并且硬盘上没有命令“
path=%path%;C:\Users\NetBeansProjects\IPTV1.7\3rd\u party\
”(Windows实际上尝试查找具有此确切名称的程序)

将命令放入
.BAT
.CMD
文件中。Windows会自动创建一个
cmd
进程来为您执行它们。

您可以在java中使用它来生成一个进程并控制它所处的环境。因此,您可以使用ProcessBuilder环境方法设置PATH环境变量,然后设置相关的命令行,然后启动。比如(未经试验):

你的命令

path=%path%;"C:\Users\NetBeansProjects\IPTV1.7\3rd_party"
不是一个“真正的”windows命令,而是一个变量赋值,由shell(cmd.exe)解释,仅在同一shell会话和从此处启动的任何命令(其他程序)中可见

当尝试使用Runtime.exec()从Java执行此操作时,windows CreateProcess函数尝试查找具有此奇怪名称的可执行文件,该文件显然不存在(我认为不可能存在),您会遇到此错误

即使您可以执行此操作,例如通过调用cmd.exe,它也只会影响同一个cmd.exe进程(以及从此处启动的任何程序,而不是您自己的Java进程(以及从此处启动的程序)

根据您的实际需要,您可以,例如:

  • 使用ProcessBuilder将路径直接提供给实际需要它的进程(如Aaron所示)
  • 如果您想在下一个
    exec
  • 将变量赋值和其他命令放在一个.BAT或.CMD文件中并执行

当你说本机外围设备时,你是什么意思?在某个时刻,你试图从java程序中启动另一个进程,你想做的是控制启动的进程的路径?感谢你的宝贵建议。我设置了一个bat文件。感谢你的宝贵建议。我设置了一个bat文件。
    ProcessBuilder b = new ProcessBuilder();
    b.environment().put("PATH", whatever);
    b.command(whatever);
    Process p = b.start();
path=%path%;"C:\Users\NetBeansProjects\IPTV1.7\3rd_party"