有没有办法在Eclipse工作区中使用Matlab的输出?

时间:2017-06-30 09:59:37

标签: java eclipse matlab function main

作为一个起点,我会注意到我的java技能非常有限。

到目前为止,我已经成功地链接了项目,库和来源。我相信我的问题的答案在于使用'getter setters',尽管java文档非常难以理解(术语)。

我已经看到其他类似但没有包含调用Matlab函数的问题,这可能使这成为一个新问题(因为它只涉及最新的Matlab版本)。我已尝试设置这些,但无法访问输出。

我在Matlab 2017a和Eclipse之间共享这些信息时遇到了一些困难。我可以使用Eclipse来触发Matlab函数(My_Function .Code_1)。可以在Eclipse控制台上看到输出,但是,我无法在Code_2中访问它。

有没有办法在Eclipse工作区中使用Matlab的输出?

Code_1 -----
package sicktodeath;
import com.mathworks.engine.MatlabEngine;

public class Call_Mat_two {

    public static void main(String[] args) throws Exception {

        String[] engines = MatlabEngine.findMatlab();
        MatlabEngine eng = MatlabEngine.connectMatlab(engines[0]);

        // Function Input
        eng.putVariable("Input_Var", 0.00045);

        // Run function => Calls the matlab function and provides output
        eng.eval("[Function_Output]   = My_Function(Input_Var);");      

        // Function Output => I cannot access this variable from another Java main method
        double Function_Output = eng.getVariable("Function_Output");   

        hype myList = new hype();
        myList.set_Value(10);                     //set n value
        double currentN = myList.get_Value();     //get n's current value

        eng.close();
    }
}

OR

Code_2 ---
package sicktodeath;
import sickofit.Memes;

public class hype extends Call_Mat_two {

    public static double n;

    public static void main(String[] args) throws Exception {
        //  This calls the main method which triggers the Matlab function
        Call_Mat_two.main(args);   

        System.out.println("Complete");
    }

    public double get_Value() {
        return n;
    }

    public void set_Value(double n) {
        this.n = n;
    }
}

1 个答案:

答案 0 :(得分:0)

您对此行的评论表明您已走上正轨,但您误解了Java程序的结构:

 double Function_Output = eng.getVariable("Function_Output"); //  I cannot access this variable from another Java main method

问题似乎在于您构建项目的方式。您的main方法不应该处理这样的事情,但应该将其委托给其他方法或类。

public class Foo {
  MatlabEngine engine;

  public Foo() {
    //get an instance of MatlabEngine, assign it to engine
    //do whatever other setup you need to do
  }

  public static void main(String[] args) {
    new Foo().doStuff();
  }

  public void doStuff() {
    System.out.println(engine.getVariable("Function_Output")); // note that you haven't needed to declare engine in this method scope
  }
}

进行一些谷歌搜索并阅读有关构造函数,对象和实例变量的内容。