исключение java.lang.IndexOutOfBoundsException javafx

227
04 сентября 2018, 16:30

Я только начал знакомство из javafx и захотел сделать картинку которая будет ездить справа налево в отдельном потоке. Вот мой класс для отдельного потока

    static class MyThread extends Thread{
    Stage primaryStage;
    ImageView imgview;
    MyThread(ImageView imgview,Stage primareStage){
        this.primaryStage = primareStage;
        this.imgview = imgview;
    }
    @Override
    public void run() {
        double x = imgview.getX();
        while(true){
                MoveRight(x);
                MoveLeft(x);
        }
    }
    public synchronized void MoveRight(double x){
        while(x < primaryStage.getWidth() - imgview.getFitWidth()){
            x = imgview.getX();
            x++;
            imgview.setX(x);
            try {
                Thread.sleep(20);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public synchronized void MoveLeft(double x){
        while(x > 10){
            x = imgview.getX();
            x--;
            imgview.setX(x);
            try {
                Thread.sleep(20);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

Сначала всё работает нормально, но потом генерируется исключение:

Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index -1 out-of-bounds for length 2 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) at java.base/java.util.Objects.checkIndex(Objects.java:372) at java.base/java.util.ArrayList.get(ArrayList.java:440) at javafx.base/com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89) at javafx.base/com.sun.javafx.collections.VetoableListDecorator.get(VetoableListDecorator.java:306) at javafx.graphics/javafx.scene.Parent.updateCachedBounds(Parent.java:1708) at javafx.graphics/javafx.scene.Parent.recomputeBounds(Parent.java:1652) at javafx.graphics/javafx.scene.Parent.doComputeGeomBounds(Parent.java:1505) at javafx.graphics/javafx.scene.Parent.access$200(Parent.java:81) at javafx.graphics/javafx.scene.Parent$1.doComputeGeomBounds(Parent.java:117) at javafx.graphics/com.sun.javafx.scene.ParentHelper.computeGeomBoundsImpl(ParentHelper.java:86) at javafx.graphics/com.sun.javafx.scene.NodeHelper.computeGeomBounds(NodeHelper.java:117) at javafx.graphics/javafx.scene.Node.updateGeomBounds(Node.java:3833) at javafx.graphics/javafx.scene.Node.getGeomBounds(Node.java:3795) at javafx.graphics/javafx.scene.Node.updateBounds(Node.java:771) at javafx.graphics/javafx.scene.Parent.updateBounds(Parent.java:1839) at javafx.graphics/javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2522) at javafx.graphics/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:410) at java.base/java.security.AccessController.doPrivileged(Native Method) at javafx.graphics/com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:409) at javafx.graphics/com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:436) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:518) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:498) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:491) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:319) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175) at java.base/java.lang.Thread.run(Thread.java:844)

Помогите пожалуйста. Не пойму что не так?

Answer 1

вот всё, я нашел ошибку.Я не там запускал новий поток ( он запускался когда я наводил на картинку, а не кликал) и изза этого, когда я наводил на картинку запускался ещё один поток

READ ALSO
Сделать фоновое изображение по центру и на весь экран

Сделать фоновое изображение по центру и на весь экран

Как сделать фоновое изображение по центру и на весь экран??? И чтобы контент был посередине, как у хедера? Сначала у меня получись это сделать,...

274
Появляется outline при наведении.

Появляется outline при наведении.

Появилась странная проблема -- в хэдере при наведении на объекты появляется белый outlineЯ нигде не писал outline, но и если написать *{ outline: none; }, то всё...

223
Не работает React Slick, сделал npm install react-slick и npm install slick-carousel

Не работает React Slick, сделал npm install react-slick и npm install slick-carousel

Взял код из Example в репозитории react-slick гитхаба, но он отказывается работать, появляются точки и дикий горизонтальный скроллПРоект был создан...

252