1

我有 zend javabridge 工作。现在我想用一个同名的类调用一个 .jar 文件 myWebTest.jar。然后我想调用一个函数 testWeb,它返回一个 hello world 字符串。

这在 32bit Win 7 专业系统上

我将 myWebTest.jar 添加到位于 /zend/zendserver/etc/java_bridge_server.ini 的类路径中:

[JAVA_BRIDGE_SERVER]
  CLASSPATH="C:\Program Files\Zend\ZendServer\bin\javamw.jar;C:\Program Files\Zend\ZendServer\bin\myWebTest.jar;."

这条路是正确的。

我已经重新启动了zend服务器,我正在尝试的代码是:

$jObj = new Java("myWebTest");

// Print date through the object
print $jObj->testWeb("jim");

日志:

1 {main}
  thrown in C:\Program Files\Zend\Apache2\htdocs\javaObject.php on line 4
[08-Dec-2011 11:44:48] PHP Fatal error:  Call to a member function testWeb() on a non-object in C:\Program Files\Zend\Apache2\htdocs\javaObject.php on line 6
[08-Dec-2011 11:45:51] PHP Fatal error:  Uncaught exception 'JavaException' with message 'Java Exception java.lang.ClassNotFoundException: myWebTest
java.lang.ClassNotFoundException: myWebTest
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)

in C:\Program Files\Zend\Apache2\htdocs\javaObject.php:4
Stack trace:
  #0 C:\Program Files\Zend\Apache2\htdocs\javaObject.php(4): *No Class!*->jbridge('myWebTest')
  #1 {main}
thrown in C:\Program Files\Zend\Apache2\htdocs\javaObject.php on line 4

我在任何地方都找不到如何进行此操作。蒂亚吉姆

4

2 回答 2

0

Java() 的参数是您要访问的类的完全限定类名,而不是 jar 文件的名称。例如 php java bridge 文档说,

java("java.lang.Long")->MAX_VALUE

这访问Long包中的类java.lang

这里有一些关于 java 包和类名的信息

于 2011-12-11T04:55:07.313 回答
0

来自Java的文档

object java(string $class_name [ , ... ])

Parameters
class_name: Class name to create
       ...: Additional arguments are treated as constructor parameters

Return Value: The Java object that was created, NULL otherwise 

不要混淆,实际上class name需要是full qualified Name类的。例如,如果您有以下课程:

package experiment;

public class Test {
    ....
}

这里的类名是:Test 完全限定名:experiment.Test

所以要在 PHP 中实例化这个类,你需要编写:

$test = new Java("experiment.Test");

另外根据您的异常日志

Java Exception java.lang.ClassNotFoundException: myWebTest

myWebTest它表明,它在您的类路径中找不到任何名为 as的类。这意味着 jar 文件中没有命名类myWebTest,或者 jar 未正确加载。

于 2011-12-13T15:55:20.023 回答