2011-05-09 8 views
4

Mathematica에서 Java를 어떻게 사용할 수 있습니까?Java와 Mathematica의 상호 작용

동일한 폴더에 두 개의 파일 (GRASP.nbGRASP.java)이 있습니다 (BTW : GRASP = 욕심 꾸러기 무작위 적응 검색 절차). GRASP.java 파일에는 public static int[] TSP(int[][] g, int numberOfIterations, int k) 메서드가 포함되어 있습니다. Mathematica에서이 메서드를 호출하고 싶습니다.

은 내가

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

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

또는

를 쓰거나 같은,하지만 난 시도 아무것도, 오류를 반환해야한다고도 here 티카 문서에서 읽고. 나는 WinXP, Mathematica 7, Eclipse 3.6을 가지고있다.

모든 작업 예제는 많이 감사하겠습니다.

답변

7

Java 클래스를 먼저 컴파일하는 것을 잊지 마십시오. GRASP.java을 직접로드 할 수 없습니다.

컴파일 한 후 다음을 시도해보십시오 TSP 방법은 정적 인 방법이기 때문에 당신이 그것을 액세스 할 수

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

, 당신은 자바 클래스 자체를로드해야합니다. 클래스는 GRASP이라는 Mathematica 컨텍스트가되고 정적 메서드는 해당 컨텍스트의 심볼로 액세스됩니다 (위 그림과 같이 GRASP`TSP). 액세스에 원하는 방법이 있다면

일반적인 방법 (정적되지 않음), 다음 호출 순서는이 대신과 같습니다

이 모든 자바 클래스가 기본으로 포함되어 있다고 가정
Needs["JLink`"] 
AddToClassPath[NotebookDirectory[]]; 
obj = JavaNew["GRASP"]; 
[email protected][{{1,2,3},{4,5,6}}, 7, 8] 

패키지 - 비정상적인 상황. 클래스가 명명 된 패키지에 포함 된 경우, 구문은 다음과 같이 될 것이다 :

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"]; 
[email protected][{{1,2,3},{4,5,6}}, 7, 8] 

클래스 이 (내 예제 ​​com.stackoverflow) 명명 된 패키지 인 경우

, 그런 다음 클래스가 노트북과 관련된 경로 com/stackoverflow/GRASP.class을 가지는지 확인하십시오. 이것은 Mathematica가 아닌 Java의 요구 사항입니다.

+0

그것은 매력처럼 작동합니다! 고맙습니다, 많이 감사드립니다. – Leon

1

링크 된 StackOverflow 게시물은 인수로 전달되는 소스 파일의 이름이 아닌 Java 클래스 (GRASP)의 이름을 나타내므로 .java은 분명히 손실됩니다. 또한 실제로로드 할 수있는 형식이므로 GRASP.class 파일을 생성하려면 소스 파일을 컴파일해야합니다. 단지

javac GRASP.java 

과 같이 간단 할 수도 있지만 그 파일의 내용에 따라 더 어려울 수 있습니다. 마찬가지로, 클래스의 이름이 GRASP이 아닐 수도 있습니다 - 파일에 package com.foo.something 문이있는 경우 인수는 com.foo.something.GRASP이 될 것입니다.