6

当我尝试使用 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 下午 中国标准时间

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

4

3 回答 3

3

很简单,只需$cancelProxyCreationTagjava_Client类中添加属性

//Java.inc
class java_Client {
...
public $cancelProxyCreationTag;
...
}

此属性用于 Java destruct 方法。如果您在循环中使用网桥,则它是强制性的。

于 2015-04-15T21:47:21.657 回答
2

您也可以从使用网桥的 PHP 代码中执行此操作,以防您不想破解打开 war/jar 文件并重新部署。

//...
$workbook = new Java('org.apache.poi.xssf.usermodel.XSSFWorkbook');
$workbook->__client->cancelProxyCreationTag = 0;
//...
于 2015-05-01T00:08:41.650 回答
1

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

java/Java.inc首先,原始JavaBridge.war中没有部署文件。它是生成的,这是由于您遇到的隐藏在java/Java.inc.

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

修复这些问题如下:

  1. 下载JavaBridge.war文件。
  2. 根据文档java/Java.inc,通过调用:提取文件。java -cp JavaBridge.war TestInstallation
  3. 修复出现的任何错误(例如缺少 php5-cli)。
  4. 编辑java/Java.inc.
  5. 转到第 1994 行。
  6. 在 1994 行的正上方插入以下代码:
    如果(空($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 的新版本。

例如,这可能类似于:

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

问题应该得到解决。

于 2015-05-13T23:20:28.567 回答