0

暗号化されたクラスをロードする独自のローダークラスを作成しようとしています。

loader(ClassLoader paramClassLoader, File paramFile)したがって、 を呼び出す構造もオーバーライドしますsuper(new URL[] { paramFile.toURI().toURL() }, paramClassLoader);

呼び出し「.toUrl()」は をスローする可能性があるMalformedURLExceptionため、次のコードをコンパイルすると...

public class loader extends URLClassLoader {
    public static void main(String[] args)throws Exception{
        Object localObject = 
            new loader(loader.class.getClassLoader(), 
                          new File(loader.class.getProtectionDomain().getCodeSource()
                              .getLocation().getPath())
                );
         (...)
    }

    private loader(ClassLoader paramClassLoader, File paramFile){   
        super(new URL[] { paramFile.toURI().toURL() }, paramClassLoader);

        if (paramClassLoader == null)
            throw new IllegalArgumentException("Error loading class");
    }
}

エラー:

loader.java:123: error: unreported exception MalformedURLException; must be caught or declared to be thrown
super(new URL[] { paramFile.toURI().toURL() }, paramClassLoader);

この例外をキャッチするにはどうすればよいですか? 「スーパーへの呼び出しはコンストラクターの最初のステートメントでなければならない」ため、try-catch-block は使用できません。

4

2 に答える 2

3

throws MalformedURLException をローダー コンストラクターに追加し、コードをメイン メソッドに try catch ブロックでラップするだけです。

public class loader extends URLClassLoader {

    public static void main(String[] args) throws Exception {
        try {
            Object localObject = new loader(loader.class.getClassLoader(),
                    new File(loader.class.getProtectionDomain().getCodeSource()
                            .getLocation().getPath()));
        } catch (MalformedURLException e) {
            // ..
        }
    }

    private loader(ClassLoader paramClassLoader, File paramFile)
            throws MalformedURLException {
        super(new URL[] { paramFile.toURI().toURL() }, paramClassLoader);

        if (paramClassLoader == null) {
            throw new IllegalArgumentException("Error loading class");
        }
    }
}
于 2013-07-24T09:29:20.550 に答える