[英]MockWebServer throwing java.lang.reflect.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.