我需要从 Linux 中的 PHP 脚本调用 Swing Java 应用程序。 Java 应用程序使用 swing 但其主要框架是不可见的,因此在设置 DISPLAY env 后。变量 我能够从 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 应用程序。
最佳答案
好吧,事实是您获得 HeadlessException 意味着您正在 headless 环境中启动应用程序(例如,没有显示支持)。
因此添加“-Djava.awt.headless=true”将起到同样的作用。
它甚至在文档中有解释: http://docs.oracle.com/javase/6/docs/api/java/awt/HeadlessException.html
public class HeadlessException extends UnsupportedOperationException
Thrown when code that is dependent on a keyboard, display, or mouse is called in an environment that does not support a keyboard, display, or mouse.
所以基本上您必须从应用程序代码中删除任何依赖于显示的代码(例如 JFrames 创建和其他类似的东西)。之后您将能够正常执行它而不会出现 HeadlessException。
关于java - 从 PHP 脚本调用 Swing Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10162780/