2017-10-27 6 views
1

プロジェクトで使用されているすべてのライブラリを表示するレポートを自動的に生成するGradleプラグインを使用します。 レポートはhtmlファイルです。 htmlファイルにはライセンステキストファイルへのリンクがあります。WebViewに ".txt"拡張子のないテキストファイルを表示

私の目的は、レポートhtmlファイルをwebviewに表示することです。それは魅力のような仕事です。

しかし、ライセンスファイルの作品へのリンクは、いくつかの他は動作しません

...

は、私はそれが取り組んでいる「.TXT」で終わるライセンスファイルのリンクのみであることを認識しています。

私は確実に孤立したテストを行い、問題は複製可能です。

このコードは、リソースに2つのテキストファイル "file"と "file.txt"があることを前提としています。

public void start(Stage primaryStage) throws Exception 
{ 
    WebView webView = new WebView(); 

    URL url = this.getClass().getResource("file.txt"); // OK! 
    //URL url = this.getClass().getResource("file"); // Doesn't work 
    webView.getEngine().load(url.toString()); 

    StackPane pane = new StackPane(webView); 

    Scene scene = new Scene(pane, 400, 400); 

    primaryStage.setScene(scene); 

    primaryStage.show(); 
} 

「.txt」拡張子がないテキストファイルをWebViewに読み込ませるにはどうすればよいですか?

私は私のために満足のいく解決策を見つけた私は、迅速な回避策は、テキストファイル名に「.txtの」を追加すると、htmlコードを調整することであろうことを知っているが、私は90個のライブラリ上で使用して...

+0

'load'方法は次のように、ファイルのいくつかの特定の種類を期待しているように思えます。 htmlまたは.txt。ファイルを 'String'に読み込み、その' String'で 'loadContent'を使ってみてください。 – MMAdams

+0

ファイル拡張子がない場合は意味します。それ以外の場合は、通常どおりファイルをロードします。 – MMAdams

+0

あなたのコメントを使用して、私は私の問題の解決策を見つけました。私は答えを書いた。ありがとう! – FredQc

答えて

1

問題。

私はMMAdamsのコメントからアイデアを得ました。

すべての状況に該当するわけではありません。

私の場合は、表示されるすべてのファイルがローカル、より正確にはjarファイルにバンドルされています。

拡張子 ".txt"のないテキストファイルの場合、webviewがファイルのレンダリングをキャンセルしていました。

だから、私はそれは、「キャンセル」状態に入った特定のように行動するのWebViewを設定します。

public void start(Stage primaryStage) throws Exception 
{ 
    WebView webView = new WebView(); 

    webView.getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() 
    { 
     @Override 
     public void changed(ObservableValue ov, Worker.State oldState, 
       Worker.State newState) 
     {     
      if (newState == Worker.State.CANCELLED) 
      { 
       try 
       { 
        URL fileURL = new URL(webView.getEngine().getLocation()); 

        // Convert content of the file to a String using an InputStream 
        // as the file is in the resources (bundle in jar) so it cannot 
        // be access with File. 
        try (InputStream fileStream = fileURL.openStream()) 
        { 
         Scanner s = new Scanner(fileURL.openStream(), "UTF-8").useDelimiter("\\A"); 
         String content = s.hasNext() ? s.next() : ""; 
         webView.getEngine().loadContent(content, "text/plain"); 
        } 
       } 
       catch (Exception ex) 
       { 
        ex.printStackTrace(); 
       } 
      } 
     } 
    }); 


    //URL url = this.getClass().getResource("file.txt"); // OK! 
    URL url = this.getClass().getResource("file"); // Now working... 
    webView.getEngine().load(url.toString()); 

    StackPane pane = new StackPane(webView); 

    Scene scene = new Scene(pane, 400, 400); 

    primaryStage.setScene(scene); 

    primaryStage.show(); 
} 
関連する問題