在.bashrc
和.profile
中,我将QHOME
变量设置为包含k4.lic
,l64
和q.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};