簡體   English   中英

從Java中的字符串執行代碼

[英]Execute code from a String in Java

我已經進行了一些搜索,似乎有些人問了類似的問題,但這些問題都不是我想要的(有些人提出了一些腳本方面的建議,但我對自己的工作沒有足夠的了解,我只想在可能的情況下使用Java)。

我需要能夠從字符串中讀取代碼行,然后在Java中執行它們(如下所示):

String code = "System.out.println(\"Test code\");";

許多閱讀這篇文章的人可能會問你為什么不執行

System.out.println("Test code");

但是我想執行Strings中的println方法以外的代碼。

是否可以單獨使用Java執行代碼,如果可以,它將如何編譯?

您無法像我想象的那樣輕松地做到這一點。 您所描述的是動態語言中可能會看到的東西。 Java絕不是一種動態語言-這是其特性的一部分。

如果您的類路徑中包含tools.jar ,則可以從Java程序中編譯Java代碼:

com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
String[] options = new String[] {
    "-classpath", classpath, "-d", outputDir, filename
};
javac.compile(options);

從那里,您可以與類加載器搏斗,加載已編譯的類,然后運行它。

但是,這不是使用Java的簡單方法或主流方法,通常人們不這樣做,因為它既不是一種好的做法,也不是必需的。 這是一項安全功能,編譯后您將無法運行用戶提供的代碼。


如果您想使用更動態的語言,請在Java生態系統中查看Groovy。


另外,您可以運行用戶提供的Javascript,並使用Java Scripting API來控制對Java程序數據的訪問。

有可能,但是不能照這樣執行Java代碼,它無法解釋,因此需要首先進行編譯。 因此,您需要將字符串放入另一個Java文件的主函數中,然后對其進行編譯並最終運行它。

您可能需要這樣: http : //docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html

如果我理解正確,您想在Java控制台中輸入一個字符串。 然后應該在外部程序中神奇地輸入該給定的字符串。 如果我不正確,將再次刪除該答案。

public class Test {

    public static void main(String[] args) throws IOException, ClassNotFoundException, Exception {
    Robot robot = new Robot();
    String text = "Hello";
    File file = File.createTempFile("tmp", ".txt");

    if (Desktop.isDesktopSupported()) {
        Desktop.getDesktop().edit(file);
        Thread.sleep(1000);
    } else {
        // dunno, up to you to handle this
    }
    for (char c : text.toCharArray()) {
        int keyEvent = KeyEvent.getExtendedKeyCodeForChar(c);
        robot.keyPress(keyEvent);
        Thread.sleep(500);
    }
    }
}

如果運行此基本代碼,則應打開記事本,並輸入Hello文本。 那就是我為你准備的。 現在,您需要執行的操作是使用Scanner從控制台獲取字符串,而不是從靜態字符串獲取字符串。

暫無
暫無

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

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