1

Linux で PHP スクリプトから Swing Java アプリケーションを呼び出す必要があります。Javaアプリケーションはswingを使用していますが、そのメインフレームは見えないため、DISPLAY envを設定した後. variable 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)

また、 -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 から実行するのを手伝ってください。

4

2 に答える 2

3

実際、HeadlessException を取得しているのは、ヘッドレス環境でアプリケーションを起動していることを意味します (たとえば、ディスプレイ サポートなし)。

したがって、「-Djava.awt.headless=true」を追加すると、まったく同じことが行われます。

ドキュメントでも説明されています: http://docs.oracle.com/javase/6/docs/api/java/awt/HeadlessException.html

public class HeadlessException extends UnsupportedOperationException

キーボード、ディスプレイ、またはマウスをサポートしていない環境で、キーボード、ディスプレイ、またはマウスに依存するコードが呼び出されるとスローされます。

したがって、基本的には、ディスプレイに依存するコード (JFrames の作成など) をアプリケーション コードから削除する必要があります。その後、HeadlessException を取得することなく、通常どおり実行できます。

于 2012-04-16T08:43:20.457 に答える
0

Tomcat にインストールしないでください。JavaBridge.jar を .jar フォルダーで実行し、次のようにします。

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

私はそれでジャスパーレポートを開くことに成功しました

于 2013-12-20T10:00:48.623 に答える