如何在swt浏览器中加载jar:file:uri?

时间:2014-01-09 17:57:54

标签: java eclipse jar swt

我无法在swt浏览器中加载jar:file uri。同样的uri在我的firefox中加载很好,并且它加载了相同软件的旧版本。我能发现的唯一变化是旧的工作版本依赖于org.eclipse.core.resources - 似乎没有任何理由。 但是,在重新创建依赖项后,页面仍然无法加载。

我在浏览器窗口中有这个:

Unable to load page

Problem occurred while loading the URL file:///usr/share/zenta/plugins/org.rulez.magwas.zenta.help_2.4.0.201401091630.jar!/hints/viewpoint_total.html

Error opening file: No such file or directory

我没有发现任何异常的迹象,也没有记录日志。

上述情况中的实际uri是:

jar:file:/usr/share/zenta/plugins/org.rulez.magwas.zenta.help_2.4.0.201401091630.jar!/hints/viewpoint_total.html

我正在使用此代码:

    win.shell.pack();
    win.shell.open();
    Browser fBrowser = new Browser(win.getComposite(), SWT.NONE);
    GridData gd = new GridData(GridData.FILL_BOTH);
    fBrowser.setLayoutData(gd);
    fBrowser.pack();

    String cwd = System.getProperty("user.dir");
    String url = "jar:file:/usr/share/zenta/plugins/org.rulez.magwas.zenta.help_2.4.0.201401091630.jar!/hints/viewpoint_total.html"
    System.out.printf("cwd=%s\nurl=%s\n", cwd, url);
    fBrowser.setUrl(url);
    fBrowser.setFocus();

作为一个额外的问题:有没有办法检测浏览器的这种故障,所以当找到解决方案时,我可以为它编写一个单元测试?

1 个答案:

答案 0 :(得分:1)

您可以使用JarUrlConnection获取资源:

  try {
    InputStream in;
    String url = "jar:file:/usr/share/zenta/plugins/org.rulez.magwas.zenta.help_2.4.0.201401091630.jar!/hints/viewpoint_total.html"
    JarURLConnection con = (JarURLConnection)url.openConnection();
    in = con.getInputStream();
    // read the stream
  } catch (MalformedURLException ex) {
    System.err.println("Malformed URL: "+url);
  } catch (IOException ex) {
    System.err.println("IO error");
  } finally {
    in.close();
  }