我正在使用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
答案 0 :(得分:1)
您正在使用SecurityManager
集运行您的应用程序。 AccessControlContext
(a.k.a。acc)中的某些代码没有所需的权限。可能代码是您的应用程序代码。
答案 1 :(得分:1)
InvocationTargetException
总是包装另一个异常,这是在通过反射调用方法或构造函数时引起的。要解决您的问题,您需要查看其下的异常,正如Tom Hawtin指出的IllegalAccessException
因SecurityManager
而被抛出。
答案 2 :(得分:0)
首先,BrowserLauncher
不支持Mac OS< 10.2。
此外,在MacOS上,BrowserLauncher
启动默认浏览器,无法定位特定浏览器。您可以尝试更改计算机上的默认浏览器,看看是否有帮助。显然,这可以通过以下方式完成:
启动Safari - >选择首选项 - >在“常规”选项卡中,找到“默认”Web浏览器。
答案 3 :(得分:0)
我通过我的applet通过BrowserLauncher2获取AccessControlExceptions。您的情况可能类似,因为您使用SecurityManager运行应用程序。
我通过使用我的证书签署BrowserLauncher2 jar解决了我的问题。如果您的用户接受您的证书,则BrowserLauncher应具有完成其工作所需的权限。