我需要在Linux中从PHP脚本调用Swing Java应用程序。 Java应用程序使用swing但它的主框架是不可见的,所以在设置了DISPLAY后。变量我能够从tty2运行它(从没有x11的终端)。问题是我不能从PHP脚本做同样的事情。我使用以下代码段:
$sys = system("export DISPLAY=:0.0", $output);
$sys = system("java -jar scheduler.jar -i7.txt -q2 -a6 -s -e ", $output);
我在/var/log/apache2/error.log中获得以下内容:
Exception in thread "main" java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
at java.awt.Window.<init>(Window.java:432)
at java.awt.Frame.<init>(Frame.java:403)
at java.awt.Frame.<init>(Frame.java:368)
at javax.swing.JFrame.<init>(JFrame.java:158)
at net.sukharevd.cssw.scheduler.view.AppFrame.<init>(AppFrame.java:51)
at net.sukharevd.cssw.scheduler.Main.main(Main.java:11)
此外,我尝试在java
之后添加-Djava.awt.headless = true参数,但没有成功:
Exception in thread "main" java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
at java.awt.Window.<init>(Window.java:432)
at java.awt.Frame.<init>(Frame.java:403)
at java.awt.Frame.<init>(Frame.java:368)
at javax.swing.JFrame.<init>(JFrame.java:158)
at net.sukharevd.cssw.scheduler.view.AppFrame.<init>(AppFrame.java:51)
at net.sukharevd.cssw.scheduler.Main.main(Main.java:11)
帮助我以正确的方式从PHP执行Java应用程序。
答案 0 :(得分:3)
嗯,事实是你正在获得HeadlessException意味着你在无头环境中启动应用程序(例如,没有显示支持)。
所以添加“-Djava.awt.headless = true”也会做同样的事情。
它甚至在文档中解释过: http://docs.oracle.com/javase/6/docs/api/java/awt/HeadlessException.html
公共类HeadlessException扩展UnsupportedOperationException
当依赖于键盘,显示器或鼠标的代码时抛出 在不支持键盘,显示器或支持的环境中调用 鼠标。
所以基本上你必须从应用程序代码中删除任何依赖于显示的代码(例如JFrames创建和其他类似的东西)。之后,您将能够正常执行它而无需获取HeadlessException。
答案 1 :(得分:0)
不要在tomcat上安装它,只需在.jar文件夹中执行JavaBridge.jar, 并做:
include("localhost:8080/Java.inc");
java_require(".");
$class = java("yourpackage.Class");
我用那个
成功开启了jasper报告