.bashrc.profile中,我将QHOME变量设置为包含k4.licl64q.k的目录(已通过echo $QHOME验证)。

当我从登录外壳启动q时,一切正常,找到了许可证文件。

当我从Java以编程方式启动q进程时,我得到以下输出

[13:43:48][Step 1/2]  WARN [main] (QSession.java:78) - Q Session not alive
[13:43:48][Step 1/2]  INFO [main] (QSession.java:97) - QHOME: null
[13:43:48][Step 1/2]  INFO [main] (QSession.java:98) - QLIC: null
[13:43:48][Step 1/2] ERROR [main] (QSession.java:101) - Error output
[13:43:48][Step 1/2] '2018.02.06T13:43:46.597 k4.lic

即未找到许可证,因为QHOME env变量未定义。 here描述了此问题:“.bashrc仅源自登录shell”。建议的解决方案是

“如果要在所有Bourne shell派生变量中设置一个变量,而不管它们是否是交互式的,请将其同时放在.profile和.bashrc中。”

但是我已经将.bashrc的内容复制到.profile中,仍然遇到相同的错误。

不幸的是,没有办法将路径作为q二进制文件的命令行参数传递给许可证,因此我必须使用QHOME

我可以做的是在Java项目中放入32位版本,但是使用64位版本显然是有利的。

建议多谢!

谢谢

最佳答案

感谢@Jonathan McMurray!
确切的解决方案是使用

Runtime.getRuntime().exec(command, envp);

其中command是例如q -p 5000,而envp是例如
String[] envp = {"QHOME="+qHomePath};

10-07 13:52