2015-02-11 126 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