From: <php...@li...> - 2011-01-27 20:18:43
|
Hi, your new $class() is wrong. $class is a JavaObject and new $JavaObject() requires at least one argument. Furthermore I'd use interfaces rather than the invocation handler: public class Test { public static interface PhpObjectFactory { PhpObject makeObject(String t, Object[] args); } public static interface PhpObject { void doSomething(Object[] args); int getResult(); } public static int runTests(PhpObjectFactory factory) throws Exception { PhpObject[] objects = new PhpObject[100]; for(int i=0; i<4; i++) { objects[i] = factory.makeObject("ClassTest"+i, new Object[]{i}); } for (int i=0; i<4; i++) { objects[i].doSomething(new Object[]{i}); } int res=0; for (int i=0; i<4; i++) { res+=objects[i].getResult(); } return res; } } <?php require_once("http://localhost:8080/JavaBridge/java/JavaBridge.inc"); class ClassTest0 { var $i; function ClassTest0 ($ar) { $this->i = $ar[0]; } function doSomething($ar) { $this->i += java_values($ar[0]); } function getResult() { echo "result:{$this->i}\n"; return $this->i; } } class ClassTest1 extends ClassTest0{}; class ClassTest2 extends ClassTest1{}; class ClassTest3 extends ClassTest2{}; function makeObject($tObj, $arObj) { $name = java_values($tObj); $ar = java_values($arObj); $obj = new $name($ar); return java_closure($obj, null, java('Test$PhpObject')); } echo java("Test")->runTests(java_closure(null, null, java('Test$PhpObjectFactory'))); ?> javac Test.java jar cf Test.jar *.class java -Djava.ext.dirs=. -jar JavaBridge.jar php -n -dallow_url_include=On test.php => 12 Regards, Jost Bökemeier |