[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-openjfx-dev
Subject: Re: plans to make JavaFX 8 platform independent again?
From: Tom Schindl <tom.schindl () bestsolution ! at>
Date: 2016-02-17 18:30:00
Message-ID: 56C4BC28.8010805 () bestsolution ! at
[Download RAW message or body]
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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic