簡體   English   中英

如何在Java程序中運行Java源代碼

[英]How to run Java source code within a Java program

我編寫了一些代碼來編譯Java源代碼。 然后它生成.class文件。 問題是我該如何運行它?

例如,我對正在設置的程序和類的名稱沒問題,我使用了prog p = new prog(),但是,在這種情況下,類文件在編譯之前還不存在。 不太確定該怎么做。 有人可以給我一個建議嗎?

順便說一句,這個類看起來像這樣:

public void compile{
  JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();  
  int compilationResult = compiler.run(null, null, null, fileToCompile);  
}

public void run(){
  Prog prog = new Prog();
  prog.run();
}

如果您只想運行它,可以使用Runtime.execProcessBuilder啟動Java進程。 這些將創建一個單獨的java進程來運行您的java程序。 這更有可能是你想要的。 你基本上可以做的是:

>java someClass

從您的申請中。 此鏈接可能有所幫助。

如果你想實際加載類文件並在你當前的應用程序中使用它,我認為有點像這樣 ,或動態加載Java類應該有所幫助。 基本上(直接來自鏈接,稍加修改):

public class MainClass {

  public static void main(String[] args){

    ClassLoader classLoader = MainClass.class.getClassLoader();

    try {
        Class aClass = classLoader.loadClass("MyClass");
        System.out.println("aClass.getName() = " + aClass.getName());
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

}

加載類后,你有一個Class對象,你可以通過調用aClass.newInstance()創建一個由aClass表示的類的實例,這就像

MyClass newObj = new MyClass()

或者您可以使用Class對象公開的任何其他方法。

正如davmac所指出的,上面的代碼示例假定您正在加載的代碼位於應用程序類路徑中。 如果要運行的類文件不在類路徑中,則可能需要查看URLClassLoader

通過URLClassLoader加載它。

File root = new File("/java"); // The package root.
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
Class<?> cls = Class.forName("test.Test", true, classLoader); // Assuming package test and class Test.
Object instance = cls.newInstance();
// ...

也可以看看:

你需要創建一個類加載器( URLClassLoader可能會好),它將加載剛編譯的類文件。 (因此對於URLClassLoader ,編譯輸出路徑應該是其中一個URL)。

然后,使用類加載器加載編譯的類,並使用反射執行它。

Class c = cl.loadClass("ClassName");

...等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM