当前位置:编程学习 > JAVA >>

求大神,假如一个字符串里面是java代码,怎么得到这些代码的运行结果?

RT,假设运行的最后结果都是输出某个结果,应该怎么做呢? --------------------编程问答-------------------- String a="aaaaaaaa"+java+"aaaaaaa"; --------------------编程问答--------------------
引用 1 楼 xiaxiaolin_yun 的回复:
String a="aaaaaaaa"+java+"aaaaaaa";

啊?求解啊,好急! --------------------编程问答--------------------
引用 2 楼 xiaoj258421566 的回复:
Quote: 引用 1 楼 xiaxiaolin_yun 的回复:

String a="aaaaaaaa"+java+"aaaaaaa";

啊?求解啊,好急!


不想的实现什么样子的?不是很明白。 --------------------编程问答--------------------
引用 3 楼 xiaxiaolin_yun 的回复:
Quote: 引用 2 楼 xiaoj258421566 的回复:

Quote: 引用 1 楼 xiaxiaolin_yun 的回复:

String a="aaaaaaaa"+java+"aaaaaaa";

啊?求解啊,好急!


不想的实现什么样子的?不是很明白。

要做一个在线考试系统,要自动批改编程题,在页面获得学生输入的答案(代码)放到一个字符串,怎么运行这个字符串里面的代码,与正确答案比较 --------------------编程问答-------------------- 这样可以么?绕开编译器? --------------------编程问答-------------------- 那你为什么要放在字符串里面,直接用Request.getParameten()这个不就好了 --------------------编程问答-------------------- Request.getParameter() --------------------编程问答-------------------- 1. 取得这些代码
2. 编译
3. 使用类加载器加载这些编译好的类进入内存
4. 运行刚加载的类

可以参考这里:
java: 在程序中编译和执行java程序: http://www.cppblog.com/biao/archive/2009/06/12/87498.html
Java:类的动态加载: http://www.cppblog.com/biao/archive/2010/05/19/115848.html

理解上面这两个例子,就可以解决问题了. --------------------编程问答-------------------- 1. 取得这些代码
2. 发送到服务器
3. 编译
4. 使用类加载器加载这些编译好的类进入内存
5. 运行刚加载的类
6. 返回代码执行的结果或者编译错误

Client与Server通讯使用AJAX

--------------------编程问答-------------------- 用beanshell试试吧 --------------------编程问答-------------------- 一个java工程或者一台机器肯定是实现不了了。要知道一个工程启动之前所有需要运行的代码全部都已经是编译完毕的。所以不能动态运行没编译的代码。你的问题的焦点就是在java代码的编译上边。
试着一个工程编译代码(比如Batch)。然后另一个工程执行吧。
--------------------编程问答-------------------- 个人觉得是Runtime和Process来处理吧。。 --------------------编程问答-------------------- 1.首先是用IO将字符串中的内容输出到硬盘的某个文件中,文件用File来操作

2.Runtime.exec("cmd javac d:/xxx.java");

3.Runtime.exec("cmd java xxx");


不过我觉得反射的话应该更好,不过鄙人对反射不怎么熟悉。。 --------------------编程问答--------------------
引用 11 楼 andymu077 的回复:
一个java工程或者一台机器肯定是实现不了了。要知道一个工程启动之前所有需要运行的代码全部都已经是编译完毕的。所以不能动态运行没编译的代码。你的问题的焦点就是在java代码的编译上边。
试着一个工程编译代码(比如Batch)。然后另一个工程执行吧。

楼主的这个要求绝对没有问题,动态加载编译好的class,然后使用这个class.
因为这样的事我以前在实际工程中就用了,而且很多开发工具的热部署也是这么做的。 --------------------编程问答--------------------
引用 14 楼 Inhibitory 的回复:
Quote: 引用 11 楼 andymu077 的回复:

一个java工程或者一台机器肯定是实现不了了。要知道一个工程启动之前所有需要运行的代码全部都已经是编译完毕的。所以不能动态运行没编译的代码。你的问题的焦点就是在java代码的编译上边。
试着一个工程编译代码(比如Batch)。然后另一个工程执行吧。

