【问题标题】:Force Java to open XML in web browser强制 Java 在 Web 浏览器中打开 XML
【发布时间】:2012-08-17 21:22:03
【问题描述】:

我有一个程序 (GUI = JavaFX),它扫描我的文件系统以查找特定的 XML 报告文件并将它们列在一个表中。这些 XML 报告由 XSLT 在 Web 浏览器中呈现。现在我希望能够在我的 Java 应用程序中单击这样的报告并将其显示在浏览器中。我已经编写了处理程序并确定了正确的 URL。在我的 Windows 系统上,这是

file://localhost/C:/report.xml

XML 不是问题。如果我在浏览器中手动打开它,一切正常。但是,如果我使用 Google 并询问如何在浏览器中打开文件,它总是会给我这个:

java.awt.Desktop.getDesktop().
    browse(new java.net.URI("file://localhost/C:/report.xml"));

由于这是一个很好的 http URL(网站)解决方案,它总是在我的默认文本编辑器(例如 Notepad++)中打开我的 XML 文件。所以Desktop的browse方法并没有真正强制浏览,只是回退到一个默认的打开操作。

所以问题是:如何强制 Java 在浏览器中打开 XML,类似于 Windows 功能“打开方式 >”?

这里是一个 sscce(它应该尝试在浏览器中访问该文件,即使它不存在):

public class XMLOpener {
  public static void main(String[] args) 
  {
    String fileURL = "file://localhost/C:/report.xml";
    try {
      java.awt.Desktop.getDesktop().browse(new java.net.URI(fileURL));
    } catch (Exception e) {}
  }
}

【问题讨论】:

  • 如需尽快获得更好的帮助,请附上sscce
  • 感谢 sscce。 Desktop.isDesktopSupported() 返回什么?
  • Desktop.isDesktopSupported() 返回真。如果我尝试 java.awt.Desktop.getDesktop().browse(new java.net.URI("google.com")); 它会按预期打开浏览器。
  • 谢谢,彼得。我假设您已经阅读过 API,但如果您还没有阅读过:“如果默认浏览器无法处理指定的 URI,则会调用为处理指定类型的 URI 而注册的应用程序”。
  • 是的,我做到了。但显然我的浏览器确实支持 XML(就像每个浏览器都支持 - 甚至 IE!;-)),因为我可以手动打开 URL。它只是不是 XML 的默认应用程序。

标签: java xml browser


【解决方案1】:

awt Desktop.browse 方法的 JavaFX 替代品将是 HostServices.showDocument。您可以尝试一下,但它可能与 Desktop.browse 具有相同的效果。

另一种替代方法是在 Java 中使用 load the XML and perform the XSL transform,然后使用 webview.getEngine.loadContent(contentString, contentType) 在 JavaFX WebView 中显示生成的文档,或者仅在 Label 或自定义 JavaFX 控件中显示生成的文档。请注意,从 JavaFX 2.2 开始,JavaFX WebView 还没有用于漂亮打印 xml 内容类型的查看器,因此要在 webview 中获得漂亮打印的 xml,您可能需要使用 javascript/ 将 xml 解析并格式化为 html 文档css/html,类似于this post for displaying formatted java source in a WebView中演示的方法。

对我来说,虽然它是更多的开发工作,但这种使用 JavaFX 处理显示的替代方法很好,因为结果文档的显示可以在 JavaFX 应用程序本身中封装和控制,您无需依赖任何东西浏览器和配置可能会或可能不会安装在主机环境中。

【讨论】:

  • HostServices.showDocument 具有相同的效果。至于在应用程序内部显示内容:对于有问题的功能,实施工作量太大。不过谢谢你的建议。
【解决方案2】:

如果浏览器无法处理 URI,browse 会启动“为处理指定类型的 URI 而注册的应用程序被调用”。

检查您喜欢的浏览器是否存在(Chrome、Fx、O、IE 等)或通过其他方法获取,然后execute a custom command。如果您知道您正在运行的操作系统(Windows),那么您只需要考虑 exec 行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    相关资源
    最近更新 更多