繁体   English   中英

Java BrowserLauncher引发InvocationTargetException

[英]Java BrowserLauncher throwing InvocationTargetException

我正在使用BrowserLauncher2库从我的Swing应用程序中打开用户的默认Web浏览器,但是它引发了一个非常令人困惑的异常:

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

您正在使用SecurityManager集运行您的应用程序。 AccessControlContext (aka acc)中的某些代码没有所需的权限。 该代码可能就是您的应用程序代码。

InvocationTargetException总是包装另一个通过反射调用方法或构造函数时引起的异常。 要解决您的问题,您需要查看其下的异常,因为SecurityManager ,引发了Tom Hawtin指出的IllegalAccessException异常。

首先, BrowserLauncher不支持Mac OS <10.2。

另外,在MacOS上, BrowserLauncher启动默认浏览器,无法定位特定的浏览器。 您可以尝试更改计算机上的默认浏览器,以查看是否有帮助。 显然,这可以通过以下步骤完成:启动Safari->选择“首选项”->“常规”选项卡,找到“默认” Web浏览器。

我通过我的小程序通过BrowserLauncher2获取AccessControlExceptions。 您的情况可能相似,因为您正在使用SecurityManager运行应用程序。

我用证书签署了BrowserLauncher2 jar解决了我的问题。 如果您的用户接受您的证书,则BrowserLauncher应该具有完成其工作所需的权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM