java - 从 PHP 脚本调用 Swing Java 应用程序

标签 java php linux swing apache2

我需要从 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/

相关文章:

java - XMLUnit 期望子节点数为真但为假

JavaFX 从另一个线程更新 UI

php - 如何使用 Laravel Eloquent 获取特定成绩数据?

linux - 如何将我的循环 Bash 脚本作为服务运行?

linux - 自动将 svn 存储库的内容导出到另一个目录?

linux - 如何从 linux 命令行将 rtsp 视频流录制到文件中?

java - JCache:基于声明性配置以编程方式构建复制缓存

java - 如何在一个 Maven 命令中调用两个不同的配置文件?

php - 如何在 Codeigniter 模型中打印存储过程查询?

php - 如何在 WooCommerce 3+ 中从数组中获取订单元数据