2

現在アクティブなファイルを実行する Eclipse プラグインを開発しています。私はこの方法を使用しています

public static void runIt(String fileToCompile,String packageName) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException, SecurityException, NoSuchMethodException
    {

        File file = new File(fileToCompile);

        try
        {
            // Convert File to a URL
            URL url = file.toURL(); // file:/classes/demo
            URL[] urls = new URL[] { url };

            // Create a new class loader with the directory
            ClassLoader loader = new URLClassLoader(urls);

            ClassLoader classLoader = Thread.currentThread()
                    .getContextClassLoader();

            Class<?> thisClass = classLoader.loadClass("NewFile");
            Object newClassAInstance = thisClass.newInstance();
            Class params[] = new Class[1];
            params[0]=String[].class;
            Object paramsObj[] = {};
            String m=null;
            Object instance = thisClass.newInstance();
            Method thisMethod = thisClass.getDeclaredMethod("main", params);
            String methodParameter = "a quick brown fox";
            // run the testAdd() method on the instance:
            System.out.println((String)thisMethod.invoke(instance,(Object)m));



        }
        catch (MalformedURLException e)
        {
        }

    }

しかし、「Eclipseアプリケーションを起動」[別のEclipseウィンドウでプラグインを実行]すると機能しますが、プラグインをEclipseにインストールすると機能しなくなります。問題はこの行にあります

Class thisClass = classLoader.loadClass("NewFile"); 実行するクラスが見つかりません

4

1 に答える 1

0

プラグインとして実行する場合、コンテキスト クラスローダーは異なると思います。あなたの行で得られたクラスローダー階層を見てください:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

2 つのランタイム コンテキストで異なるかどうかを確認します。プラグインを段階的にデバッグできる場合は、利用可能なオブジェクトを探索し、それらの中から動的クラスで機能するクラスローダーを見つけることができるはずです。

URLClassLoader(コードで放棄されたように見える) を使用する場合は、次のように親を指定する必要があります。

new URLClassLoader(urls, this.getClass().getClassLoader())
于 2013-06-23T05:29:14.990 に答える