Java BrowserLauncher, выбрасывающий InvocationTargetException - PullRequest
0 голосов
/ 07 апреля 2009

Я использую библиотеку BrowserLauncher2 для открытия веб-браузера пользователя по умолчанию из моего приложения Swing, но оно вызывает очень запутанное исключение:

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

Ответы [ 4 ]

1 голос
/ 07 апреля 2009

InvocationTargetException всегда переносит другое исключение, которое было вызвано при вызове метода или конструктора через отражение. Чтобы решить вашу проблему, вам нужно взглянуть на исключение под ним, IllegalAccessException, которое, как указывает Том Хоутин, выбрасывается из-за SecurityManager.

1 голос
/ 07 апреля 2009

Вы запускаете приложение с набором SecurityManager. Некоторый код в AccessControlContext (a.k.a. acc) не имеет необходимого разрешения. Возможно, этот код является кодом вашего приложения.

0 голосов
/ 14 мая 2009

Я получал AccessControlExceptions с BrowserLauncher2 через мой апплет. Ваша ситуация может быть похожей, потому что вы запускаете приложение с SecurityManager.

Я решил свою проблему, подписав jar BrowserLauncher2 своим сертификатом. Если ваш пользователь принимает ваш сертификат, BrowserLauncher должен иметь разрешения, необходимые для его работы.

0 голосов
/ 21 апреля 2009

Прежде всего, BrowserLauncher не поддерживает Mac OS

Кроме того, в MacOS BrowserLauncher запускает браузер по умолчанию, ориентация на определенный браузер невозможна. Вы можете попробовать изменить браузер по умолчанию на вашем компьютере, чтобы посмотреть, поможет ли это. По-видимому, это можно сделать следующим образом: Запустите Safari -> выберите «Настройки» -> на вкладке «Общие» и найдите веб-браузер по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...