matlab报错java,java Matlab报错Javajava.lang.Exception: Invoke failed

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

我需要在matlab中编写函数

使用matlab ja构建器

将函数转换为jar文件

使用PHP/Java Bridge在php中调用此函数并显示结果。

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

function y=makesqr(x)

y = magic(x);

end

我使用Matlab生成器JA将其打包到一个名为“themagic.jar”的jar文件中。

安装了Tomcat和PHP/Java Bridge,并编写了一个php函数,该函数像下面这样调用makeqr函数:

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

?>

我只是不断收到此错误:

Uncaught [[o:Exception]:”java.lang.Exception: Invoke failed: [[o:mksqr]]->makesqr((o:int)[o:Integer], (o:Object;)[o:MWNumericArray]). Cause: java.lang.IllegalArgumentException: argument type mismatch VM: [email protected]://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/Java.inc(360): java_Arg->get in http://localhost:8080/JavaBridgeTemplate621/java/Java.inc on line 195

我不明白该怎么办。

编辑:[email protected] renick-嗨,我使用了caucho quercus并编写了如下所示的php文件“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);

现在,当我将此文件称为“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

有人会对我在做什么错有任何想法吗?

注意:我不懂Java,但是在需要处理的情况下陷入困境

最佳答案

由于您已经安装了jar和tomcat。您也许可以将其包装到Web服务中。编写一个映射到此类的小servlet,您可以从php中 curl 并获得json格式的输出。 (您可以在包装代码中获取Matlab方法的输出,将其转换为json,然后将答案发送回去)。

在发送和接收数据的同时,这将使您摆脱所有类型的转换。查看RestEasy以获取一种更简单的发送参数的方法。尽管对于简单的应用程序,具有强制类型转换为所需类型的request.getparameter()很好用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB 启动时出现致命错误。 这通常是由于系统配置问题或安装问题引起的。建议尝试以下步骤解决问题: 1. 重新安装 MATLAB 2. 清除 MATLAB 缓存 3. 更新 MATLAB 至最新版本 4. 重置 MATLAB 首选项 5. 在 MATLAB 安装目录中搜索并删除破损文件 如果以上步骤都不起作用,请联系 MathWorks 技术支持获得帮助。 ### 回答2: Matlab在启动时出现致命错误通常是由于以下一些常见问题导致的: 1. 许可证错误:在启动时,Matlab会尝试验证许可证以确保其是有效的。如果许可证无效或过期,则会发生致命错误。这可能是因为您的许可证过期或未正确安装。解决方法是检查许可证的过期日期和许可证文件是否已正确安装。 2. 系统配置错误:启动Matlab时,它需要一些系统配置才能正确运行。如果您的计算机上缺少必要的组件,或者组件已损坏,则可能会发生致命错误。解决方法是检查您的系统配置是否符合Matlab的要求,并确保所有必要的组件都已正确安装。 3. Matlab文件损坏:Matlab本身是一个包含许多文件的复杂程序。如果其中任何一个文件损坏或丢失,则可能会导致启动时的致命错误。解决方法是重新安装或修复Matlab程序文件。 4. 内存不足:启动Matlab时,它需要一定数量的内存才能正常运行。如果您的计算机没有足够的内存,则启动时可能会出现致命错误。解决方法是关闭其他应用程序,以释放更多内存,或者考虑升级您的计算机内存。 综上所述,Matlab启动时出现致命错误可能是由于多种因素导致的。如果您遇到这种情况,应仔细检查以上常见问题,以找到正确的解决方案。如果问题仍无法解决,请联系Matlab的支持团队以获取更多帮助。 ### 回答3: MATLAB启动时的致命错误是指在打开MATLAB时发生错误,导致MATLAB无法启动。这种错误通常会显示一个错误消息,告诉您出了什么问题。发生这种错误的原因有很多,下面是一些可能导致MATLAB启动时致命错误的原因: 1. MATLAB文件或文件夹已损坏:如果某个MATLAB文件或文件夹已损坏或丢失,则您可能会遇到这种错误。在这种情况下,您可以尝试重新安装MATLAB。 2. MATLAB路径错误:如果您的计算机上存在多个MATLAB版本,则可能会发生此错误。检查您的MATLAB路径是否正确配置。您也可以尝试删除路径中的不必要版本或文件夹。 3. 加载库时出错:如果您的计算机缺少某个库或DLL文件,则MATLAB可能无法启动并显示错误消息。在这种情况下,您可以尝试重新安装或更新相关库。 4. 操作系统与MATLAB版本不兼容:某些操作系统可能与不同版本的MATLAB不兼容。在这种情况下,您可以尝试升级操作系统或尝试不同版本的MATLAB。 如果您遇到MATLAB启动时的致命错误,可以尝试以下操作: 1. 重新启动计算机,并尝试重新启动MATLAB。 2. 检查您的MATLAB文件和文件夹是否全部存在且完整,并尝试重新安装MATLAB。 3. 确保您的MATLAB路径正确配置,并删除不必要的版本或文件夹。 4. 检查是否缺少库或DLL文件,并尝试更新或重新安装相关库。 5. 尝试升级操作系统或尝试不同版本的MATLAB。 总之,MATLAB启动时的致命错误可能由多种原因引起。不过,您可以根据错误消息和上述提示尝试解决问题。如果您无法解决问题,可以尝试联系MATLAB技术支持人员或寻求其他专业的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值