gpt4 book ai didi

java - 想要从struts2网页动态执行java类(包含main)

转载 作者:行者123 更新时间:2023-12-01 04:47:22 24 4
gpt4 key购买 nike

我想在Struts2.0中创建一个网页,其中包含一个文本区域、一个属性字段和提交按钮。用户将在此文本区域中输入 java 代码,我的代码将对其进行编译并执行,并将在我的属性字段中给出此代码的结果...上面的代码在独立应用程序中运行良好。但它在我的网络应用程序中没有显示任何内容。请任何人都可以解决这个问题...提前致谢。

package org.controller;

import com.opensymphony.xwork2.ActionSupport;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStreamReader;



public class JCompilerAction extends ActionSupport
{


String program;

String MSg;
public JCompilerAction() {
}
public String getProgram() {
return program;
}
public void setProgram(String program) {
this.program = program;
}
public String getMSg() {
return MSg;
}
public void setMSg(String MSg) {
this.MSg = MSg;
}
public String Compile() {
try {
byte[] bFile = program.getBytes();
File f = new File("D:/nullprog.java");
FileOutputStream fileOuputStream = new FileOutputStream(f);
fileOuputStream.write(bFile);
fileOuputStream.close();
Process p1 = Runtime.getRuntime().exec("javac D:/nullprog.java");
BufferedReader in = new BufferedReader(new InputStreamReader(p1.getErrorStream()));
String line = null;
boolean isError = false;
while ((line = in.readLine()) != null) {
MSg = line;
isError = true;
return SUCCESS;
}
p1.waitFor();
if (!isError)
{
Process p2 = Runtime.getRuntime().exec("cmd /c start nullprog");
BufferedReader in1 = new BufferedReader(new InputStreamReader(p2.getInputStream()));
String line1 = null;
while ((line1 = in1.readLine()) != null) {
MSg += line1;
}
return SUCCESS;
}
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public String execute() {
return SUCCESS;
}
}

最佳答案

下面是一个简单的程序,它首先编译代码然后执行它:

执行器.java

import java.lang.reflect.Method;

public class Executer {
public static void main(String args[]) {
try{
java.lang.Process p1 = Runtime.getRuntime().exec("javac MyClass.java");
p1.waitFor();
Class<?> c = Class.forName("MyClass");
Object obj = c.newInstance();
Method[] mArr = obj.getClass().getMethods();
for(Method m : mArr){
if(m.getName().equalsIgnoreCase("main")){
m.invoke(obj, new Object[]{new String[]{}});
}
}
} catch (Exception e){
e.printStackTrace();
}
}
}

MyClass.java

import javax.swing.JOptionPane;

public class MyClass {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hii");
}
}

为了简单起见,这两个类位于同一个包中。当我执行执行器类时,它首先编译MyClass.java,然后运行main方法。

如果您的要求是将Java文件放在项目之外的某个文件夹中,以加载编译器类文件,您需要按照this中所述进行操作回答。

关于java - 想要从struts2网页动态执行java类(包含main),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15607517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com