【问题标题】:Unable to load main class using servlet无法使用 servlet 加载主类
【发布时间】:2015-02-16 10:09:17
【问题描述】:

我在 stackoverflow 上找到了这段代码,但回复无法解决问题。我正在创建一个基于 Web 的编译器,其中使用“name”字符串获取 java 文件名,使用“text”字符串获取代码。我正在使用 Runtime.getRuntime().exec() 编译和执行代码。程序的输出将在 routput 字符串中读取,错误流将在 rerror 字符串中读取。现在 routput 字符串显示为空,但显示错误字符串:Could not find or load main class C:\Users\NIHAR\workspace2\MyFirstJavaProgram11.class。我什至尝试在运行命令中删除“.class”扩展名。请告诉我如何获取输出并使用 servlet 显示它。

package Org.ServletEx.Test;



import java.io.IOException;
import java.io.*;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FileCreater
 */
@WebServlet("/ServletExample")
public class ServletExample extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public ServletExample() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */


protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Database Result";
    String docType = "<!doctype html public\"-//w3c//dt html 4.0"
            + "transitional//en\">\n";
    String name = request.getParameter("text1");

    String text = request.getParameter("TEXTAREA1");

    // String file = application.getRealPath("/new10.java");
    // String file = "JCQProject\\src\\"+name+".java";
    // String file = System.getProperty("user.home")+"\\Desktop\\"
    // +name+".java";

    try {

        File file = new File(
                "C:\\Users\\NIHAR\\workspace2\\" + name
                        + ".java");

        if (file.delete()) {
            System.out.println(file.getName() + " is deleted!");
        } else {
            System.out.println("Delete operation is failed.");
        }

    } catch (Exception e) {

        e.printStackTrace();

    }

    String file = "C:\\Users\\NIHAR\\workspace2\\"
            + name + ".java";
    FileWriter filewriter = new FileWriter(file, true);
    filewriter.write(text);

    filewriter.close();

    try {
               // Process d = Runtime.getRuntime().exec(" set path=\"C:\\Program Files\\Java\\jdk1.7.0_03\\bin\"");
Process p = Runtime.getRuntime().exec(
                "javac  C:\\Users\\NIHAR\\workspace2\\"
                        + name + ".java");
Process c = Runtime.getRuntime().exec("java  C:\\Users\\NIHAR\\workspace2\\" + name);

BufferedReader stdInput = new BufferedReader(new InputStreamReader(c.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(c.getErrorStream()));

String routput="";
while ((routput = stdInput.readLine()) != null) {
           //process readLine 
   response.getWriter().println(routput);
        }
 response.getWriter().println(routput);


    String rerror;
while ((rerror = stdError.readLine()) != null) {
           //process readLine 
   response.getWriter().println(rerror);
        }
 response.getWriter().println(rerror);
    }
    catch (Exception e) {
        System.out.println(e.toString());
        e.printStackTrace();
    }


}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
    // TODO Auto-generated method stub
    }

}

【问题讨论】:

  • 我认为您正在尝试将程序作为标准 Java 应用程序而不是 Web 应用程序执行。这就是为什么 java 编译器会查找 main 方法但没有找到它的原因。您知道如何运行 Web 应用程序吗?大多数人以tomcat开头。
  • 我将其作为 Web 应用程序执行。我在 netbeans 中创建了一个动态 Web 项目,它使用 GlassFish Server。我正在使用 Google chrome 运行项目

标签: java servlets output runtime.exec online-compilation


【解决方案1】:

在您的代码中有些东西不正确,然后首先编辑您的代码 while ((routput = stdInput.readLine()) != null) { 和 while ((rerror = stdError.readLine()) != null) {

你在null的地方写“-1”并编译运行程序

在对程序进行此更正后,您会遇到错误,例如:无法找到或加载主类 然后你的程序不加载 jre 然后在程序中设置你的 jre。

【讨论】:

  • 如果我写“-1”代替null,它会进入无限循环
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2012-01-04
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多