java - Linux 上的 Runtime.exe 失败
问题描述
努力尝试使用 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
解决方案
如果在 Linux 上启动 Jar 文件,程序会按预期运行。我称之为 Eclipse 错误。几年前我看到过关于 Eclipse 中关于 Runtime.exec() 的类似错误的提及。这是成功运行 jar 文件并成功启动 soffice 的终端输出。
darrell@LM19RyzenVM:~/CodeJava/zzJarFiles$ 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)
darrell@LM19RyzenVM:~/CodeJava/zzJarFiles$ java -jar GuiExample_2020_04_23.jar
launchProgram before soffice --impress --show /home/darrell/ImpressTests/ChainTests/ShowTestOne.odp
launchProgram after
ERROR>func=xmlSecCheckVersionExt:file=xmlsec.c:line=188:obj=unknown:subj=unknown:error=19:invalid version:mode=abi compatible;expected minor version=2;real minor version=2;expected subminor version=25;real subminor version=26
ExitValue: 0
darrell@LM19RyzenVM:~/CodeJava/zzJarFiles$
我能够成功启动: /usr/bin/xed 和 xed 和 soffice 选项和按预期播放的幻灯片文件。
我会查找并报告或评论 Eclipse 中的错误。xed 在我的测试系统上很好。该问题仅在使用 eclipse 启动程序时出现。
那好吧。这几天我再也回不来了。哈哈
推荐阅读
- java - 在 Spring 中使用 JPA 规范获取要执行的查询
- java - Spring boot Pageable按不在Domain对象中的参数排序
- javascript - 在 javascript 中合并对象,同时忽略未定义的属性值(jQuery.fn.extend 行为)
- postgresql - 更改 PgSQL 中的类型以重命名属性不起作用
- python-3.x - 将表格尺寸限制为 python-pptx 中的表格占位符尺寸
- javascript - 我正在使用 linkify 来解析字符串。现在有一个字符串 "10 is < 20" 。linkify 也创建了一个我不想要的链接。有什么修复吗?
- python - 试图更新数据库中的帖子。但是找不到页面(404)?想知道如何更新数据库中的数据?
- java - Tomcat 项目在 Wildfly 13 中给出 ServletException: java.lang.NoSuchMethodError: org.apache.jasper.runtime.JspRuntimeLibrary.releaseTag
- python - 在执行一些额外操作的同时将数据帧重新采样为新数据帧
- excel - 如果内容与另一列的内容匹配,则希望遍历 excel 中的列并突出显示填充每个单元格