如何编译和运行在TextArea中输入的字符串?

时间:2017-05-09 22:39:39

标签: java compilation

我的目的是要求用户在TextArea中写下一些代码,然后查看该代码是否编译,如果是,则将结果打印到另一个TextArea,它就像一个控制台。

编辑:通过在线编译器解决这个问题是首要任务。

为了做到这一点,我尝试使用在线编译器(即compilerjava.net)并使用了库HtmlUnit,但是库中出现了很多错误,特别是在阅读JavaScript代码并返回我的页面时'警告'这增加了编译和运行时间约20秒。如果有人试图修复它,我会留下下面的代码并附上解释。

我也尝试使用JavaCompiler接口,该接口确实成功编译,但在我提供.java文件的确切位置的条件下,这是我必须使用我获得的信息创建的来自TextArea。再一次,死路一条。

我决定回到在线编译器,因为如果我能设法从编译的程序中返回数据,我就设置了。唯一的问题是我还没有找到一个允许用户通过Java代码访问其字段的在线编译器(因为它太具体了)。如果有人能提供从在线编译器发送和检索数据的方法,我将不胜感激。

以下是在网站' compilerjava.net'上使用HtmlUnit库的代码。它离工作非常接近,我只有两个问题就是,

1)运行时间过长。

2)我无法访问代码的控制台输出。推理是,当你点击“编译”时,输出文本区域的文本变成"执行"。几秒钟后,它变成代码的输出。当我尝试访问它时,我检索的数据总是"执行"而不是所需的输出。这是代码;

public class Test {
public static void main(String[] args) {
    try {
        // Prevents the program to print thousands of warning codes.
        java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);
        java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);

        // Initializes the web client and yet again stops some warning codes.
        WebClient webClient = new WebClient( BrowserVersion.CHROME);
        webClient.getOptions().setThrowExceptionOnFailingStatusCode( false);
        webClient.getOptions().setThrowExceptionOnScriptError( false);
        webClient.getOptions().setJavaScriptEnabled( true);
        webClient.getOptions().setCssEnabled( true);

        // Gets the html page, which is the online compiler I'm using.
        HtmlPage page = webClient.getPage("https://www.compilejava.net/");

        // Succesfully finds the form which has the required buttons etc.
        List<HtmlForm> forms = page.getForms();
        HtmlForm form = forms.get( 0);

        // Finds the textarea which will hold the code.
        HtmlTextArea textArea = form.getTextAreaByName( "code");
        // Finds the textarea which will hold the result of the compilation.
        HtmlTextArea resultArea = page.getHtmlElementById( "execsout");

        // Finds the compile button.
        HtmlButtonInput button = form.getInputByName( "compile");
        System.out.println( button.getValueAttribute());

        // Simple code to run.
        textArea.setText( "public class HelloWorld\n" +
                "{\n" +
                "  // arguments are passed using the text field below this editor\n" +
                "  public static void main(String[] args)\n" +
                "  {\n" +
                "    System.out.print( \"Hello\");\n" +
                "  }\n" +
                "}");

        // Compiles.
        button.click();

        // Result of the compilation.
        System.out.println( resultArea.getText());

    } catch ( Exception e) {
        e.printStackTrace();
    }
}
}

正如我所说,最终代码System.out.println( resultArea.getText());打印出&#34;执行&#34;,这意味着我已成功通过代码按下网页上的编译按钮。

所以在这长篇文章之后,我要么找一种方法来修复我提供的代码,这是非常接近我的答案但不完全,或者只是一个完全不同的解决问题的方法我在开头提出。

P.S。 Maven是最后的希望。

0 个答案:

没有答案