2

ファイル システムをスキャンして特定の XML レポート ファイルを探し、それらをテーブルに一覧表示するプログラム (GUI = JavaFX) があります。これらの 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 (Web サイト) に適したソリューションであるため、既定のテキスト エディター (Notepad++ など) で常に XML ファイルを開きます。したがって、デスクトップのブラウズ メソッドはブラウズを実際に強制するのではなく、デフォルトの開く操作にフォールバックするだけです。

問題は次のとおりです。Windows の「Open with >」機能と同様に、ブラウザで XML を開くように Java に強制するにはどうすればよいでしょうか。

ここに 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を処理できない場合、browseは「指定されたタイプのURIを処理するために登録されたアプリケーションが呼び出されます」を起動します。

お気に入りのブラウザ(Chrome、Fx、O、IEなど)が存在することを確認するか、他の方法で取得してから、カスタムコマンドを実行します。実行しているOS(Windows)がわかっている場合は、そのためのexec行のみを考慮する必要があります。

于 2012-08-22T12:55:51.343 に答える
1

awt Desktop.browse メソッドの JavaFX 代替はHostServices.showDocumentになります。それを試すこともできますが、おそらく Desktop.browse と同じ効果があります。

もう 1 つの方法は、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 は、この投稿で説明されている、書式設定された Java ソースを WebView に表示する方法と同様です。

私にとっては、より多くの開発作業ですが、結果のドキュメントの表示を JavaFX アプリケーション自体でカプセル化して制御することができ、どのブラウザーや構成にも依存しないため、JavaFX で表示を処理するこの代替アプローチは優れています。ホスト環境にインストールされる場合とインストールされない場合があります。

于 2012-08-22T16:24:07.200 に答える