Ich habe einen Jasperdruck in einen Task gelegt und während dieser erstellt wird eine Progressindicator laufen lassen.
Das funktioniert auch. Nur wenn der Task fertig ist soll auch der Progressindicator aufhören zu laufen. Das funktioniert nicht. Ich zeig mal den Code und ein zwei Screenshot sowie die Exception.
vor dem Start des Drucks:

während des Drucks :

soweit alles gut:
nach dem Druck

jetzt nicht mehr gut, das node wird nicht mehr dargestellt.
folgende Exception:
ARNUNG: Uncaught throwable in javafx concurrent thread pool
java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-5
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:236)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)
at javafx.scene.Parent$2.onProposedChange(Parent.java:367)
at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:113)
at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:108)
at com.sun.javafx.scene.control.skin.ProgressIndicatorSkin.initialize(ProgressIndicatorSkin.java:248)
at com.sun.javafx.scene.control.skin.ProgressIndicatorSkin.handleControlPropertyChanged(ProgressIndicatorSkin.java:211)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda$registerChangeListener$61(BehaviorSkinBase.java:197)
at com.sun.javafx.scene.control.MultiplePropertyChangeListenerHandler$1.changed(MultiplePropertyChangeListenerHandler.java:55)
at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:89)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ReadOnlyBooleanWrapper$ReadOnlyPropertyImpl.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:178)
at javafx.beans.property.ReadOnlyBooleanWrapper$ReadOnlyPropertyImpl.access$100(ReadOnlyBooleanWrapper.java:148)
at javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:144)
at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
at javafx.scene.control.ProgressIndicator.setIndeterminate(ProgressIndicator.java:122)
at javafx.scene.control.ProgressIndicator.access$200(ProgressIndicator.java:69)
at javafx.scene.control.ProgressIndicator$2.invalidated(ProgressIndicator.java:174)
at javafx.beans.property.DoublePropertyBase.markInvalid(DoublePropertyBase.java:112)
at javafx.beans.property.DoublePropertyBase.set(DoublePropertyBase.java:147)
at javafx.scene.control.ProgressIndicator.setProgress(ProgressIndicator.java:163)
at CONTROLLER.AppStart.CoursesHeaderController$PrintCoursesUserService$1.call(CoursesHeaderController.java:360)
at CONTROLLER.AppStart.CoursesHeaderController$PrintCoursesUserService$1.call(CoursesHeaderController.java:340)
at javafx.concurrent.Task$TaskCallable.call(Task.java:1423)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at javafx.concurrent.Service.lambda$null$493(Service.java:725)
at java.security.AccessController.doPrivileged(Native Method)
at javafx.concurrent.Service.lambda$executeTask$494(Service.java:724)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
ich weiß aber nicht was die mir sagen will, kann mir jemand helfen ?
Das funktioniert auch. Nur wenn der Task fertig ist soll auch der Progressindicator aufhören zu laufen. Das funktioniert nicht. Ich zeig mal den Code und ein zwei Screenshot sowie die Exception.
Code:
private static class PrintCoursesUserService extends Service<Void> {
/**
* This Service was called from the Method [handlecoursesuserprint]
* Preview the report from the beans
*
* @param idlanguage , language id for all Courses with this language
*
* beans RepCoursesUser.java, RepCoursesUserDet.java
*
* @throws MalformedURLException, IOException on error.
*/
private final String idlanguage;
private final ProgressIndicator proindi;
public PrintCoursesUserService(ProgressIndicator proindi, String stridlanguage) {
this.idlanguage = stridlanguage;
this.proindi = proindi;
}
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
Platform.runLater(new Runnable() {
@Override
public void run() {
proindi.setProgress(-1);
}
});
JasperReport jasperReport = JasperCompileManager.compileReport(getClass().getResourceAsStream("/REPORTS/CoursesUser.jrxml"));
Map<String, Object> map = new HashMap<>();
List<RepCoursesUser> data = generateData_RepCoursesUser(idlanguage);
JRDataSource datasource = new JRBeanCollectionDataSource(data, true);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, datasource);
JasperViewer.viewReport(jasperPrint,false);
proindi.setProgress(1);
return null;
}
};
}
}
vor dem Start des Drucks:

während des Drucks :

soweit alles gut:
nach dem Druck

jetzt nicht mehr gut, das node wird nicht mehr dargestellt.
folgende Exception:
ARNUNG: Uncaught throwable in javafx concurrent thread pool
java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-5
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:236)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)
at javafx.scene.Parent$2.onProposedChange(Parent.java:367)
at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:113)
at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:108)
at com.sun.javafx.scene.control.skin.ProgressIndicatorSkin.initialize(ProgressIndicatorSkin.java:248)
at com.sun.javafx.scene.control.skin.ProgressIndicatorSkin.handleControlPropertyChanged(ProgressIndicatorSkin.java:211)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda$registerChangeListener$61(BehaviorSkinBase.java:197)
at com.sun.javafx.scene.control.MultiplePropertyChangeListenerHandler$1.changed(MultiplePropertyChangeListenerHandler.java:55)
at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:89)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ReadOnlyBooleanWrapper$ReadOnlyPropertyImpl.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:178)
at javafx.beans.property.ReadOnlyBooleanWrapper$ReadOnlyPropertyImpl.access$100(ReadOnlyBooleanWrapper.java:148)
at javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:144)
at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
at javafx.scene.control.ProgressIndicator.setIndeterminate(ProgressIndicator.java:122)
at javafx.scene.control.ProgressIndicator.access$200(ProgressIndicator.java:69)
at javafx.scene.control.ProgressIndicator$2.invalidated(ProgressIndicator.java:174)
at javafx.beans.property.DoublePropertyBase.markInvalid(DoublePropertyBase.java:112)
at javafx.beans.property.DoublePropertyBase.set(DoublePropertyBase.java:147)
at javafx.scene.control.ProgressIndicator.setProgress(ProgressIndicator.java:163)
at CONTROLLER.AppStart.CoursesHeaderController$PrintCoursesUserService$1.call(CoursesHeaderController.java:360)
at CONTROLLER.AppStart.CoursesHeaderController$PrintCoursesUserService$1.call(CoursesHeaderController.java:340)
at javafx.concurrent.Task$TaskCallable.call(Task.java:1423)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at javafx.concurrent.Service.lambda$null$493(Service.java:725)
at java.security.AccessController.doPrivileged(Native Method)
at javafx.concurrent.Service.lambda$executeTask$494(Service.java:724)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
ich weiß aber nicht was die mir sagen will, kann mir jemand helfen ?