plans to make JavaFX 8 platform independent again?
Tom Schindl
tom.schindl at bestsolution.at
Wed Feb 17 18:30:00 UTC 2016
Hi,
In general I think this whole Spinner thing is completely bogus!!!!
Suppose the following:
> Spinner<Integer> s = new Spinner<>(0.0, 1.0, 0.0);
> s.valueProperty().addListener( new ChangeListener<Integer>() {
>
> @Override
> public void changed(ObservableValue<? extends Integer> observable, Integer oldValue, Integer newValue) {
> System.err.println("HELLO WORLD");
> }
> });
> s.increment();
This will naturally give you a CCE. Those constructurs should have never
ever be supplied but what should have be provided is
Spinner.createDouble( double, double, double ) : Spinner<Double>;
Spinner.createInt( int, int, int );
I have not tried but the work around is to explicitly
public Spinner(@NamedArg("valueFactory") SpinnerValueFactory<T>
valueFactory)!
a) You need your own SpinnerValueFactory because one can not reference
inner classes in FXML
> package application;
>
> import javafx.beans.NamedArg;
> import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory;
>
> public class MyWrapperFactory extends IntegerSpinnerValueFactory {
>
> public MyWrapperFactory(@NamedArg("min") int min,
> @NamedArg("max") int max,
> @NamedArg("initialValue") int initialValue) {
> super(min, max, initialValue);
> }
>
> }
b) make your FXML look like this
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Spinner?>
<?import application.MyWrapperFactory?>
<VBox xmlns:fx="http://javafx.com/fxml/1">
<Spinner>
<valueFactory>
<MyWrapperFactory min="0" max="100" initialValue="3" />
</valueFactory>
</Spinner>
</VBox>
So IMHO action items are:
* deprecate those constructors
* provide static factory methods
The order in which constructors are provided by reflection is not
guaranteed and BTW you can make your sample break on windows. Change
Spinner<Integer> to Spinner<Double>!
Tom
On 17.02.16 18:30, Kevin Rushforth wrote:
> Hi Stefan,
>
> Java and JavaFX are platform-independent, so asking whether we will
> "make it platform-independent again" is asking the wrong question.
> Really, your question should be: can a fix for a serious bug be
> backported to JDK 8 after it is fixed in JDK 9. The answer to that
> question is "yes" for serious bugs and regressions.
>
> What you have discovered in this case is a serious bug that happens to
> affect a single platform. In fact, my reading of the bug is that we are
> just getting lucky on the other platforms. If this turns out to be as
> serious as it seems, then I will bump the priority to P2 and we will
> consider a backport to a JDK 8 update release.
>
> -- Kevin
>
>
> Stefan Endrullis wrote:
>> Dear JavaFX team,
>>
>> over years one of the key features of Java was its platform
>> independence. A Java application would run under Windows, Mac OS, and
>> Linux (if well programmed).
>>
>> Since https://bugs.openjdk.java.net/browse/JDK-8146325 this is no
>> longer the case. Once you use the JavaFX Spinner<Integer> component
>> your application will still work under Windows, but will crash under
>> Linux.
>>
>> Since this bug attacks a fundamental feature of Java we expected it to
>> be fixed quite fast and definitely in Java 8. But now we discover
>> that it's planned to be fixed in Java 9 only.
>> Does this mean that Java 8 is not considered to be platform
>> independent anymore? Do we have to start deploying different jars for
>> different platforms now?
>>
>> Best regards,
>> Stefan Endrullis
>>
--
Thomas Schindl, CTO
BestSolution.at EDV Systemhaus GmbH
Eduard-Bodem-Gasse 5-7, A-6020 Innsbruck
http://www.bestsolution.at/
Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck
More information about the openjfx-dev
mailing list