Frage

Ich habe in der Wurzel meines Bundles "styles.css" platziert, und jetzt versuchen, herauszufinden, wie er es im Code verknüpfen kann.Das Problem ist, dass @ .getStySheets (). Hinzufügen (_) Nimmt eine Zeichenfolge und keine URL, sodass alle Ansätze, die ich kenne, hier versagt:

nimm 1:

generasacodicetagpre.

generasacodicetagpre.

nimm 2:

generasacodicetagpre.

generasacodicetagpre.

nehmen 3:

generasacodicetagpre.

generasacodicetagpre.

nimm 4:

generasacodicetagpre.

generasacodicetagpre.

Ich verwende felix-4.2.1 , java-8 (build 1.8.0-ea-b115) , javafx-8 (8.0.0-ea-b115) .

War es hilfreich?

Lösung

Ich habe kürzlich in demselben Fehler / Problemen ausgeführt, wie das ursprüngliche Plakat dieser Frage und ich konnte es gelöst, ohne Änderungen an der CSS / FXML zu leisten oder in einer Temp-Datei zu extrahieren. Ich poste es hier, da ich keine gute Antwort online gefunden habe:

In meinem Fall war das Setup:

bündel0:

  • someview.fxml mit einem relativen Pfadverweis auf eine CSS-Datei
  • somestyle.css mit relativem Pfad Verweise auf Bilder
  • legsimage.png
  • ressourceloader.java (gibt URL-Objekte von CSS- und FXML-Dateien zurück)

bundle1:

  • Basic JavaFX-Dateien, um den FXML mit einem FXML-Loader von Bundle0 zu laden.

Das Problem:

Alle CSS- und CSS-referenzierten Bilder schienen von der FXML ignoriert zu sein, obwohl ich den Klassenlader auf dem FXML-Lader einstellte. Es hat nur gearbeitet, wenn ich einen absoluten Dateipfad für die CSS und die im CSS bezeichneten Bildern benutzte. Das will ich nicht.

Die Lösung:

Es gibt 2 Fehlerbücher- / Design-Probleme in JavaFX, die dieses Setup nicht mit OSGI verbieten.

  • Laden der CSS von FXML
  • Verweisen auf Bilder von einem CSS

Um das erste Problem zu beheben, müssen Sie die binäre CSS-Datei in JavaFX deaktivieren, indem Sie die Systemeigenschaft Binary.css auf FALSE einstellen. Es gibt einen Fehler in JavaFX (vielleicht ist es bereits behoben?) Wenn JavaFX versucht, intelligent zu sein und versucht, die BSS-Datei zu finden, obwohl Sie CSS sagen. Es flippt, da Osgi-Ressourcen-URLs ein Bündel: // 'haben, in dem es kein Schema erwartet. Lösung:

  • -dbinary.css= FALSE

Um das zweite Problem zu beheben, müssen Sie den Thread-Kontext-Klassenloader in den Klassenlader des Bündels einstellen, in dem sich die CSS-Bilder befinden und den Thread-Kontext-Klassenlader wiederherstellen. Der Trick ist, dies jedes Mal zu tun, wenn die CSS von Javafx interpretiert wird, was nicht immer, wenn Sie es erwarten ...

generasacodicetagpre.

Leider ist dies die beste Lösung, mit der ich kommen könnte. Javafx wurde nicht mit Unterrichts- oder Abhängigkeitseinspritzung vorgenommen, auch wenn nur etwa jede Unternehmensanwendung diese Funktionalitäten in irgendeiner Form verwendet. : (

// bearbeiten Es sieht so aus, als ob Sie den Thread-Kontext-Klassenlader nicht einstellen müssen, um auf die Bilder von der CSS zuzugreifen!

Andere Tipps

der Grund, warum dies nicht funktioniert, wird hier nicht erläutert: Javafx Jira RT-14177 . Da Sie das "Externalformular" einer Ressource nicht verwenden können, kopierte ich ihn in einer Temp-Datei, indem ich den Eingabestrom direkt gelesen habe.

generasacodicetagpre.

Ich hoffe wirklich, das hilft Ihnen aus.

jonathan

    .
  • Stellen Sie sicher, dass Sie den Klassenloader einer Klasse verwenden, die Zugriff auf das Bündel mit der CSS-Datei
  • hat>
  • Wenn Sie einen relativen Pfad verwenden, stellen Sie sicher, dass sich CSS relativ zu dieser Klasse 'Paket
  • befindet

Hier ist ein Beispiel, wie ich eine CSS-Datei in Droombler FX ( srombler FX ist eine modulare Rich-Client-Plattform für JavaFX basierend auf OSGI und MAVEN(POM-First) ):

http://sourceforge.net/p/drombler/drombler-fx/ci/default/tree/drombler-fx-core-docking/src/Haupt / Java / Org / Drombler / FX / Kern / Docking / Impl / Skin / Stylesheets.java

Hier: Die Stylesheets-Klasse befindet sich in demselben Bundle wie die CSS-Datei.

getclass (). GetClassLoader (). GetResource (). Toexternalform ()?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top