xampp,php-java-bridge show通知:未定义的属性:java_Client :: $ cancelProxyCreationTag

时间:2014-08-27 09:11:14

标签: java php xampp php-java-bridge

当我尝试使用javaBridge时,我收到以下通知,因为我想在php中使用java代码,我遵循了一些教程但是遵循了以下内容

Undefined property: java_Client::$cancelProxyCreationTag in D:\xampp\htdocs\java\Java.inc on line 1994

整个test.php文件如下,除了通知其他东西是正常的,

php-java-bridge config...

Java version=1.7.0_55 

Notice: Undefined property: java_Client::$cancelProxyCreationTag in D:\xampp\htdocs\java\Java.inc on line 1994
Java vendor=Oracle Corporation 
OS=Windows 7 6.1 on amd64 
星期三, 八月 27, 2014 at 4:56:58 下午 中国标准时间

有人遇到同样的麻烦吗?谢谢!

2 个答案:

答案 0 :(得分:3)

只需在$cancelProxyCreationTag

中添加属性java_Client即可
//Java.inc
class java_Client {
...
public $cancelProxyCreationTag;
...
}

此属性用于Java destruct方法。如果您在循环中使用桥,则必须使用它。

答案 1 :(得分:1)

解决这个问题需要解决两个相互关联的问题。

首先,原始JavaBridge.war中没有部署java/Java.inc个文件。它是生成的,由于你遇到的bug潜伏在java/Java.inc内,这是有问题的。

其次,java/Java.inc文件包含一个在初始化之前递增的变量。

修复这些问题如下:

  1. 下载JavaBridge.war文件。
  2. 根据documentation调用java/Java.inc提取java -cp JavaBridge.war TestInstallation文件。
  3. 修复出现的任何错误(例如缺少php5-cli)。
  4. 修改java/Java.inc
  5. 转到1994年。
  6. 在第1994行上方插入以下代码:
  7.     if( empty($client->cancelProxyCreationTag) ) {
          $client->cancelProxyCreationTag = 0;
        }
    

    else区块(1989至1998年线)应该类似于:

    } else {
    $result=clone($client->cachedJavaPrototype);
    $result->__factory=$cacheEntry->factory;
    $result->__java=++$client->asyncCtx;
    $result->__signature=$cacheEntry->signature;
    // FIX: initialize variable before it is used.
    if( empty($client->cancelProxyCreationTag) ) { 
      $client->cancelProxyCreationTag = 0;
    } 
    $result->__cancelProxyCreationTag=++$client->cancelProxyCreationTag;
    return $result;
    

    保存文件。

    接下来,重新创建.war文件,如下所示:

    1. 创建一个新的空的临时目录
    2. 将原始JavaBridge war文件解压缩到临时目录中。
    3. java目录移动到临时目录中;确保它包含更新的Java.inc文件!
    4. 归档损坏的JavaBridge.war文件。
    5. 创建新版本的JavaBridge。
    6. 例如,这可能类似于:

      mkdir temp
      unzip ../JavaBridge.war
      mv ../java .
      mv ../JavaBridge.war /tmp
      zip -r ../JavaBridge.war *
      

      问题应该解决。