Matlab,PHP和Java

Ras*_*mus 11 php java matlab

我正在尝试创建一个使用PHP/Java Bridge的Matlab函数的Web应用程序.让我解释:

  1. 我需要在matlab中编写函数
  2. 使用matlab ja builder将函数转换为jar文件
  3. 使用PHP/Java Bridge在php中调用此函数并显示结果.

到目前为止,我已经这样做了.我创建了一个名为"makesqr.m"的非常简单的Matlab文件,如下所示:

 function y=makesqr(x)
   y = magic(x);
 end
Run Code Online (Sandbox Code Playgroud)

我使用Matlab builder JA将其打包到名为"themagic.jar"的jar文件中.安装了Tomcat和PHP/Java Bridge并编写了一个php函数,它调用了makeqr func,如下所示:

<?php
  require_once("http://localhost:8080/JavaBridgeTemplate621/java/Java.inc");
  $myclass=new Java("themagic.mksqr");//mksqr is the class which has the method named makesqr
  $input = new Java("java.lang.Double", 5);
  $noofoutputs=new Java("java.lang.Integer",1);
  $matinp=new Java("com.mathworks.toolbox.javabuilder.MWNumericArray",$input);
  $myclass->makesqr($noofoutputs,$matinp);
 ?>
Run Code Online (Sandbox Code Playgroud)

我只是不断收到此错误:

未捕获[[o:异常]:"java.lang.Exception:调用失败:[[o:mksqr]] - > makesqr((o:int)[o:Integer],(o:Object;)[o:MWNumericArray ]).原因:java.lang.IllegalArgumentException:参数类型不匹配VM:1.6.0_25@http://java.sun.com/"at:#-9 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)#-8 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)# - 7 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)#-6 java.lang.reflect.Method.invoke(Unknown Source)#-5 php.java.bridge. JavaBridge.Invoke(JavaBridge.java:1044)#-4 php.java.bridge.Request.handleRequest(Request.java:417)#-3 php.java.bridge.Request.handleRequests(Request.java:500)# - 2 php.java.bridge.http.ContextRunner.run(ContextRunner.java:145)#-1 php.java.bridge.ThreadPool $ Delegate.run(ThreadPool.java:60)#0 http:// localhost:8080/JavaBridgeTemplate621/java/Java.inc(232):java_ThrowExceptionProxyFactory-> getProxy(7,'com.mathworks.t ...','T',true)#1 http:// localhost:8080/JavaBridgeTemplate621/java/Jav a.inc(360):java_Arg-> 在第195行获取http:// localhost:8080/JavaBridgeTemplate621/java/Java.inc

我不明白这里要做什么.

编辑: - @ renick-您好我使用了caucho quercus并写了如下文件"testjava.php": -

$myclass=new Java("themagic.theMagic");
$input = new Java("java.lang.Double", 5);
$output=new Java("java.lang.Integer",1);
$result=new Java("java.lang.Object");
$n=new Java("com.mathworks.toolbox.javabuilder.MWNumericArray",$input,MWClassID.DOUBLE);
$result=$myclass->makesqr($output,$n);
Run Code Online (Sandbox Code Playgroud)

现在,当我将此文件称为"localhost:8080/testjava.php"时.我得到以下错误:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

com.caucho.quercus.QuercusException: themagic.theMagic.makesqr: null
    com.caucho.quercus.env.JavaMethod.invoke(JavaMethod.java:131)
    com.caucho.quercus.env.JavaInvoker.callMethod(JavaInvoker.java:737)
    com.caucho.quercus.env.JavaOverloadMethod.callMethod(JavaOverloadMethod.java:179)
    com.caucho.quercus.program.JavaClassDef.callMethod(JavaClassDef.java:658)
    com.caucho.quercus.env.JavaValue.callMethod(JavaValue.java:327)
    com.caucho.quercus.expr.AbstractMethodExpr.eval(AbstractMethodExpr.java:97)
    com.caucho.quercus.expr.ObjectMethodExpr.eval(ObjectMethodExpr.java:97)
    com.caucho.quercus.expr.AbstractMethodExpr.evalCopy(AbstractMethodExpr.java:63)
    com.caucho.quercus.expr.BinaryAssignExpr.eval(BinaryAssignExpr.java:88)
    com.caucho.quercus.expr.Expr.evalTop(Expr.java:523)
    com.caucho.quercus.statement.ExprStatement.execute(ExprStatement.java:67)
    com.caucho.quercus.statement.BlockStatement.execute(BlockStatement.java:105)
    com.caucho.quercus.program.QuercusProgram.execute(QuercusProgram.java:413)
    com.caucho.quercus.page.InterpretedPage.execute(InterpretedPage.java:89)
    com.caucho.quercus.env.Env.executePageTop(Env.java:3951)
    com.caucho.quercus.env.Env.executeTop(Env.java:3892)
    com.caucho.quercus.servlet.QuercusServletImpl.service(QuercusServletImpl.java:188)
    com.caucho.quercus.servlet.QuercusServlet.service(QuercusServlet.java:594)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.lang.NullPointerException
    com.mathworks.toolbox.javabuilder.internal.MWMCR.invoke(MWMCR.java:492)
    themagic.theMagic.makesqr(theMagic.java:158)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    com.caucho.quercus.env.JavaMethod.invoke(JavaMethod.java:117)
    com.caucho.quercus.env.JavaInvoker.callMethod(JavaInvoker.java:737)
    com.caucho.quercus.env.JavaOverloadMethod.callMethod(JavaOverloadMethod.java:179)
    com.caucho.quercus.program.JavaClassDef.callMethod(JavaClassDef.java:658)
    com.caucho.quercus.env.JavaValue.callMethod(JavaValue.java:327)
    com.caucho.quercus.expr.AbstractMethodExpr.eval(AbstractMethodExpr.java:97)
    com.caucho.quercus.expr.ObjectMethodExpr.eval(ObjectMethodExpr.java:97)
    com.caucho.quercus.expr.AbstractMethodExpr.evalCopy(AbstractMethodExpr.java:63)
    com.caucho.quercus.expr.BinaryAssignExpr.eval(BinaryAssignExpr.java:88)
    com.caucho.quercus.expr.Expr.evalTop(Expr.java:523)
    com.caucho.quercus.statement.ExprStatement.execute(ExprStatement.java:67)
    com.caucho.quercus.statement.BlockStatement.execute(BlockStatement.java:105)
    com.caucho.quercus.program.QuercusProgram.execute(QuercusProgram.java:413)
    com.caucho.quercus.page.InterpretedPage.execute(InterpretedPage.java:89)
    com.caucho.quercus.env.Env.executePageTop(Env.java:3951)
    com.caucho.quercus.env.Env.executeTop(Env.java:3892)
    com.caucho.quercus.servlet.QuercusServletImpl.service(QuercusServletImpl.java:188)
    com.caucho.quercus.servlet.QuercusServlet.service(QuercusServlet.java:594)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.32 logs.

Apache Tomcat/6.0.32
Run Code Online (Sandbox Code Playgroud)

谁能知道我做错了什么?

注意:我不知道Java的一个词,但我陷入了必须处理这个问题的情况

ren*_*ick 0

我将建议一种替代方法来实现这一点。由于您已经有一个 tomcat Web 容器,我建议您尝试Caucho Quercus,它是 Java 虚拟机上的 PHP 实现。

特别请参阅此文档示例,调用 Java 代码是多么容易。