【发布时间】:2020-08-07 11:44:45
【问题描述】:
努力尝试使用 Runtime.exec() 在 Linux 上启动任何程序; 在 Windows 上运行良好。
java.io.IOException: Cannot run program "/usr/bin/xed": error=2, No such file or directory
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at java.base/java.lang.Runtime.exec(Runtime.java:592)
at java.base/java.lang.Runtime.exec(Runtime.java:416)
at java.base/java.lang.Runtime.exec(Runtime.java:313)
at guiExample/com.windyweather.MyCalc.launchProgram(MyCalc.java:276)
我已经在玫瑰色周围呆了几天了。找到这个:
https://www.javaworld.com/article/2071275/when-runtime-exec---won-t.html
并在那里合并了最后的、最好的解决方案。 我已经将该命令包装在一个脚本中,认为问题来自我试图启动的 soffice,但事实并非如此。它甚至不会启动 /usr/bin/xed。起初我只是尝试了 xed,但这是一个链接,所以认为 shell 可能已经解决了这个问题。所以我试图找到通往固定程序本身的艰难道路。没有运气。
代码在这里:https://github.com/windyweather/GuiExample
包括完整的堆栈跟踪
https://github.com/windyweather/GuiExample/blob/master/Linux_Runtime_exec_Failure.txt
为什么这么难?我做错了什么明显愚蠢的事情? 当输入到 shell 中的相同内容正常工作时,/usr/bin/xed 怎么可能不存在。顺便说一句,这是我问 shell 时得到的结果:
darrell@LM19RyzenVM:~$ ls -l /usr/bin/xed
-rwxr-xr-x 1 root root 10232 Dec 11 06:49 /usr/bin/xed
darrell@LM19RyzenVM:~$ /usr/bin/xed
darrell@LM19RyzenVM:~$
谢谢。 对不起。忘了这个。
LM19RyzenVM:~$ java --version
openjdk 11.0.7 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-2ubuntu218.04)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-2ubuntu218.04, mixed mode, sharing)
LM19RyzenVM:~$ cat /etc/issue
Linux Mint 19.3 Tricia \n \l
【问题讨论】:
-
"file not found" 错误可能是由解释器或找不到动态链接库引起的。您的 shell 环境与 Java 使用的环境之间存在一些差异。尝试在您的 shell 中运行
file /usr/bin/xed,并在 Java 和您的 shell 中运行ldd /usr/bin/xed,这应该提供足够的信息来查看正在发生的事情 另请参阅 unix.stackexchange.com/questions/378301/…