所以我对eclipse有一些刷新问题。我不确定这是Java问题还是Eclipse问题。
我正在尝试创建.java文件,然后我尝试实例化该类型的对象,并运行我在该类中定义的特定方法。
我用来创建类classname
的源文件并运行方法method
的代码:
Class cl = Class.forName(classname);
java.lang.reflect.Constructor co = cl.getConstructor();
cl.getMethod(method).invoke(co.newInstance());
当我创建.java文件(“动态”类/代码)时,我的代码抛出ClassNotFoundException。如果我右键单击我的项目并点击刷新,则会显示.java,创建一个.class,我的代码运行正常。显然这是问题,因为我试图一次性完成这一切,显然不得不刷新我的项目包是一个问题。
有什么方法吗?
答案 0 :(得分:1)
您需要(至少在概念上)将执行环境与构建环境分开。如果你的程序的目的是创建一个Java源文件,编译它,然后在同一个运行时中使用它,你需要找到一种方法来编程,与Eclipse分离。如果您的目标是始终以与Eclipse相关的方式运行程序,那么最好制作Eclipse插件。
要在一个Java运行时中完成所有操作,您需要use the JDK tools to invoke the compiler然后use a custom classloader来加载结果。
答案 1 :(得分:0)
如果您动态创建Java文件,则可能需要先调用javac
命令进行编译,然后才能执行代码。您可以使用Runtime.exec(..)以编程方式调用javac
命令。
答案 2 :(得分:0)
在Eclipse环境中,当您进行更改并且IDE不接受或识别它们时,您应该执行Refresh,并且还应该转到Project - >清洁和清洁该项目及其所依赖的所有项目。清洁通常会解决问题。
答案 3 :(得分:0)
您应该查看Codehaus JANINO项目。 http://docs.codehaus.org/display/JANINO/Home
我之前在一个拥有大量动态生成和注册类的项目中使用过它。
以下是项目网站摘录的一部分。
Janino是一款超小型超高速Java™编译器。它不仅可以将一组源文件编译为一组类文件(如JAVAC工具),还可以在内存中编译Java™表达式,块,类主体或源文件,加载字节码并直接在相同的JVM。