我有一个程序(GUI = JavaFX),它扫描我的文件系统以查找特定的XML报告文件,并将它们列在表中。这些XML报告由XSLT在Web浏览器中呈现。现在我希望能够在我的Java应用程序中单击此类报告并将其显示在浏览器中。我已经编写了处理程序并确定了正确的URL。在我的Windows系统上,这是
file://localhost/C:/report.xml
XML不是问题。如果我在浏览器中手动打开它,一切正常。但是,如果我使用谷歌并询问如何在浏览器中打开文件,它总是给我这个:
java.awt.Desktop.getDesktop().
browse(new java.net.URI("file://localhost/C:/report.xml"));
由于这是http URL(网站)的一个很好的解决方案,它总是在我的默认文本编辑器(例如Notepad ++)中打开我的XML文件。因此,桌面的浏览方法并不真正强制浏览,而只是回退到默认的打开操作。
所以问题是:如何强制Java在浏览器中打开XML,类似于Windows函数“Open with>”?
这是一个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) {}
}
}
答案 0 :(得分:1)
如果浏览器无法处理URI,browse将启动“为调用指定类型的URI而注册的应用程序”。
检查您最喜欢的浏览器是否存在(Chrome,Fx,O,IE等)或通过其他方法获取,然后execute a custom command。如果你知道你正在运行的操作系统(Windows),那么你只需要考虑exec行。
答案 1 :(得分: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应用程序本身中进行封装和控制,而且你不需要这样做。 t依赖于可能在主机环境中安装或不安装的任何浏览器和配置。