1

私は zend javabridge を動作させています。ここで、同じ名前のクラスで .jar ファイル myWebTest.jar を呼び出したいと思います。次に、hello world 文字列を返す関数 testWeb を呼び出したいと思います。

これは、32ビットのWin 7プロフェッショナルシステムで

/zend/zendserver/etc/java_bridge_server.ini にあるクラスパスに myWebTest.jar を追加しました。

[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ファイルの名前ではありません。たとえば、phpjavabridgeのドキュメントには次のように書かれています。

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クラスパスにあるような名前のクラスが見つからないことを示しています。これは、jar ファイルに名前が付けられたクラスがないかmyWebTest、jar が適切にロードされていないことを意味します。

于 2011-12-13T15:55:20.023 に答える