我正在构建一个php应用程序。在脚本中,有一个执行jar文件的调用:
?php
exec('java -jar simulations/simulation.jar');
?>
问题是此命令行执行jar文件:
user@ubuntu: php execSimulation.php
但不是来自网页的电话。这个电话是由AJAX发出的,我错过了什么?
<!-- Script to execute the simulation -->
<script type="text/javascript" src="prototype.js"></script>
<script>
function sendRequest() {
new Ajax.Request("ejecutarSimulacion.php",
{
method: 'post',
postBody: 'name='+ $F('name'),
onComplete: showResponse
});
}
function showResponse(req){
alert(req.responseText);
}
</script>
<form id="test" onsubmit="return false;">
<input type="hidden" value="<?php echo $simulacion; ?>" name="name" id="name" >
<input type="submit" value="<?php echo $nombre; ?>" onClick="sendRequest()">
</form>
当我尝试仅打印我发送的参数时,例如,警报显示它,所以我确信调用正在到达服务器,但我不知道为什么jar文件没有被执行。请问有什么想法吗?
提前致谢。
修改
错误追踪:
No protocol specified
Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:62)
at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:142)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
at java.awt.Window.init(Window.java:385)
at java.awt.Window.<init>(Window.java:438)
at java.awt.Frame.<init>(Frame.java:419)
at java.awt.Frame.<init>(Frame.java:384)
at javax.swing.JFrame.<init>(JFrame.java:174)
at org.opensourcephysics.tools.TranslatorTool.<init>(Unknown Source)
at org.opensourcephysics.tools.TranslatorTool.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at org.opensourcephysics.display.OSPRuntime.<clinit>(Unknown Source)
at org.opensourcephysics.controls.OSPLog.fine(Unknown Source)
at org.opensourcephysics.tools.ResourceLoader.addSearchPath(Unknown Source)
at _users.tanqueCalentamiento.TanqueCalentamiento.<clinit>(TanqueCalentamiento.java:18)
Could not find the main class: _users.simulation.Simulation. Program will exit.
答案 0 :(得分:2)
您的jar似乎需要运行X服务器。
无法使用':0.0'作为DISPLAY变量的值连接到X11窗口服务器。
当您从命令行运行它时,您是否正在运行X?如果你这样做,这将解释为什么它在那里工作,而不是PHP。
您可以尝试从PHP“劫持”正在运行的X会话。
exec('DISPLAY=:0 java -jar simulations/simulation.jar');
您可能必须先从命令行运行xhost +localhost
(或xhost +
),以允许用户运行PHP以连接到X.
答案 1 :(得分:2)
在杰米萨维奇不朽的话语中,“这是你的问题。”
您正在运行的Java程序正在尝试在初始化时访问您的X Windows“服务器”(即屏幕),当您从命令行运行而不是从无头Web服务器运行时,该程序正常运行。请与编写org.opensourcephysics.tools.TranslatorTool的人讨论如何禁用此(严重功能失调)行为。
答案 2 :(得分:0)
使用exec()中的完整路径:CLI SAPI和apache之间的基本路径不同。
<?php
exec('full/path/to/jar');