Leo*_*Leo 4 java wolfram-mathematica
如何在Mathematica中使用Java?
我有两个文件,GRASP.nb
并且GRASP.java
在同一个文件夹中(BTW:GRASP =贪婪的随机自适应搜索程序).该GRASP.java
文件包含一个方法public static int[] TSP(int[][] g, int numberOfIterations, int k)
.我想在Mathematica中调用这个方法.
我在Mathematica文档中读到,也在这里,我应该写
Needs["JLink`"];
InstallJava[];
obj=JavaNew[NotebookDirectory[]~~"GRASP.java"]
Run Code Online (Sandbox Code Playgroud)
要么
Needs["JLink`"];
InstallJava[];
obj=LoadJavaClass[NotebookDirectory[]~~"GRASP.java"]
Run Code Online (Sandbox Code Playgroud)
或类似的东西,但我尝试的任何东西,都会返回错误.我有WinXP,Mathematica 7,Eclipse 3.6.
任何工作的例子都将非常感激.
不要忘记先编译Java类 - 不能GRASP.java
直接加载.
编译后,请尝试以下操作:
Needs["JLink`"]
AddToClassPath[NotebookDirectory[]];
LoadJavaClass["GRASP"];
GRASP`TSP[{{1,2,3},{4,5,6}}, 7, 8]
Run Code Online (Sandbox Code Playgroud)
由于该TSP
方法是静态方法,因此必须先加载Java类,然后才能访问它.请注意,该类成为名为Mathematica的上下文GRASP
,并且静态方法在该上下文中作为符号进行访问(GRASP`TSP
如上所示).
如果您要访问的方法是常规方法(非静态方法),则调用序列将如下所示:
Needs["JLink`"]
AddToClassPath[NotebookDirectory[]];
obj = JavaNew["GRASP"];
obj@someMethod[{{1,2,3},{4,5,6}}, 7, 8]
Run Code Online (Sandbox Code Playgroud)
所有这些都假定您的Java类包含在默认包中 - 这是一种不寻常的情况.如果类包含在命名包中,则语法如下:
Needs["JLink`"]
AddToClassPath[NotebookDirectory[]];
LoadJavaClass["com.stackoverflow.GRASP"];
com`stackoverflow`GRASP`TSP[{{1,2,3},{4,5,6}}, 7, 8]
Run Code Online (Sandbox Code Playgroud)
要么
Needs["JLink`"]
AddToClassPath[NotebookDirectory[]];
obj = JavaNew["com.stackoverflow.GRASP"];
obj@someMethod[{{1,2,3},{4,5,6}}, 7, 8]
Run Code Online (Sandbox Code Playgroud)
如果类是在一个名为包(com.stackoverflow
在我的例子),然后确保该类具有路径com/stackoverflow/GRASP.class
相对于笔记本电脑.这是Java的要求,而不是Mathematica.
归档时间: |
|
查看次数: |
1148 次 |
最近记录: |