首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java与Mathematica的交互

Java与Mathematica的交互
EN

Stack Overflow用户
提问于 2011-05-09 08:37:54
回答 2查看 1.2K关注 0票数 4

如何在Mathematica中使用Java?

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

我在Mathematica文档和here中读到,我应该这样写

代码语言:javascript
复制
Needs["JLink`"]; 
InstallJava[]; 
obj=JavaNew[NotebookDirectory[]~~"GRASP.java"]

代码语言:javascript
复制
Needs["JLink`"]; 
InstallJava[]; 
obj=LoadJavaClass[NotebookDirectory[]~~"GRASP.java"]

或者类似的东西,但我尝试的任何东西都会返回一个错误。我有WinXP,Mathematica7,Eclipse3.6。

任何有效的例子都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-09 12:44:25

不要忘记首先编译Java类--您不能直接加载GRASP.java

编译后,尝试执行以下操作:

代码语言:javascript
复制
Needs["JLink`"]
AddToClassPath[NotebookDirectory[]];
LoadJavaClass["GRASP"];
GRASP`TSP[{{1,2,3},{4,5,6}}, 7, 8]

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

如果您要访问的方法是常规方法(非静态方法),则调用序列将类似于:

代码语言:javascript
复制
Needs["JLink`"]
AddToClassPath[NotebookDirectory[]];
obj = JavaNew["GRASP"];
obj@someMethod[{{1,2,3},{4,5,6}}, 7, 8]

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

代码语言:javascript
复制
Needs["JLink`"]
AddToClassPath[NotebookDirectory[]];
LoadJavaClass["com.stackoverflow.GRASP"];
com`stackoverflow`GRASP`TSP[{{1,2,3},{4,5,6}}, 7, 8]

代码语言:javascript
复制
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的要求。

票数 7
EN

Stack Overflow用户

发布于 2011-05-09 12:43:33

您链接到的Java显示了StackOverflow类的名称(GRASP),而不是作为参数传递的源文件的名称,因此一定要去掉.java。此外,您还需要编译源文件以生成GRASP.class文件,因为这是实际可以加载的格式。这可能很简单,只是

代码语言:javascript
复制
javac GRASP.java

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5932431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档