如何在java中运行String的哪些内容代码

时间:2017-10-11 11:28:34

标签: java

问题

我正在尝试运行一个包含在字符串中的java程序,但它给了我一个运行时异常,即ClassNotFoundException类的Test

错误

  

线程“main”中的异常java.lang.ClassNotFoundException:测试时间   java.net.URLClassLoader.findClass(URLClassLoader.java:381)at   java.lang.ClassLoader.loadClass(ClassLoader.java:424)at   sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)

代码

public class CompileString {
public static void main(String[] args) throws Exception {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
String program = "class Test{" + "   public static void main (String [] args){"
    + "      System.out.println (\"Hello, World\");"
    + "      System.out.println (args.length);" + "   }" + "}";

Iterable<? extends JavaFileObject> fileObjects;
fileObjects = getJavaSourceFromString(program);

compiler.getTask(null, null, null, null, null, fileObjects).call();

Class<?> clazz = Class.forName("Test");
Method m = clazz.getMethod("main", new Class[] { String[].class });
Object[] _args = new Object[] { new String[0] };
m.invoke(null, _args);
}

static Iterable<JavaSourceFromString> getJavaSourceFromString(String code) {
final JavaSourceFromString jsfs;
jsfs = new JavaSourceFromString("code", code);
return new Iterable<JavaSourceFromString>() {
  public Iterator<JavaSourceFromString> iterator() {
    return new Iterator<JavaSourceFromString>() {
      boolean isNext = true;

      public boolean hasNext() {
        return isNext;
      }

      public JavaSourceFromString next() {
        if (!isNext)
          throw new NoSuchElementException();
        isNext = false;
        return jsfs;
      }

      public void remove() {
        throw new UnsupportedOperationException();
      }
    };
  }
};

另一堂课:

class JavaSourceFromString extends SimpleJavaFileObject {
final String code;

    JavaSourceFromString(String name, String code) {
        super(URI.create("string:///" + name.replace('.', '/') + 
        Kind.SOURCE.extension), Kind.SOURCE);
        this.code = code;
    }

    public CharSequence getCharContent(boolean ignoreEncodingErrors) {
        return code;
    } 
}

如何解决这个问题,请帮帮我?

如果我尝试更改String中的任何代码,这会导致编译错误并且意味着一切正常,那么为什么它找不到Test类,这是错误?

  

/Code.java:1:错误:';'预期   class Test {public static void main(String [] args){System.out.println&gt;(“Hello,World”)System.out.println(args.length); }}

如果我尝试从命令提示符执行它将正常工作..那么我使用Eclipse的IDE问题是什么?

hear is image of eclipse .class文件在运行时创建,但为什么我无法访问,有任何其他方式请告诉我。 我无法访问Test.class,因为它创建了在创建其他.class文件的同一文件夹中创建项目的外部 here is working directory image

1 个答案:

答案 0 :(得分:0)

我要做的第一件事就是将Class.forName("Test")调用放在try{ } catch(ClassNotFoundException cnfe) {}块中以处理潜在的异常。

接下来,您可能需要查看提供的示例here, compiling Java programmes from memory

特别要检查编译器上的call()方法是否返回true。如果没有,则永远不会创建Test类,因此当您尝试调用它时将无法找到它。