【发布时间】:2023-09-09 01:43:01
【问题描述】:
我正在使用 Java ProcessBuilder 在 Windows 上打开带有特定程序的文件。
它本身工作正常,使用以下代码:
ProcessBuilder p = new ProcessBuilder();
p.command("C:\\Program Files (x86)\\...\\program.exe", file.getAbsolutePath());
我想做的是从该程序中调用文件上下文菜单条目的功能,如下所示:
"C:\Program Files (x86)\...\program.exe" /Enqueue "%1"
如何将这些参数传递给流程构建器?
我已经尝试了以下方法,但都没有奏效:
p.command("C:\\Program Files (x86)\\...\\program.exe","/Enqueue","%1",next.getAbsolutePath());
p.command("C:\\Program Files (x86)\\...\\program.exe","Enqueue","%1",next.getAbsolutePath());
p.command("C:\\Program Files (x86)\\...\\program.exe","Enqueue","\"%1\"",next.getAbsolutePath());
p.command("C:\\Program Files (x86)\\...\\program.exe","/Enqueue","\"%1\"",next.getAbsolutePath());
在这种情况下,“不工作”意味着程序已启动,但没有任何反应(文件甚至没有打开)。
如果我按以下顺序切换它们:(程序、文件、参数),则文件会正确打开,但其他参数什么也不做,就好像它们根本不存在一样。
将这些参数转换为 ProcessBuilder 命令的正确方法是什么?
【问题讨论】:
-
您需要用
String替换值%1来代替您想要传递的任何内容。您还需要将String分解为一个数组,以便每个命令/参数都是一个单独的元素 -
好的,所以程序是一个带有队列的媒体播放器,所以我假设 %1 应该是文件名。我现在尝试了这个版本: p.command("C:\\Program Files (x86)\\...\\program.exe", "Enqueue", next.getAbsolutePath());但它仍然只打开文件,没有别的......
标签: java command parameter-passing contextmenu processbuilder