2016-04-03 2 views
-1

からCSSファイルをインポートする方法:私は<strong>cssBundle</strong>と呼ばれる別のバンドルからOSGiバンドルのリソース<em>(style.cssと呼ばれるCSSファイル)</em>をインポートしようとしている外部のバンドルリソース

public void addCSS() { 
    Bundle bundle = FrameworkUtil.getBundle(this.getClass()); 
    Bundle[] bArray = bundle.getBundleContext().getBundles(); 
    Bundle cssBundle = null; 
    for (Bundle b : bArray) { 
     if (b.getSymbolicName().equals("cssBundle")) { 
      cssBundle = b; 
      break; 
     } 
    } 
    Enumeration<URL> resources = null; 
    try { 
     resources = cssBundle.getResources("/resources/css/mainscreen.css"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    if (resources != null) { 
     URL myCSSURL = resources.nextElement(); 
     try { 
      URI uri = myCSSURL.toURI(); 
      File f = new File(uri); 
      scene.getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/")); 
     } catch (URISyntaxException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

しかし、このようにして、私は得る:

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: URI scheme is not "file" 
at java.io.File.<init>(Unknown Source) 

それについては、どのような正しい方法がありますか?

System.out.println(myCSSURL); 

OUTPUTS

bundle://13.1:1/resources/css/style.css 

私はURLを使用せずに自分のシーンにこれを追加することができます方法はありますか?

+0

私はOSGIで作業していませんが、 'scene.getStylesheets()。add(uri.toString());'を実行しない理由がありますか? (またはおそらく 'uri.toURL()。toExternalForm()') 'stylesheets'プロパティは、URLの文字列表現のリストです。 –

+0

@James_D別のバンドルリソースからCSSリソースファイルをインポートしています。 –

+0

私は本当にそれが重要であるとは思わない。あなたが 'uri.toString()'を呼び出すと実際に何を得ますか?これはおそらくjarファイルのエントリであり、URIはとにかくjarファイルを示します。 –

答えて

2

リソースをバンドルからrepresetingするURIをファイルとして表すことはできません。したがって、URIからファイルを作成する方法は不可能です。

バンドルリソースでできることは、そのためのInputStreamを取得することです。したがって、これを使用してストリームの内容をtempフォルダ内のファイルにコピーし、そのファイルをscene.getStylesheets()。addに渡すことができます。

もう1つの方法は、resources.cssのバンドルにインポートパッケージを定義することです。これにより、バンドルのクラスパス上でファイルを利用できるようになります。だから、おそらくscene.getStylesheets()。add( "/ resources/css")が動作します。

0

この例外は、ファイルが見つからないことを意味します。 CSSファイルへのURIの作成を調査する必要があります。

URI uri = new URI("file:///C:/other/mydir/myfile.txt"); 
+1

実際、例外は実際にはURIはファイルを表します(ほとんどの場合、jarファイル内のエントリを表します)。 –

関連する問題

 関連する問題