楼主的这个要求绝对没有问题,动态加载编译好的class,然后使用这个class.
因为这样的事我以前在实际工程中就用了,而且很多开发工具的热部署也是这么做的。


问题是他现在要加载的东西,还没有编译生成class文件。执行的时候只有java源码。主要是在加载之前如何自动生成某个要加载的java文件的class文件。 --------------------编程问答--------------------
引用 15 楼 andymu077 的回复:
Quote: 引用 14 楼 Inhibitory 的回复:

Quote: 引用 11 楼 andymu077 的回复:

一个java工程或者一台机器肯定是实现不了了。要知道一个工程启动之前所有需要运行的代码全部都已经是编译完毕的。所以不能动态运行没编译的代码。你的问题的焦点就是在java代码的编译上边。
试着一个工程编译代码(比如Batch)。然后另一个工程执行吧。

楼主的这个要求绝对没有问题,动态加载编译好的class,然后使用这个class.
因为这样的事我以前在实际工程中就用了,而且很多开发工具的热部署也是这么做的。


问题是他现在要加载的东西,还没有编译生成class文件。执行的时候只有java源码。主要是在加载之前如何自动生成某个要加载的java文件的class文件。

看我上面给的两个例子的连接就明白了。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 这类考试系统 在学校的时候搞过 --------------------编程问答-------------------- 只能编译 重定向输入 然后比较输出
和ACM OJ类似 --------------------编程问答-------------------- http://stackoverflow.com/questions/12173294/compiling-fully-in-memory-with-javax-tools-javacompiler --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 啊,我想到了一个办法,不过我不太清楚是否能行。
1,先把获得的代码写入一个java文件
2,调用一个shell用来编译该java文件
3,使用代理创建该类 --------------------编程问答-------------------- 用JavaCompiler
http://docs.oracle.com/javase/7/docs/api/index.html?javax/tools/JavaCompiler.html

编译完用ClassLoader加载。

注意必要的ClassLoader隔离。 --------------------编程问答--------------------
引用 8 楼 Inhibitory 的回复:
1. 取得这些代码
2. 编译
3. 使用类加载器加载这些编译好的类进入内存
4. 运行刚加载的类

可以参考这里:
java: 在程序中编译和执行java程序: http://www.cppblog.com/biao/archive/2009/06/12/87498.html
Java:类的动态加载: http://www.cppblog.com/biao/archive/2010/05/19/115848.html

理解上面这两个例子,就可以解决问题了.

还是动态语言方便,直接eval(str)就可以了 --------------------编程问答--------------------
引用 19 楼 mopishv0 的回复:
只能编译 重定向输入 然后比较输出
和ACM OJ类似

就是这种。可以去参考http://hustoj.sinaapp.com/这个OJ --------------------编程问答--------------------
引用 8 楼 Inhibitory 的回复:
1. 取得这些代码
2. 编译
3. 使用类加载器加载这些编译好的类进入内存
4. 运行刚加载的类

可以参考这里:
java: 在程序中编译和执行java程序: http://www.cppblog.com/biao/archive/2009/06/12/87498.html
Java:类的动态加载: http://www.cppblog.com/biao/archive/2010/05/19/115848.html

理解上面这两个例子,就可以解决问题了.

学习这个看看! --------------------编程问答-------------------- 刚做完在线考试系统,来图来真相 --------------------编程问答--------------------
引用 13 楼 cowfishy 的回复:
1.首先是用IO将字符串中的内容输出到硬盘的某个文件中,文件用File来操作

2.Runtime.exec("cmd javac d:/xxx.java");

3.Runtime.exec("cmd java xxx");


不过我觉得反射的话应该更好,不过鄙人对反射不怎么熟悉。。

这个方法好。。。 --------------------编程问答-------------------- 听各位大神所讲真是受益匪浅啊 --------------------编程问答-------------------- 编译 -> 运行 -> 输入输出重定向
这些东西都比较简单,关键的问题是如何防御程序的非正常行为。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,