我是靠谱客的博主 爱听歌画板,最近开发中收集的这篇文章主要介绍Java动态编译,运行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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动态编译,运行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部