我是靠谱客的博主 爱听歌画板,这篇文章主要介绍Java动态编译,运行,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package st01; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import javax.tools.JavaCompiler; import javax.tools.ToolProvider; /** * 动态编译 * @author asus69 * */ public class DynamicCompiler { public static void main(String[] args) throws IOException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException, NoSuchMethodException, SecurityException { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); int res = compiler.run(null,null, null, "H://myjava/HelloWorld.java"); System.out.println(res==0?"编译成功":"编译失败"); //运行 //方式一:命令方式 Process process = Runtime.getRuntime().exec("java -cp H://myjava HelloWorld"); InputStream in = process.getInputStream(); InputStreamReader isr=new InputStreamReader(in); //用缓冲器读行 BufferedReader br=new BufferedReader(isr); String line=null; //直到读完为止 while((line=br.readLine())!=null) { System.out.println(line); } //方式二:使用类加载器加载 URL[] urls = {new URL("file:/"+"H://myjava/")}; URLClassLoader loader = new URLClassLoader(urls); Class c =loader.loadClass("HelloWorld"); Method method = c.getMethod("main",String[].class); method.invoke(null,(Object)new String[]{}); } }

温馨提示:运行可能会报错,将Java文件编译成class文件时用到JavaCompiler报空指针异常。

解决方法:把jre换成jdk即可(如果还不行,在确认正确引入jdk后再看看是不是jdk版本过低,jdk1.8肯定是没问题的)

所以,我们平时在开发平台(如Eclipse)里引用jdk还是jre 在这里已经体现的很明显了。jdk是开发用的,jre是运行用的,jre里面的东西毕竟没有jdk全,所以做开发,尽量引用jdk而不是jre,不然出问题还找不到方向。

解决方案来自:https://blog.csdn.net/superit401/article/details/78524383

最后

以上就是爱听歌画板最近收集整理的关于Java动态编译,运行的全部内容,更多相关Java动态编译内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部