javaml
A. java与mathematica
其实这是很简单的问题。
在Mathematica中提供了许多接口与外部程序交流信息,其中JLink就是专门针对Java而做的一个接口。通过JLink,你可以完成在Java中调用Mathematica的功能,也可以完成在Mathematica中调用Java的功能。从你的描述中,你应该多看看第一个功能方面的教程。教程的位置在帮助菜单中Virtual Book的最后一个选项中的JLink子选项中。
在JLink包中,实际上就是定义了一些类,这些类提供一些方法让你访问Mathematica。说白了,这个访问指的就是将一些要计算的表达式作为参数放到类的方法中就完成了传递信息的过程,接着这个定义好的方法会打开你机器上的mathematica,然后执行计算,接着将结果返回给Java程序。这时你把这个值赋给这个变量。这样就完成了一个java与mathematica的交互过程。
下面,我深入地介绍下JLink包。
在JLink中,有两个最重要的interface叫MathLink和KernelLink。KernelLink继承自MathLink。所以你一般只需要使用KernelLink这个接口。
为了完成交互过程,你需要首先获得一个KernelLink的对象。这里获得的方法采用工厂模式:MathLinkFactory.createKernelLink(argv).在这里argv中包含了你安装的mathematica的目录地址。给你一个argv的范例:"-linkmode launch -linkname 'c:\\program files\\wolfram research\\mathematica\\7.0\\mathkernel.exe' "。你将这个东西修改下使之符合你的计算机,然后放到argv所在的位置中即可完成获得KernelLink对象的过程。
下面在介绍下mathematica在Java环境中是如何以类的形式组织起来的:
在包中定义了一个Expr类来表示Mathmatica的Expression。你应该知道,Mathmatica中一切都是Expression。所以在Java中,你可以将得到的信息和要传递的信息都封装为Expr类的一个对象。从KernelLink中读取信息,可以调用getExpr()方法得到Expr对象,然后可以调用这个Expr类提供的多个方法进行想要的操作。这些方法和你在Mathematica中遇到的基本相同,都是那里面的函数名,只不过改为以小写字母开头的方法而已。像KernelLink中写东西也很简单,构建Expr对象,然后将它作为参数传递给相应的方法。
在包中定义了一个MathLinkException,用来表示交互过程中出现的所有异常。一般Link的方法都会抛出异常,所以你要将这些语句用try,catch结构围起来。
在包中定义了一个PacketListener,一般你不需要用到。你只需在传递信息给Mathematica后,调用waitForAnswer()方法即可。但如果你将来想对传回来的信息做些操作的话,就要用到这个。你有兴趣的话自己看吧,我只是提一下。
有了以上的概念后,我现在介绍些比较常用的方法:
put()方法:你可以在()中写入int, double,string,或者任意一个类的对象,这表示你将把这个东西传递给Mathematica。
如果你想使用Mathematica的函数,可以使用putFunction (String functionName, int argus).
get()方法:从Mathematica得到答案后,你需要显示调用get类方法获得结果。对于每一个特殊的类型都对以有一个get方法。
想获得Expr类型可以使用以下方法:
public Expr getExpr() throws MathLinkException;
最后给你一个范例程序:
import com.wolfram.jlink.*;
import java.awt.*;
import java.awt.event.*;
public class GraphicsApp extends Frame {
static GraphicsApp app;
static KernelLink ml;
MathCanvas mathCanvas;
TextArea inputTextArea;
Button evalButton;
Checkbox useFEButton;
Checkbox graphicsButton;
Checkbox typesetButton;
public static void main(String[] argv) {
try {
ml = MathLinkFactory.createKernelLink("-linkmode launch -linkname 'c:\\program files\\wolfram research\\mathematica\\7.0\\mathkernel'");
ml.discardAnswer();
} catch (MathLinkException e) {
System.out.println("An error occurred connecting to the kernel.");
if (ml != null)
ml.close();
return;
}
app = new GraphicsApp();
}
public GraphicsApp() {
setLayout(null);
setTitle("Graphics App");
mathCanvas = new MathCanvas(ml);
add(mathCanvas);
mathCanvas.setBackground(Color.white);
inputTextArea = new TextArea("", 2, 40, TextArea.SCROLLBARS_VERTICAL_ONLY);
add(inputTextArea);
evalButton = new Button("Evaluate");
add(evalButton);
evalButton.addActionListener(new BnAdptr());
useFEButton = new Checkbox("Use front end", false);
CheckboxGroup cg = new CheckboxGroup();
graphicsButton = new Checkbox("Show graphics output", true, cg);
typesetButton = new Checkbox("Show typeset result", false, cg);
add(useFEButton);
add(graphicsButton);
add(typesetButton);
setSize(300, 400);
setLocation(100,100);
mathCanvas.setBounds(10, 25, 280, 240);
inputTextArea.setBounds(10, 270, 210, 60);
evalButton.setBounds(230, 290, 60, 30);
graphicsButton.setBounds(20, 340, 160, 20);
typesetButton.setBounds(20, 365, 160, 20);
useFEButton.setBounds(180, 340, 100, 20);
addWindowListener(new WnAdptr());
setBackground(Color.lightGray);
setResizable(false);
// Although this code would automatically be called in
// evaluateToImage or evaluateToTypeset, it can cause the
// front end window to come in front of this Java window.
// Thus, it is best to get it out of the way at the start
// and call toFront to put this window back in front.
// KernelLink.PACKAGE_CONTEXT is just "JLink`", but it is
// preferable to use this symbolic constant instead of
// hard-coding the package context.
ml.evaluateToInputForm("Needs[\"" + KernelLink.PACKAGE_CONTEXT + "\"]", 0);
ml.evaluateToInputForm("ConnectToFrontEnd[]", 0);
setVisible(true);
toFront();
}
class BnAdptr implements ActionListener {
public void actionPerformed(ActionEvent e) {
mathCanvas.setImageType(
graphicsButton.getState() ? MathCanvas.GRAPHICS : MathCanvas.TYPESET);
mathCanvas.setUsesFE(useFEButton.getState());
mathCanvas.setMathCommand(inputTextArea.getText());
}
}
class WnAdptr extends WindowAdapter {
public void windowClosing(WindowEvent event) {
if (ml != null) {
// Because we used the front end, it is important
// to call CloseFrontEnd[] before closing the link.
// Counterintuitively, this is not because we want
// to force the front end to quit, but because we
// _don't_ want to do this if the user has begun
// working in the front end session we started.
// CloseFrontEnd knows how to politely disengage
// from the front end if necessary. The need for
// this will go away in future releases of
// Mathematica.
ml.evaluateToInputForm("CloseFrontEnd[]", 0);
ml.close();
}
dispose();
System.exit(0);
}
}
}
B. java编程
public class Employee{
private String empno;
private String name;
private float base;
private float change;
public void setEmpno(String empno){this.empno = empno;}
public void setName(String name){this.name=name;}
public void setBase(float base){this.base = base;}
public void setChange(float change){this.change = change;}
public String getEmpno(){return empno;}
public String getName(){return name;}
public float getBase(){return base;}
public float getChange(){return change;}
public Employee(){}//无参构造方法
public Employee(String empno,String name,float base,float changePercent){
this.name = name;this.empno = empno;this.base = base;this.change = base*changePercent;
}//有参构造方法
public float getTot(){return base+change;}//计算总额的方法
}
public class Test{
public static void main(String args[]){
Employee e = new Employee("MLND-33","赵明",2000,0.1);//在构造器中赋值
System.out.println(e.getEmpno() +" : "+e.getName()+" : "+e.getBase()+" : "+e.getChange());
System.out.println(e.getTot());
}
}
C. java怎么调用MLLib
1. 环境准备 Eclipse 请不要使用最新的 Neon(4.6) ,太多Bug了。 还是使用最新的 Mars(4.5) 系列吧 JDK 版本8.x (Linux推荐Oracle, 没有测试过OpenJDK) 因为只是用Java,因此无需安装Scala及其相应的插件
D. MTML JSP 前端 java
<style>
*{
margin: 0px;
padding: 0px;
}
</style>
E. java的安装与环境变量的配置
还是我来吧,这个问题我起先也遇到啦,但是看了视频教程之后了,简直太容易解决啦
方法如下:其实你写的文件放到哪都没问题,但是前提的 : 比如你写的文件保存在 D:\java;下,那么请你把你设置的环境变量中的classthpath变量的值改为D:\java;.
请注意最后的那个分号和点号最好加上,那么只要你的文件保存D盘的根目录中就可以运行。
F. java 中出现Unknown tag (ml).哪里错了 请帮忙点出
你的contentType写错了,应该是contentType="text/html; charset=UTF-8"
G. java 程序
Book.java-------------------------------
public class Book {
String title;
int pageNum;
String type;
public Book(String title,int pageNum){
this.pageNum=pageNum;
this.type="计算机";
this.title=title;
}
public Book(String title,int pageNum,String type){
this.title=title;
this.pageNum=pageNum;
this.type=type;
}
public void detail(){
System.out.println("名称:"+title+",页数:"+pageNum+",种类:"+type);
}
}
BookTest.java-------------------------------------------
public class BookTest {
public static void main(String[] args){
Book b1=new Book("think in java",980);
b1.detail();
Book b2=new Book("鲁宾逊漂流记",1000,"人物传记");
b2.detail();
}
}
MathLib.java--------------------------------------
public class MathLib {
public int add(int a,int b){
return a+b;
}
public String add(String a,String b){
return a+b;
}
public int jie(int a,int b){
return a-b;
}
public int chen(int a,int b){
return a*b;
}
public int chu(int a,int b){
return a/b;
}
public static void main(String[] args){
MathLib ml=new MathLib();
int a=6;
int b=3;
String aa="Hello ";
String bb="World!";
System.out.println("a+b的值:"+ml.add(a,b));
System.out.println("aa+bb的值:"+ml.add(aa,bb));
System.out.println("a-b的值:"+ml.jie(a,b));
System.out.println("a*b的值:"+ml.chen(a,b));
System.out.println("a/b的值:"+ml.chu(a,b));
}
}
程序不难,关键是楼主要注意语气,不要搞得像我们帮你写东西是我们的义务一样。祝你好运!
H. java_ee_sdk-6u4-windows-ml.exe 和 java_ee_sdk-6u4-windows.exe有什么区别 那个ml是什么意思
ml,multi-language 多语言版包括简体中文,另一个可能只有英文。
I. java 这是什么意思 private float mLumValue = 1F
数字后面
加F代表是float类型
加D代表是double类型
1F就是1
0F就是0