我有一个java GUI,其按钮点击事件打开了本地tomcat服务器上的特定jsp页面。为了打开那个特定的网页我们使用firefox,而且我们也没有直接运行firefox,我们在java中执行一个脚本,然后执行firefox并加载页面。我知道这看起来很奇怪但不是我的设计决定这些是我需要遵循的命令。此代码已经由其他人编写,只是在特定服务器上遇到了一个问题。
For Simplicity我已经复制了按钮点击功能代码,并从中创建了一个新的java程序,如下所示:
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ProcessExample {
public static void main(String[] args) {
String[] envp = {"DISPLAY=:0.0"};
Process p1 = null;
try {
p1 = Runtime.getRuntime().exec("/home/msatyam/test.sh", envp);
}
catch(IOException e)
{
e.printStackTrace();
}
BufferedReader input = new BufferedReader(new InputStreamReader(p1.getInputStream()));
try {
System.out.println(input.readLine());
} catch (IOException ex) {
Logger.getLogger(ProcessExample.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
运行firefox浏览器“test.sh”的脚本如下:
#!/bin/bash
firefox "localhost"
所以,带有上述shell脚本的上述java代码适用于大多数系统,但是 在我们的一个测试服务器上测试上面的代码时,它失败并在stdout上给出以下错误:
* STDERR [ld.so.1:firefox-bin:致命:libssl3.so:版本'NSS_3.12.6'未找到 (文件/usr/lib/firefox/libxul.so所需)
ld.so.1:firefox-bin:致命:libssl3.so:打开失败:没有这样的文件或目录
ld.so.1:firefox-bin:致命:重定位错误:文件/usr/lib/firefox/libxul.so:符号 SSL_NumImplementedCiphers:未找到引用的符号Killed *
当我们看到上述错误时,我们认为firefox在这台服务器上存在一些问题,但我们错了,因为当我们从终端运行相同的脚本时,它就像魅力一样。
Test Server正在Solaris 10上运行。
我还仔细检查了目录中存在的此服务器中的 libssl3.so : 的 / usr / lib中/火狐
可能有什么问题,因为这个shell脚本在通过终端运行时工作正常但在通过上面的java代码运行时不起作用。
答案 0 :(得分:1)
问题很可能是你在执行firefox之前删除所有系统环境变量,并用单个变量DISPLAY
替换它们。
您可以运行env -i DISPLAY=:0.0 /home/msatyam/test.sh
从命令行模拟您在Java中所做的事情。
如果这会重现问题,您应该获取所有系统的环境变量(使用System.getenv()
)并将DISPLAY=:0.0
附加到该列表,然后运行您的脚本。