2017-09-22 8 views
4

j'ai deux modules JPMS:Comment ajouter à la feuille de style JavaFX Scene à partir d'un autre module de Java 9?

  • module un module b

Dans

  • module un j'ai quelque chose comme:

    public class MyAppplication extends Application { 
        .... 
        public static void addCss(String path) { 
         stage.getScene().getStylesheets().add(path); 
        } 
    } 
    

    Dans le module-b I avoir un fichier CSS que je veux ajouter à MyApplication. Comment le faire dans le code dans le module-b? Je ne peux pas comprendre comment passer le chemin d'un autre module.

    je veux dire dans le module-b:

    ... 
    MyApplication.addCss(???); 
    ... 
    

    EDIT
    Dans OSGi I utilisé la solution suivante en bundle-b (en supposant, ce module a été faisceau-a, et le module-b était faisceau -b):

    String pathInBundleB = "com/foo/package-in-bundle-b/file.css" 
    Bundle bundleB = FrameworkUtil.getBundle(this.getClass()).getBundleContext().getBundle(); 
    URL cssFileUrl = bundleB.getEntry(pathInBundleB); 
    MyApplication.addCss(cssFileUrl.toString()); 
    
  • +0

    Qu'ont vous avez essayé jusqu'ici? Mettez à jour la question avec cela, s'il vous plaît ne posez pas simplement les questions sans déboguer ou essayer quelque chose. – nullpointer

    +1

    Veuillez également préciser, en quoi n'est-ce pas similaire à https://stackoverflow.com/questions/46369101/how-to-get-resourcebundle-from-another-module-in-java-9? – nullpointer

    +0

    module-b peut accéder à ses propres ressources, donc module-b devrait avoir une méthode publique qui renvoie le résultat d'un appel interne à Class.getResource ou Class.getResourceAsStream. – VGR

    Répondre

    1

    J'ai trouvé la solution avec l'aide de @AlanBateman.

    En supposant, ce fichier css est en com/foo/some-package/file.css J'utilise le code suivant dans le module-b:

    package com.foo.some-package; 
    
    public class SomeClass { 
    
        public void init() { 
         MyApplication.addCss(this.getClass().getResource("base.css").toString()); 
        } 
    } 
    

    En outre, dans le module-info du module-b Je:

    opens com.foo.some-package to module-a;