如何在Mathematica中使用Java?
我在同一个文件夹中有两个文件,GRASP.nb和GRASP.java (顺便说一下: GRASP=greedy随机化自适应搜索过程)。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,Mathematica7,Eclipse3.6。
任何有效的例子都将不胜感激。
发布于 2011-05-09 12:44:25
不要忘记首先编译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),则确保该类具有相对于notebook的路径com/stackoverflow/GRASP.class。这是Java的要求,而不是Mathematica的要求。
发布于 2011-05-09 12:43:33
您链接到的Java显示了StackOverflow类的名称(GRASP),而不是作为参数传递的源文件的名称,因此一定要去掉.java。此外,您还需要编译源文件以生成GRASP.class文件,因为这是实际可以加载的格式。这可能很简单,只是
javac GRASP.java但这可能会更难,这取决于该文件中的内容。同样,类的名称可能不仅仅是GRASP --如果文件中有一条package com.foo.something语句,那么参数将是com.foo.something.GRASP。
https://stackoverflow.com/questions/5932431
复制相似问题