从jar文件

时间:2016-02-24 12:54:52

标签: java eclipse matlab matlabcontrol

我正在使用matlabcontrol来启动matlab会话,如果我从eclipse启动它,一切正常。打开一个新的Matlab会话,或者如果一个已经打开和连接,则重新激活旧的会话。 但是,我想通过从python程序调用的Windows命令行来完成此操作。 如果我编译并将其导出到.jar文件,它仍然有效,但只有在旧的,手动启动的MATLAB会话仍然打开时。 我当前的cmd命令只是:

java -jar StartmatlabSim.jar

如果没有打开会话,我会在cmd中收到以下错误:

C:\Users\rEngel\Desktop>java -jar StartmatlabSim.jar
    Exception in thread "main" java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
    Caused by: matlabcontrol.MatlabConnectionException: Support code location could not be determined. Could not ge
    t path from URI location.
    URI Location: jar:rsrc:matlabcontrol-4.1.0.jar!/
    URL Location: jar:rsrc:matlabcontrol-4.1.0.jar!/
    Code Source: (jar:rsrc:matlabcontrol-4.1.0.jar!/ <no signer certificates>)
    Protection Domain: ProtectionDomain  (jar:rsrc:matlabcontrol-4.1.0.jar!/ <no signer certificates>)
     java.net.URLClassLoader@677327b6
     <no principals>
     java.security.Permissions@27973e9b (
     ("java.security.AllPermission" "<all permissions>" "<all actions>")
    )


    Class Loader: java.net.URLClassLoader@677327b6
    Class Loader Class: class java.net.URLClassLoader
            at matlabcontrol.Configuration.getSupportCodeLocation(Configuration.java:295)
            at matlabcontrol.RemoteMatlabProxyFactory.createProcess(RemoteMatlabProxyFactory.java:289)
            at matlabcontrol.RemoteMatlabProxyFactory.requestProxy(RemoteMatlabProxyFactory.java:125)
            at matlabcontrol.RemoteMatlabProxyFactory.getProxy(RemoteMatlabProxyFactory.java:144)
            at matlabcontrol.MatlabProxyFactory.getProxy(MatlabProxyFactory.java:81)
            at StartMatlab.main(StartMatlab.java:14)
            ... 5 more

编辑:出于某种原因,系统似乎将手动启动的会话视为与命令行启动的会话不同。奇怪的是,只有一个命令行的批处理文件也可以工作,但是如果从python调用它也不行 - 必须点击或执行cmd(!?!?!?)。 我完全迷失在这里......

Beeing能够运行并启动我的MATLAB会话对我来说非常重要,因为我需要将它包含在python程序(mosaik)中,该程序使用cmd命令启动java。

如果有人认识到这个问题并知道修复,我将非常感激。 谢谢你和问候, 罗宾

P.S .: Java代码是:

import matlabcontrol.*;

public class StartMatlab {

    public static void main(String[] args)
    throws MatlabConnectionException, MatlabInvocationException
    {
    // create proxy
    MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder()
    .setUsePreviouslyControlledSession(true).setHidden(true)
    .build();

    MatlabProxyFactory factory = new MatlabProxyFactory(options);
    MatlabProxy proxy = factory.getProxy();

    // call builtin function
    proxy.eval("disp('hello world')");


    // close connection
    proxy.disconnect();

    }
}

此外,我将matlabcontrol-4.1.0.jar包含在.jar构建路径中,并选择在导出期间将库打包到jar文件中。

0 个答案:

没有答案