public class StdLink
extends java.lang.Object
You never create or use an instance of StdLink; it simply is a container for some methods and state related to the link back to the kernel. The name is inspired by the 'stdlink' global variable that holds the link in C-language "installable" MathLink programs generated by the mprep tool.
| Constructor and Description |
|---|
StdLink() |
| Modifier and Type | Method and Description |
|---|---|
static KernelLink |
getLink()
When called during a session when Java is "installed" into Mathematica (i.e., InstallJava[] has
been called in Mathematica), getLink() returns the KernelLink that points back to Mathematica.
|
static KernelLink |
getMainLink() |
static KernelLink |
getUILink() |
static void |
requestTransaction()
Must be called from code that calls into Mathematica from the user-interface thread.
|
static void |
setLink(KernelLink ml)
Sets the link that will be returned by getLink() when the program is not in the middle
of a call from Mathematica.
|
static void |
setUILink(KernelLink uiLink) |
public static KernelLink getLink()
Here is an example of how it might be called in a method that wants to return a result to Mathematica manually, instead of having its normal return value sent back.
KernelLink link = StdLink.getLink();
if (link != null) {
link.beginManual();
... code here to put a result to Mathematica
}public static void setLink(KernelLink ml)
ml - public static void requestTransaction()
If you are writing a "listener"-type class (i.e., one that implements java.util.EventListener) that calls into Mathematica as a result of some user action on the user-interface thread, you should consider making your class a subclass of MathListener. The MathListener class handles all the details of the interaction with Mathematica for you, including calling requestTransaction().
Here is a typical example of code that calls requestTransaction(). Note that the code that sends the evaluation and reads the answer must still be in a synchronized block. This synchronization solves a different problem than requestTransaction(). Make sure you enter the synchronized block after requestTransaction(), or the user-interface thread will hang forever.
KernelLink ml = StdLink.getLink();
StdLink.requestTransaction();
synchronized (ml) {
try {
ml.evaluate("buttonClickFunction[]");
ml.discardAnswer();
// evaluate() sends an EvaluatePacket. You could also send the EvaluatePacket manually:
//ml.putFunction("EvaluatePacket", 1);
//ml.putFunction("ToExpression", 1);
//ml.put("buttonClickFunction[]");
//ml.discardAnswer();
} catch (MathLinkException e) {}
}public static void setUILink(KernelLink uiLink)
public static KernelLink getUILink()
public static KernelLink getMainLink()
J/Link is Copyright (c) 1999-2012, Wolfram Research, Inc. All rights reserved.