Class.forname()出错,如何动态载入一个类?
答案:1 悬赏:40 手机版
解决时间 2021-02-05 17:18
- 提问者网友:心牵心
- 2021-02-04 22:07
Class.forname()出错,如何动态载入一个类?
最佳答案
- 五星知识达人网友:鱼芗
- 2021-02-04 23:35
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); compiler.run(null,null,null,"-encoding","UTF-8","-d",bindir,srcpath); //通过反射提取代码中的信息。 Class cls = Class.forName(classname,true,ClassLoader.getSystemClassLoader()); cls.newInstance();Myeclipse报错:
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
我的做法是//获得代码中的类名 String classname=null; Pattern pat=Pattern.compile("public\\sclass\\s(\\w+)"); Matcher mat=pat.matcher(javaCode); if (mat.find()) { classname=mat.group(1); } //将String类型的代码转换成.java格式的文件,为下面编译分析做准备。 String currentdir=this.getClass().getResource("").getPath();//获得类所在路径。 String tempwspath=currentdir+classname+".java"; File tempwsfile=new File(tempwspath); try { FileWriter fw = new FileWriter(tempwsfile); BufferedWriter bw = new BufferedWriter(fw); bw.write(javaCode); bw.newLine(); bw.flush(); bw.close(); fw.close(); } catch(IOException e) { throw new ipenseeLogicExceptio("IOStreamException"); } //动态编译转换成.java格式的代码 String bindir=currentdir; String srcpath=tempwspath; JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); compiler.run(null,null,null,"-encoding","UTF-8","d",bindir,srcpath); //通过反射提取代码中的信息。 Class cls = Class.forName(classname);//这句出错了 目录结构在com.project.logic.serviceimpl包下。
.java文件和.class文件都在解析的类文件夹中,但是就是ClassNotFound
java.lang.ClassNotFoundException: helloworld
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
java.lang.ClassNotFoundException: com.project.logic.serviceimpl.helloworld
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
我的做法是//获得代码中的类名 String classname=null; Pattern pat=Pattern.compile("public\\sclass\\s(\\w+)"); Matcher mat=pat.matcher(javaCode); if (mat.find()) { classname=mat.group(1); } //将String类型的代码转换成.java格式的文件,为下面编译分析做准备。 String currentdir=this.getClass().getResource("").getPath();//获得类所在路径。 String tempwspath=currentdir+classname+".java"; File tempwsfile=new File(tempwspath); try { FileWriter fw = new FileWriter(tempwsfile); BufferedWriter bw = new BufferedWriter(fw); bw.write(javaCode); bw.newLine(); bw.flush(); bw.close(); fw.close(); } catch(IOException e) { throw new ipenseeLogicExceptio("IOStreamException"); } //动态编译转换成.java格式的代码 String bindir=currentdir; String srcpath=tempwspath; JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); compiler.run(null,null,null,"-encoding","UTF-8","d",bindir,srcpath); //通过反射提取代码中的信息。 Class cls = Class.forName(classname);//这句出错了 目录结构在com.project.logic.serviceimpl包下。
.java文件和.class文件都在解析的类文件夹中,但是就是ClassNotFound
java.lang.ClassNotFoundException: helloworld
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
java.lang.ClassNotFoundException: com.project.logic.serviceimpl.helloworld
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