0 votes

Java BrowserLauncher lance une InvocationTargetException

Je suis en train d'utiliser la bibliothèque BrowserLauncher2 pour ouvrir le navigateur web par défaut de l'utilisateur à partir de mon application Swing, mais elle lance une exception très confuse :

public static void openURL(String url) {
        try{
            BrowserLauncher launcher = new BrowserLauncher();
            launcher.openURLinBrowser(url);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

Exception :

edu.stanford.ejalbert.exception.BrowserLaunchingExecutionException: java.lang.reflect.InvocationTargetException
    at edu.stanford.ejalbert.launching.macos.MacOs3_1BrowserLaunching.openUrl(MacOs3_1BrowserLaunching.java:61)
    at edu.stanford.ejalbert.BrowserLauncherRunner.run(BrowserLauncherRunner.java:136)
    at java.lang.Thread.run(Thread.java:613)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at edu.stanford.ejalbert.launching.macos.MacOs3_1BrowserLaunching.openUrl(MacOs3_1BrowserLaunching.java:58)
    ... 2 more
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission canOpenURLs)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
    at java.security.AccessController.checkPermission(AccessController.java:427)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at com.apple.eio.FileManager.openURL(FileManager.java:229)
    at com.apple.mrj.MRJPriv.openURL(MRJPriv.java:255)
    at com.apple.mrj.MRJFileUtils.openURL(MRJFileUtils.java:206)
    ... 7 more

1voto

Tom Hawtin - tackline Points 82671

Vous exécutez votre application avec un SecurityManager défini. Certains codes dans le AccessControlContext (alias acc) n'ont pas les autorisations requises. Probablement ce code est le code de votre application.

1voto

Steve Reed Points 1610

Une InvocationTargetException enveloppe toujours une autre exception qui a été causée lors de l'invocation d'une méthode ou d'un constructeur via la réflexion. Pour résoudre votre problème, vous devez examiner l'exception en dessous, l'IllegalAccessException qui, comme le souligne Tom Hawtin, est lancée à cause du SecurityManager.

0voto

JRL Points 36674

Tout d'abord, BrowserLauncher ne prend pas en charge Mac OS < 10.2.

Aussi, sur MacOS, BrowserLauncher lance le navigateur par défaut, cibler un navigateur spécifique n'est pas possible. Vous pouvez essayer de changer le navigateur par défaut sur votre ordinateur pour voir si cela aide. Apparemment, cela peut être fait en suivant les étapes suivantes: Commencez par Safari -> Sélectionnez Préférences -> dans l'onglet Général, trouvez le navigateur web par défaut.

0voto

Stephen Harmon Points 631

J'obtenais des AccessControlExceptions avec BrowserLauncher2 via un de mes applets. Votre situation pourrait être similaire, car vous exécutez votre appli avec un SecurityManager.

J'ai résolu mon problème en signant le jar de BrowserLauncher2 avec mon certificat. Si votre utilisateur accepte votre certificat, BrowserLauncher devrait avoir les permissions nécessaires pour faire son travail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X