2012-04-15 35 views
1

我需要在Linux中从PHP脚本调用Swing Java应用程序。 Java应用程序使用swing,但其主框架是不可见的,所以在设置DISPLAY env后。变量我能够从tty2运行它(从没有x11的终端)。问题是我无法从PHP脚本执行相同的操作。我用下面的代码片段:从PHP脚本调用Swing Java应用程序

$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) 

我也尝试添加-Djava.awt.headless = true参数java后,但没有成功:

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) 

帮助我,使Java应用程序从PHP在适当的方式执行,请。

最好的问候,德米特里。

+2

*“帮我做开放Java碧玉报告应用程序以正确的方式从PHP执行“*无论”正确的方式“是什么,我认为它将以'**不要**启动富客户端桌面应用程序开始。来自PHP ..'。 – 2012-04-15 14:32:29

+0

谢谢。这说得通。 – 2012-04-16 13:30:56

+0

不是真的,我成功从网站打印碧玉报告。只是不要在tomcat上安装它 – 2013-12-20 10:01:47

回答

3

那么,事实是,你正在得到HeadlessException意味着你正在无头环境中启动应用程序(例如无w/o显示支持)。

因此,添加“-Djava.awt.headless = true”将完全相同。

其即使在文档解释: http://docs.oracle.com/javase/6/docs/api/java/awt/HeadlessException.html

公共类HeadlessException的延伸UnsupportedOperationException异常

抛出的异常代码时,被依赖于键盘,显示器,或鼠标被称为在 环境不支持键盘,显示器或 鼠标。

所以基本上必须删除依赖显示器(如JFrames创作和其他类似的东西)从应用程序代码上的任何代码。之后,你将能够正常执行它,而不会得到HeadlessException。

+1

请不要参考过时的api版本(即使没有太多改变:-) – kleopatra 2012-04-16 08:50:17

+1

更改为第6版,但它仍然没有关系 - 该异常自1.4以来没有改变。对于这种特定情况,只有例外情况的描述很重要。 – 2012-04-16 09:01:45

+1

感谢您帮助@Andrew Thompson保持快乐:-) – kleopatra 2012-04-16 09:25:52

0

不要在Tomcat上安装它,只需执行你的JavaBridge.jar在你的.jar文件夹, 做:

include("localhost:8080/Java.inc"); 
java_require("."); 
$class = java("yourpackage.Class"); 

我succeded与