•Mitgelieferte Java Runtime Umgebung und J/Link 2.0

Eine Möglichkeit JLink zu laden ist:

Needs["JLink`"] ;

Eine andere Variante wäre, wenn man JLink sowieso oft benutzt, einfach das init.m folgendermassen zu ergänzen (die folgende Zelle ist keine Input sondern eine Program Zelle und wird somit nicht evaluiert).

If[FileNames[ToFileName[$PreferencesDirectory,"Kernel"]]==={},
    CreateDirectory[ToFileName[$PreferencesDirectory,"Kernel"]]];
Export[ #, Import[#,"Text"]<>"\nNeeds[\"JLink`\"];\nOff[General::spell1];\n","Text"], "Text"]&[
ToFileName[{$PreferencesDirectory,"Kernel"},"init.m"] ]

InstallJava[]

LinkObject[/usr/local/Wolfram/Mathematica/4.2/SystemFiles/Java/Linux/bin/java -classpath \"/usr/local/Wolfram/Mathematica/4.2/AddOns/JLink/JLink.jar\" com.wolfram.jlink.Install, 2, 2]

random = JavaNew["java.util.Random"]

<<JavaObject[java.util.Random] >>

{random @ nextInt[], random @ nextLong[], random @ nextFloat[], random @ nextDouble[]}

{-1193186137, 5763468170811788503, 0.19758957624435425`, 0.016907158395339406`}

J/Link 2.0 hat eine Reihe von Verbesserungen, unter anderem:

• JLink.jar ist im JLink Verzeichnis und nicht mehr in JLink/SystemAdditions.
• Grosse Geschwindigkeitsverbesserungen beim Aufrufen von Java Methoden.
• Eine neue Klasse com.wolfram.jlink.ui.MathSessionPane implementiert ein komplettes In/Out  Fenster, aber mit mehr Eigenschaften.
• Eine neue Klasse MathGraphicsJPanel für die Wiedergabe von Mathematica Graphik und mathematischen Ausdrücken.
• Die JavaBlock Funktion ist verbessert worden hinsichtlich der Kontrolle über welche Objekte freigegeben werden am Ende des JavaBlocks, sodass weniger explizite Aufrufe von  ReleaseObject nötig sind.
• Die neue  KeepObjects Option von JavaBlock erlaubt die Spezifizierung einer Liste von Objekten die bis zum Schluss nicht freigegeben werden.
• Die neue ImplementInterface Funktion erlaubt die vollständige Implementierung eines jeden Java Interfaces mit der Mathematica Sprache.
• Die neue  SetInternetProxy Funktion erlaubt die Spezifizierung von Proxy  Port und Host Informationen falls ein Proxyserver benutzt wird.
• Die neue  MakeJavaExpr[] Funktion erlaubt von Mathematica aus  die Konstruktion eines Java Expr Objekts.
• Der neue  JLink`Information` Kontext definiert Variablen mit Versionsinformationen.
• Für Java Programmierer: die MLGetType, MLGetNext Methoden angewendet auf ein KernelLink Objekt geben jetzt ein KernelLink.MLTKOBJECT was bedeutet dass der Ausdruck am Link eine Java Objekt Referenz ist und mit getObject() gelesen werden kann.
• Die MathLink connect() Method hat einen optionalen timeout Parameter der die Anzahl Millisekunden  bestimmt die auf die Verbindung gewartet wird bevor eine Exception erfolgt.
• Informationen können an die Java Konsole gesendet werden.

Minimales Java Programm

Im folgenden Beispiel wird Mathematica von einem einfachen Java Programm BeispielProgramm.java aus aufgerufen. Es werden alle notwendigen Schritte unter Linux gezeigt. Auf anderen Betriebssystemen ist die Prozedur ähnlich.

[rolf@colossos Part2]$ uname -a
Linux colossos 2.4.7-10smp #1 SMP Thu Sep 6 17:09:31 EDT 2001 i686 unknown
[rolf@colossos Part2]$ java -version
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
[rolf@colossos Part2]$ cat BeispielProgramm.java
import com.wolfram.jlink.*;

public class BeispielProgramm {
        public static void main(String[] argv) {
                KernelLink ml = null;
                try {
                        ml = MathLinkFactory.createKernelLink(argv);
                } catch (MathLinkException e) {
                        System.out.println("Fatal error opening link: " + e.getMessage());
                        return;
                }

                try {
                        ml.discardAnswer();
                        String strResult = ml.evaluateToOutputForm("N[Pi, 137]", 0);
                        System.out.println("Pi auf 137 Stellen = " + strResult);

                } catch (MathLinkException e) {
                        System.out.println("MathLinkException occurred: " + e.getMessage());
                } finally {
                        ml.close();
                }
        }
}
[rolf@colossos Part2]$ cat ~/bin/jljavac
#!/bin/sh
#
# jljavac SampleProgram.java
javac -classpath .://usr/local/Wolfram/Mathematica/4.2/AddOns/JLink/JLink.jar $1

[rolf@colossos Part2]$ cat ~/bin/jljava
#!/bin/sh
#
# jljava SampleProgram
java -classpath .://usr/local/Wolfram/Mathematica/4.2/AddOns/JLink/JLink.jar $1 -linkmode launch -linkname 'math -mathlink'

[rolf@colossos Part2]$ jljavac BeispielProgramm.java
[rolf@colossos Part2]$ jljava BeispielProgramm
Pi auf 137 Stellen = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822

Mehr Beispiele und zusätzliche Informationen über sind erhältlich auf http://www.wolfram.com und  http://library.wolfram.com/conferences/devconf2001/#web .

•Java - GraphicsApp

Unter Linux kann man das Standardbeispiel GraphicsApp wie folgt aufrufen:
[rolf@colossos GraphicsApp]$ java -classpath GraphicsApp.jar:../../../JLink.jar GraphicsApp 'math -mathlink'

Es erscheint eine reines Java Fenster dass das Mathematica FrontEnd und den Kernel von Java aus ansteuert und die Graphik erzeugt.

[Graphics:../HTMLFiles/index_192.gif]

•Das Java-SimpleFrontEnd

Ein anderes interessantes mitgeliefertes J/Link 2.0 Beispiel ist das SimpleFrontEnd, ein alternatives völlig in Java geschriebenes FrontEnd für Mathematica.
Unter Linux:
[rolf@colossos SimpleFrontEnd]$ pwd
/usr/local/Wolfram/Mathematica/4.2/AddOns/JLink/Examples/Part2/SimpleFrontEnd

[rolf@colossos SimpleFrontEnd]$ java -classpath SimpleFrontEnd.jar:../../../JLink.jar SimpleFrontEnd

Dies startet das SimpleFrontEnd in dem dann wie gewohnt (allerdings nur linear) Mathematica Befehle eingegeben werden können.

[Graphics:../HTMLFiles/index_193.gif]


Converted by Mathematica  (June 25, 2002)