public Object eval(String str){ //生成java文件 String s = "class Temp{"; s += "Object rt(){" s += "MyClass mc = new MyClass();" s += " return mc."+str+"();"; s += "}" s +="}"; File f = new File("Temp.java"); PrintWriter pw = new PrintWriter(new FileWriter(f)); pw.println(s); pw.close(); //动态编译 com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main(); String[] cpargs = new String[] {"-d", "所在目录","Temp.java"}; int status = javac.compile(cpargs); if(status!=0){ System.out.println("没有成功编译源文件!"); return null; } //调用Temp的rt方法返回结果: MyClassLoader mc = new MyClassLoader(); Class clasz = mc.loadClass("Test.class",true); Method rt = clasz.getMethod("rt", new Class[]{ String[].class }); return rt.invoke(null, new Object[] { new String[0] }); //如果方法没有返回就直接调用 }--------------- 直接调用JAVA编译器处理,想多复杂的语句都行
偶正在ing...
做完给你看看.发现自己做的...有很多冗余代码.
应该有更好的解决方法.
期待ing...你的.
给我留下你的邮箱吧.
一起努力.
我很少来这里的.
Email:[email protected]
呵呵。
语法编译器,压栈、出栈。 ==========
Windows那个没有那么麻烦!
因为它没有表达式,用些标志记录一下状态就OK了的
刚编的计算器界面程序,不知道为什么在IE 中老是跳个不停原码如下:
import java.awt.*;
import java.applet.Applet;
public class calculator extends Applet
{
private Button makeButton(String label,Color color){
Button b=new Button(label);
b.setBackground(color);
b.setFont(new Font("Courier",Font.BOLD,10));
return b;
}
private Panel makePanel(LayoutManager lm,Color c){
Panel p=new Panel();
p.setLayout(lm);
p.setBackground(c);
return p;
}
private void makeButtons(){
Color lightRed=new Color(255,100,100);
Color lightBlue=new Color(100,100,255);
Color yellow=new Color(255,255,0);
c=makeButton("C",lightRed);
eq=makeButton("=",lightBlue);
div=makeButton("/",lightBlue);
times=makeButton("*",lightBlue);
d7=makeButton("7",yellow);
d8=makeButton("8",yellow);
d9=makeButton("9",yellow);
minue=makeButton("-",lightBlue);
d4=makeButton("4",yellow);
d5=makeButton("5",yellow);
d6=makeButton("6",yellow);
plus=makeButton("+",lightBlue);
d1=makeButton("1",yellow);
d2=makeButton("2",yellow);
d3=makeButton("3",yellow);
d0=makeButton("0",yellow);
dp=makeButton(".",yellow);
eq2=makeButton("=",lightBlue);
}
public void init(){
background=new Color(200,255,255);
this.setLayout(new FlowLayout(FlowLayout.CENTER,4,1));
result=new Label("0.00000",Label.RIGHT);
result.setBackground(new Color(255,255,255));
add(result);
makeButtons();
row1=makePanel(new FlowLayout(FlowLayout.LEFT,4,2),background);
row1.add(c);
row1.add(eq);
row1.add(times);
row2=makePanel(new FlowLayout(FlowLayout.LEFT,4,2),background);
row2.add(d7);
row2.add(d8);
row2.add(d9);
row2.add(minue);
row3=makePanel(new FlowLayout(FlowLayout.LEFT,4,2),background);
row3.add(d4);
row3.add(d5);
row3.add(d6);
row3.add(plus);
add(row1);
add(row2);
add(row3);
p12=makePanel(new BorderLayout(2,2),background);
p12.add("West",d1);
p12.add("East",d2);
p120=makePanel(new BorderLayout(2,2),background);
p120.add("North",p12);
p120.add("South",d0);
p3p=makePanel(new BorderLayout(2,2),background);
p3p.add("North",d3);
p3p.add("South",dp);
p3peq=makePanel(new BorderLayout(2,2),background);
p3peq.add("West",p3p);
p3peq.add("East",eq2);
add(p120);
add(p3peq);
setBackground(background);
}
public void paint(Graphics g){
resize(row1.getWidth(),8*d1.getHeight());
validate();
}
private Panel row1,row2,row3,p12,p120,p3p,p3peq;
private Button c,eq,div,times,d7,d8,d9,minue,d4,d5,d6,plus,d1,d2,d3,d0,dp,eq2;
private Color background;
private Label result;
}
欢迎大家交流!
//生成java文件
String s = "class Temp{";
s += "Object rt(){"
s += "MyClass mc = new MyClass();"
s += " return mc."+str+"();";
s += "}"
s +="}";
File f = new File("Temp.java");
PrintWriter pw = new PrintWriter(new FileWriter(f));
pw.println(s);
pw.close();
//动态编译
com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
String[] cpargs = new String[] {"-d", "所在目录","Temp.java"};
int status = javac.compile(cpargs);
if(status!=0){
System.out.println("没有成功编译源文件!");
return null;
}
//调用Temp的rt方法返回结果:
MyClassLoader mc = new MyClassLoader();
Class clasz = mc.loadClass("Test.class",true);
Method rt = clasz.getMethod("rt", new Class[]{ String[].class });
return rt.invoke(null, new Object[] { new String[0] });
//如果方法没有返回就直接调用
}---------------
直接调用JAVA编译器处理,想多复杂的语句都行