2015-02-11 122 views
0

我已成功運行Php/Java bridge項目和test.php 但我遇到了問題。 我想調用Java方法使用Java Object參數 Java源:關於PHP/Java Bridge使用Object參數調用Java方法

public class OtherClass { 
    public BaseBean funBean(BaseBean param){ 
     param.setName("Bean Name"); 
     return param; 
    } 
} 

public class BaseBean { 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String name; 

} 

PHP腳本: 我想它可以像運行,它不能。

<?php 
require_once("java/Java.inc"); 
//require_once("java/java_helper.php"); 

class BaseBean{ 
    public $name; 
} 
$eh = new java("com.anima.service.OtherClass"); 
$cla = new BaseBean(); 
$cla->name = "nameTest"; 
$eh->funBean($cla); 
?> 

或者有一些解決方案可以幫助我實現這個想法。 我想用php對象調用java方法。

您可以請任何人幫助我。

在此先感謝。

回答

0

我想你應該創建BaseBean爲「Java實例」以及:

$cla = new java("com.anima.service.BaseBean"); 

或者你也可以嘗試用java_closure,但我認爲在這種情況下,你必須改變你的java預期的類型方法是這樣的:

public Object funBean(Object param){ ... } 
$cla = new BaseBean(); 
$cla->name = "nameTest"; 
$jObjCla = java_closure($cla); 
$eh->funBean($jObjCla); 

PHP/Java bridge documentation已經發現java_closure方法已經得到了第三個參數是什麼的Java接口數組應該由創建包裝的對象來實現:

java_closure(new Listener(), null, array(new Java("java.awt.event.ActionListener"))); 

Java源:

public interface IBaseBean { 
    String getName(); 
    void setName(String name); 
} 

public class OtherClass { 
    public IBaseBean funBean(IBaseBean param){ 
     param.setName("Bean Name"); 
     return param; 
    } 
} 

public class BaseBean implements IBaseBean { 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String name; 
} 

PHP腳本:

<?php 
require_once("java/Java.inc"); 

class BaseBean{ 
    public $name; 
} 
$eh = new java("com.anima.service.OtherClass"); 
$cla = new BaseBean(); 
$cla->name = "nameTest"; 
$jObjCla = java_closure($cla, null, array(new Java("com.anima.service.IBaseBean"))); 
$eh->funBean($jObjCla); 
?> 
+0

感謝回答,但它有一個錯誤 的Java調用堆棧: 2月11日19:52: 15 JavaBridge錯誤:發生異常:java.lang.IllegalArgumentException:參數類型不匹配 php調用堆棧: 警告:檢測到未檢查的異常:[[o:Response $ UndeclaredThrowableErrorMarker]:「致命:檢測到未聲明的java.lang.RuntimeException。 java.lang.Exception:Invoke failed:[[o:OtherClass]] - > funBean((o:BaseBean)[o:$ Proxy1])。原因:java.lang.IllegalArgumentException:參數類型不匹配VM: – YongJW 2015-02-11 12:07:06

+0

對不起,我現在無法嘗試,因爲我沒有環境,但是您是否更改了funBean方法? (期望接口而不是類) – harcos 2015-02-11 12:11:15

+0

哦,你猜對了,我沒有改變funBean。 – YongJW 2015-02-11 12:29:54