有些情况下,我们不得不动态运行Java代码,以便提供更加灵活的方式,以下代码可参考(在JDK 1.5+平台上运行通过):
public static void main(String[] args) {
// PrintWriter out;
// PrintStream myOut = new PrintStream(out);
// System.setOut(myOut);
// System.setErr(myOut);
int i = 10;
String code = "System.out.println(\"Hello World!\"+(13+2*5/3));";
code += "for(int i=0;i<" + i + ";i++){";
code += " System.out.println(Math.pow(i,2));";
code += "}";
try {
run(code);
} catch (Exception e) {
e.printStackTrace();
}
}
private synchronized static File compile(String code) throws Exception {
File file = File.createTempFile("JavaRuntime", ".java", new File(System
.getProperty("user.dir")));
file.deleteOnExit();
// 获得类名
String classname = getBaseFileName(file);
// 将代码输出到文件
PrintWriter out = new PrintWriter(new FileOutputStream(file));
out.println(getClassCode(code, classname));
out.close();
// 编译生成的java文件
String[] cpargs = new String[] { "-d",
System.getProperty("user.dir") + "\\WebRoot\\WEB-INF\\classes",
file.getName() };
int status = Main.compile(cpargs);
if (status != 0) {
throw new Exception("语法错误!");
}
return file;
}
private static synchronized void run(String code) throws Exception {
String classname = getBaseFileName(compile(code));
new File(System.getProperty("user.dir")
+ "\\WebRoot\\WEB-INF\\classes\\" + classname + ".class")
.deleteOnExit();
try {
Class cls = Class.forName(classname);
Method main = cls.getMethod("method", null);
main.invoke(cls, null);
} catch (Exception se) {
se.printStackTrace();
}
}
private static String getClassCode(String code, String className) {
StringBuffer text = new StringBuffer();
text.append("public class " + className + "{\n");
text.append(" public static void method(){\n");
text.append(" " + code + "\n");
text.append(" }\n");
text.append("}");
return text.toString();
}
private static String getBaseFileName(File file) {
String fileName = file.getName();
int index = fileName.indexOf(".");
String result = "";
if (index != -1) {
result = fileName.substring(0, index);
} else {
result = fileName;
}
return result;
}
分享到:
相关推荐
添加动态执行的编译环境 options 是个集合,添加内容,字符集,classpath等 * 6.传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java' * 7.创建任务并...
notepad++与jdk配置使用可以运行java代码,不知道的小伙伴有福啦,欢迎下载
Java直接运行JS代码样例 java中调用js脚本 java中直接调用js代码
java 动态编译.java文件,动态运行类 _1.3
方便一些初学java同学不用每次手动进入cmd里编译运行代码..有eclipse等集成环境的另当别论.
1.codeFactory: Java代码生成,依赖rapid-generator.4.0.6.jar, 支持自定义模板生成代码, 弱业务下完全解放体力劳动. 2.ssm模板实现:pojo,dao,daoimpl,service,serviceimpl,controller,各mapper.xml 代码自动生成, 3....
Java语言-动态编译代码并热加载类,js热加载
wsdl生成java代码的工具,运行wsdl2java.cmd ,可根据代码的实际需求修改成路径, wsdl生成java代码的工具,运行wsdl2java.cmd ,可根据代码的实际需求修改成路径
有了此工具,当偶然有个想法想测验、实现时,无需开电脑直接在手机上即个录入java代码并编译运行
java代码命令行编译在手机上运行的示例。 chcp 65001 javac -encoding utf-8 ./org/test/TestJava.java dx --dex --output =D:\pro\TestJava.dex .\org\test\TestJava.class
java 代码,老师给的,每个都能运行。包括串等基本知识,及类,线程,JFRAME,数据库连接等
影响java的运行效率的几点注意事项,在开发中使用可使程序运行的的更稳定
linux+python+appium运行java代码dmeo
这意味着,开发者编写的Java代码可以成为iOS应用程序的一部分,且无需对生成的文件进行编辑。 J2ObjC 支持大多数 Java 语言和运行环境的客户端应用特性,包括异常、内部类和匿名类、泛型、线程和反射,也支持 JUnit...
Java源代码,包含了所有以java开头的包
Java五子棋算法和代码,新手java五子棋完整代码【完美运行】 用Java编写的五子棋,完美可以运行。对初学者很有参考价值 Java五子棋算法和代码,新手java五子棋完整代码
优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。养成好的代码编写习惯非常重要,...
Metrics是一个java库,能够为你提供无与伦比的代码运行洞察功能。 它是由yammer开发的,用于检测jvm上后端服务的运行状况。Metrics提供了一个强大的工具集,用于度量你的生产环境上关键组件的行为。 Metrics提供了一...
java图形界雷霆飞机射击大战小游戏源代码(可直接运行).7zjava图形界雷霆飞机射击大战小游戏源代码(可直接运行).7zjava图形界雷霆飞机射击大战小游戏源代码(可直接运行).7zjava图形界雷霆飞机射击大战小游戏源...
java基础学习的源代码,能够帮助我们更加理解java的多态、封装、接口等