【问题标题】:Java BrowserLauncher throwing InvocationTargetExceptionJava BrowserLauncher 抛出 InvocationTargetException
【发布时间】:2009-04-06 22:59:39
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: java exception


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      InvocationTargetException 总是包装另一个异常,该异常是在通过反射调用方法或构造函数时引起的。要解决您的问题,您需要查看其下的异常,正如 Tom Hawtin 指出的那样,IllegalAccessException 由于SecurityManager 而被抛出。

      【讨论】:

        【解决方案3】:

        首先,BrowserLauncher 不支持 Mac OS

        此外,在 MacOS 上,BrowserLauncher 会启动默认浏览器,无法针对特定浏览器。您可以尝试更改计算机上的默认浏览器,看看是否有帮助。显然,这可以通过以下方式完成: 启动 Safari -> 选择首选项 -> 在常规选项卡中,找到默认网络浏览器。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-09-11
            • 2017-01-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-23
            相关资源
            最近更新 更多