permet de dire que j'ai une classe de ressources comme ceci:JavaFX: Accès à FXML à un non-String-objet à partir d'un ResourceBundle
public class Resources extends java.util.ListResourceBundle {
private static final Object[][] OBJECTS = new Object[][]{
{"FOO", "foo"},
{"BAR", 123d}
}
@Override
protected Object[][] getContents() {
return OBJECTS;
}
}
Dans ma classe d'application je charge le fxml
comme ceci:
Resources resources = new Resources();
FXMLLoader loader = new FXMLLoader(getClass().getResource("/foo.fxml"), resources);
Parent root = loader.load();
Dans mon foo.fxml
Je veux utiliser à la fois ma chaîne et mon double valeur de ressources, comme ceci:
<Label text="%FOO">
<Polygon>
<points>
<Double fx:value="0"/>
<Double fx:value="0"/>
<Double fx:value="%BAR"/>
<Double fx:value="0"/>
</points>
</Polygon>
La première ligne fonctionne parfaitement, mais la ligne avec fx:value="%BAR"
crée exception comme suit:
javafx.fxml.LoadException:
file:/foo.fxml:90
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.access$2700(FXMLLoader.java:103)
at javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:1143)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:746)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at my Application class in line Parent root = loader.load();
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NumberFormatException: For input string: "%BAR"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at java.lang.Double.valueOf(Double.java:502)
at com.sun.javafx.fxml.BeanAdapter.coerce(BeanAdapter.java:450)
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.constructValue(FXMLLoader.java:982)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:746)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
... 17 more
Ma question est la suivante: comment utiliser les objets de ressources autres que String
dans FXML?
Modifier: Vous avez toujours ce problème. J'ai même essayé {"BAR", new Double(123)}
dans ma classe de ressources. La même erreur apparaît, ce qui est honnêtement logique car ce n'est rien qui corrige logiquement l'exception. J'y ai beaucoup réfléchi et je suis perdu ici parce que je veux vraiment que ça marche et que je ne sache pas quoi faire. Merci pour toute aide!