【问题标题】:Java and Mathematica interactionJava 和 Mathematica 交互
【发布时间】:2011-05-09 00:37:53
【问题描述】:

如何在 Mathematica 中使用 Java?

我在同一个文件夹中有两个文件,GRASP.nbGRASP.java(顺便说一句:GRASP=贪婪随机自适应搜索过程)。 GRASP.java 文件包含一个方法 public static int[] TSP(int[][] g, int numberOfIterations, int k)。我想在 Mathematica 中调用这个方法。

我阅读了 Mathematica 文档和 here,我应该写

Needs["JLink`"]; 
InstallJava[]; 
obj=JavaNew[NotebookDirectory[]~~"GRASP.java"]

Needs["JLink`"]; 
InstallJava[]; 
obj=LoadJavaClass[NotebookDirectory[]~~"GRASP.java"]

或类似的东西,但我尝试的任何东西都会返回错误。我有 WinXP、Mathematica 7、Eclipse 3.6。

任何工作示例将不胜感激。

【问题讨论】:

    标签: java wolfram-mathematica


    【解决方案1】:

    别忘了先编译Java类——你不能直接加载GRASP.java

    编译后,尝试以下操作:

    Needs["JLink`"]
    AddToClassPath[NotebookDirectory[]];
    LoadJavaClass["GRASP"];
    GRASP`TSP[{{1,2,3},{4,5,6}}, 7, 8]
    

    由于TSP 方法是静态方法,因此您必须先加载Java 类本身,然后才能访问它。请注意,该类成为一个名为 GRASP 的 Mathematica 上下文,并且静态方法在该上下文中作为符号访问(GRASP`TSP,如上所示)。

    如果您要访问的方法是常规方法(不是静态方法),那么调用顺序将如下所示:

    Needs["JLink`"]
    AddToClassPath[NotebookDirectory[]];
    obj = JavaNew["GRASP"];
    obj@someMethod[{{1,2,3},{4,5,6}}, 7, 8]
    

    所有这些都假定您的 Java 类包含在默认包中——这是一种不寻常的情况。如果类包含在命名包中,则语法如下:

    Needs["JLink`"]
    AddToClassPath[NotebookDirectory[]];
    LoadJavaClass["com.stackoverflow.GRASP"];
    com`stackoverflow`GRASP`TSP[{{1,2,3},{4,5,6}}, 7, 8]
    

    Needs["JLink`"]
    AddToClassPath[NotebookDirectory[]];
    obj = JavaNew["com.stackoverflow.GRASP"];
    obj@someMethod[{{1,2,3},{4,5,6}}, 7, 8]
    

    如果类在命名包中(在我的示例中为com.stackoverflow),则确保该类具有相对于笔记本的路径com/stackoverflow/GRASP.class。这是 Java 的要求,不是 Mathematica 的要求。

    【讨论】:

      【解决方案2】:

      您链接到的 StackOverflow 帖子显示 Java 类 (GRASP) 的名称而不是源文件的名称,作为参数传递,因此肯定会丢失 .java。此外,您需要编译源文件以生成GRASP.class 文件,因为这是实际可以加载的格式。这可能就这么简单

      javac GRASP.java
      

      但这可能会更难,具体取决于该文件中的内容。同样,类的名称可能不仅仅是GRASP——如果文件中有package com.foo.something 语句,那么参数将是com.foo.something.GRASP

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-11
        • 2015-03-21
        • 2010-09-09
        • 1970-01-01
        • 2018-01-31
        • 2012-03-12
        相关资源
        最近更新 更多