|
| |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
动态的执行一段简朴代码,采用生成java文件,调用javac编译,反射执行的方法。 只是一个简朴测试,有些地方有待完善。 代码如下 -------------------------------------------------------------------------------- import java.io.*; /** * 动态执行一段代码(生成文件->编译->执行) * @author kingfish * @version 1.0 */ public class TestRun { private String fileName = "Test.java"; private String className= "Test.class"; public TestRun() { File f = new File(fileName); if(f.exists()) f.delete(); f = new File(className); if(f.exists()) f.delete(); } /** * 创建java文件 */ public void createJavaFile(String body) { String head = "public class Test{/r/n public static void runCode(){"; String end = "/r/n }/r/n}"; try { DataOutputStream dos = new DataOutputStream(new FileOutputStream( fileName)); dos.writeBytes(head); dos.writeBytes(body); dos.writeBytes(end); dos.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 编译 */ public int makeJavaFile() { int ret = 0; try { Runtime rt = Runtime.getRuntime(); Process ps = rt.exec("cmd /c javac " + fileName); ps.waitFor(); byte[] out = new byte[1024]; DataInputStream dos = new DataInputStream(ps.getInputStream()); dos.read(out); String s = new String(out); if (s.indexOf("Exception") > 0) { ret = -1; } } catch (Exception e) { ret = -1; e.printStackTrace(); } return ret; } /** * 反射执行 */ public void run() { try { Class.forName("Test").getMethod("runCode", new Class[] {}).invoke(null, new Object[]{}); } catch (Exception e) { e.printStackTrace(); } } /** * 测试 */ public static void main(String[] args) { String cmd = "System.out.println(/"usage:java TestRun int i=1; System.out.println(i+100);/");"; if(args.length>=1){ cmd = args[0]; } TestRun t = new TestRun(); t.createJavaFile(cmd); if (t.makeJavaFile() == 0) { t.run(); } } } -------------------------------------------------------------------------------- 测试: java TestRun System.out.println(/"Hello,World!/"); java TestRun "int i=1;int j=2;System.out.println(i+j);" -------------------------------------------------------------------------------- 如有任何问题,请指正! kingfish 返回类别: 教程 上一教程: 网上收集的部分java资料 下一教程: 浅析Java的“克隆”方式 您可以阅读与"java中动态执行一段代码"相关的教程: · 一段带SMTP认证的JAVAMAIL代码 · 一段简朴的根据SQLServer数据库表结构生成C#实体类的Java代码 · 回答:为什么执行JAVA程序时,会出现Exception in thread"main" java.lang.NoClassDefFoundError的错?... · JAVA 的MD5加密算法源代码 · java网络五子棋的源代码 |
| 快精灵印艺坊 版权所有 |
首页 |
||