2014-08-27 11 views
6

Ich bekomme die folgende Nachricht, wenn ich versuche, javaBridge zu verwenden, weil ich Java-Code in PHP verwenden möchte, folgte ich einige Tutorials, sondern fasste folgende Dinge

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

die ganze test.php Datei ist wie folgt, mit Ausnahme der Mitteilung der anderen Dinge normal sind,

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 下午 中国标准时间 

Hat jemand die gleichen Schwierigkeiten begegnen? Vielen Dank!

Antwort

3

Es einfach ist nur das Attribut hinzufügen $cancelProxyCreationTag in der java_Client Klasse

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

Dieses Attribut in der Java-Destruct Methode verwendet wird. es ist obligatorisch, wenn Sie die Brücke in einer Schleife verwenden.

2

Sie können dies auch mit dem PHP-Code tun, der die Bridge verwendet, falls Sie die WAR/JAR-Dateien nicht öffnen und neu bereitstellen möchten.

//... 
$workbook = new Java('org.apache.poi.xssf.usermodel.XSSFWorkbook'); 
$workbook->__client->cancelProxyCreationTag = 0; 
//... 
1

Zur Lösung dieses Problems müssen zwei zusammenhängende Probleme behoben werden.

Zuerst gibt es keine java/Java.inc Datei im Original JavaBridge.war bereitgestellt. Es wird erzeugt, was problematisch ist aufgrund des Bugs, den Sie gefunden haben, der innerhalb java/Java.inc lauert.

Zweitens enthält die Datei java/Java.inc eine Variable, die vor der Initialisierung inkrementiert wird.

Fix diese Probleme wie folgt:

  1. die JavaBridge.war Datei zum Download.
  2. Extrahieren Sie die java/Java.inc Datei durch den Aufruf: java -cp JavaBridge.war TestInstallation, wie die documentation.
  3. Beheben Sie alle Fehler, die angezeigt werden (z. B. ein fehlender php5-cli).
  4. Bearbeiten java/Java.inc.
  5. Gehe zu Zeile 1994
  6. Fügen Sie den folgenden Code unmittelbar über der Linie 1994:
 
    if(empty($client->cancelProxyCreationTag)) { 
     $client->cancelProxyCreationTag = 0; 
    } 

Die else Block (Linien 1989-1998) ähneln sollte:

} 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; 

Save the Datei.

Als nächstes, erstellen Sie die WAR-Datei wie folgt:

  1. Erstellen Sie ein neues, leeres, temporäres Verzeichnis
  2. Dekomprimieren der ursprünglichen JavaBridge WAR-Datei in das temporäre Verzeichnis.
  3. Verschieben Sie das Verzeichnis java in das temporäre Verzeichnis. sicher sein, dass es die aktualisierte Java.inc Datei enthält!
  4. Archivieren Sie die defekte Datei JavaBridge.war.
  5. Erstellen Sie eine neue Version der JavaBridge.

Zum Beispiel könnte dies aussehen:

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

Das Problem sollte gelöst sein.

Verwandte Themen