2

我有一个程序(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 文件。所以桌面的浏览方法并没有真正强制浏览,而只是退回到默认的打开操作。

所以问题是:如何强制 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) {}
  }
}
4

2 回答 2

1

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

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

于 2012-08-22T12:55:51.343 回答
1

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

另一种选择是加载 XML 并在 Java 中执行 XSL 转换,然后使用webview.getEngine.loadContent(contentString, contentType)在 JavaFX WebView 中显示结果文档,或者仅在 Label 或自定义 JavaFX 控件中显示结果文档。请注意,从 JavaFX 2.2 开始,JavaFX WebView 还没有用于漂亮打印 xml 内容类型的查看器,因此要在 webview 中获得漂亮打印的 xml,您可能需要使用 javascript/ 将 xml 解析并格式化为 html 文档css/html,类似于本文中演示的在WebView 中显示格式化的 java 源代码的方法。

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

于 2012-08-22T16:24:07.200 回答