TableView выдает ошибку при изменении имени столбца на другое - PullRequest
0 голосов
/ 25 декабря 2018

Я писал программу на javaFX. Я создал tableView. Я хочу изменить имя столбца на другое имя, но это дает мне ошибку, причину которой я не смог распознать.Вот вид моего приложения enter image description here

Я создаю таймер, в таймер пытаюсь изменить имя столбца таблицы, но безуспешно, вот мой код

 timer=new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run()
            {
                cnt ++;
                if(cnt % 3 == 0)
                {
                    Vaqt.setText("VAQT");
                    Reys.setText("REYS");
                    Mashrut.setText("MARSHRUT");
                    Status.setText("STATUS");
                }
                else if(cnt % 3 == 1)
                {
                    Vaqt.setText("TIME");
                    Reys.setText("REYS");
                    Mashrut.setText("MARSHRUT");
                    Status.setText("STATUS");
                }
                else if(cnt % 3 == 2)
                {
                    Vaqt.setText("Время");
                    Reys.setText("Рейс");
                    Mashrut.setText("Маршрут");
                    Status.setText("Статус");
                }
                System.out.println(cnt);
                ImageView imageView1 = new ImageView("img/uzairways_logo.jpg");
                ImageView imageView2 = new ImageView("img/uzairways_logo.jpg");
                list =new ArrayList<TableData>();
                list.add(new TableData("12:10", imageView1, "HY 615", "Москва", "прибил в 12:15"));
                list.add(new TableData("14:30", imageView2, "HY 52", "Ташкент", "по расписанию"));
                list.add(new TableData("12:10", imageView1, "HY 615", "Москва", "прибил в 12:15"));
                list.add(new TableData("14:30", imageView2, "HY 52", "Ташкент", "по расписанию"));
                tableView.getItems().clear();
                tableView.getItems().addAll(list);
                System.out.println("Va va");
            }
        },new Date(),1000);

Но это дает мне следующие ошибки

nged(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.StringPropertyBase.fireValueChangedEvent(StringPropertyBase.java:103)
    at javafx.beans.property.StringPropertyBase.markInvalid(StringPropertyBase.java:110)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:143)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:49)
    at javafx.beans.property.StringProperty.setValue(StringProperty.java:65)
    at javafx.scene.control.Labeled.setText(Labeled.java:146)
    at com.sun.javafx.scene.control.skin.TableColumnHeader.handlePropertyChanged(TableColumnHeader.java:339)
    at com.sun.javafx.scene.control.skin.TableColumnHeader.lambda$new$48(TableColumnHeader.java:149)
    at com.sun.javafx.scene.control.skin.TableColumnHeader$$Lambda$202/1706095847.call(Unknown Source)
    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$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.StringPropertyBase.fireValueChangedEvent(StringPropertyBase.java:103)
    at javafx.beans.property.StringPropertyBase.markInvalid(StringPropertyBase.java:110)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:143)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:49)
    at javafx.scene.control.TableColumnBase.setText(TableColumnBase.java:191)
    at controllers.Controller$1.run(Controller.java:50)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
Exception in thread "Timer-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = Timer-0
    at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:204)
    at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:364)
    at javafx.scene.Parent$2.onProposedChange(Parent.java:364)
    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.LabeledSkinBase.updateChildren(LabeledSkinBase.java:575)
    at com.sun.javafx.scene.control.skin.LabeledSkinBase.handleControlPropertyChanged(LabeledSkinBase.java:204)
    at com.sun.javafx.scene.control.skin.LabelSkin.handleControlPropertyChanged(LabelSkin.java:49)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda$registerChangeListener$60(BehaviorSkinBase.java:197)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$$Lambda$162/1632724523.call(Unknown Source)
    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.StringPropertyBase.fireValueChangedEvent(StringPropertyBase.java:103)
    at javafx.beans.property.StringPropertyBase.markInvalid(StringPropertyBase.java:110)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:143)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:49)
    at javafx.beans.property.StringProperty.setValue(StringProperty.java:65)
    at javafx.scene.control.Labeled.setText(Labeled.java:146)
    at com.sun.javafx.scene.control.skin.TableColumnHeader.handlePropertyChanged(TableColumnHeader.java:339)
    at com.sun.javafx.scene.control.skin.TableColumnHeader.lambda$new$48(TableColumnHeader.java:149)
    at com.sun.javafx.scene.control.skin.TableColumnHeader$$Lambda$202/1706095847.call(Unknown Source)
    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$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.StringPropertyBase.fireValueChangedEvent(StringPropertyBase.java:103)
    at javafx.beans.property.StringPropertyBase.markInvalid(StringPropertyBase.java:110)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:143)
    at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:49)
    at javafx.scene.control.TableColumnBase.setText(TableColumnBase.java:191)
    at controllers.Controller$1.run(Controller.java:51)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

1 Ответ

0 голосов
/ 25 декабря 2018

Вы можете использовать TimeLine вместо Timer в javaFX. TimeLine лучше всего подходит для изменения GUI в javaFX. Вы можете использовать анимацию с этим https://docs.oracle.com/javase/8/javafx/api/javafx/animation/Timeline.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...