1

ストリームからオブジェクトを読み取るときの Java ClassNotFoundExceptionの拡張として

サーバーが .java ファイルを受信し、コンパイルできるようにする機能を追加しました。ただし、私はまだ同じ ClassNotFoundException を取得しています。objectInputStream からオブジェクトを読み取るために、サーバーがコンパイルしたクラスを認識して使用するにはどうすればよいですか?

serverSide で .java を読み取ってコンパイルするコード:

    private void doNewWorkUnitDefinition(Object object) {
    NewWorkUnitDefinition newWorkUnitDefinition = (NewWorkUnitDefinition)object;
    byte[] bytes = newWorkUnitDefinition.getBytes();
    String name = newWorkUnitDefinition.getName();

    if (isClient) 
        client.gotNewWorkUnitDefinition(bytes, name);
    else {
        String executionPath = System.getProperty("user.dir");
        File file = new File(executionPath, name);
        try {
            FileOutputStream fileOut = new FileOutputStream(file);
            fileOut.write(bytes);
            fileOut.close();
            System.out.println("Just wrote a file to: " + file.getAbsolutePath());

            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
            compiler.run(System.in, System.out, System.err, file.getAbsolutePath());

            ClassLoader cl_old = Thread.currentThread().getContextClassLoader();
            ClassLoader cl_new = new URLClassLoader(new URL[] { file
                    .getParentFile().toURI().toURL() }, cl_old);
            System.out.println("WorkUnitFile: " + file.getAbsolutePath());
            Class compiledClass = cl_new.loadClass(file.getName()
                    .replace(".java", ""));
            this.

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

2 に答える 2

0

私が過去に行ったことは、現在のクラスローダーのdefineClassメソッドを呼び出してクラスをロードすることです(リフレクションを使用)

http://sourceforge.net/projects/essence/files/Essence%20Java%20Config.%20Files/Essence%20JCF%201.02/

于 2012-05-07T12:52:22.143 に答える