Я сделал короткую анимацию Java, которая запускается в новом потоке. Анимация получается на холсте. Он освежает каждые 100 мс. На некоторых тиках прямоугольник не отображается. (На связанном видео вы можете его увидеть) Я попытался найти решения в Интернете, но из-за моего стандартного английского языка я не знал, как правильно это сделать Google.Части Java Animation dissappear
package com.felix.pack;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
public class Draw extends Canvas implements Runnable {
Thread x;
int xpos = 0;
int ypos = 0;
JFrame window;
boolean runs = false;
Graphics g;
public Draw() {
doWindow();
setPreferredSize(new Dimension(500,500));
window.add(this);
}
@Override
public void run() {
g = getGraphics();
while (runs) {
paint(g);
try {
Thread.sleep(100);
xpos +=1;
ypos +=1;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("Fail");
stop();
}
}
}
private void doWindow(){
window = new JFrame();
window.setSize(500, 500);
window.setTitle("Hey");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
public void start() {
if (runs == false) {
runs = true;
x = new Thread(this);
x.start();
} else {
System.out.println("Thread läuft bereits");
}
}
public void stop() {
runs = false;
try {
x.join();
System.out.println("Thread erfolgreich geschlossen");
} catch(Exception e) {
System.out.println("Closing thread didnt work");
}
}
public void paint(Graphics g){
g.clearRect(0, 0, 500, 500);
g.fillRect(xpos, ypos, 400, 400);
}
}
В моем основном классе я начинаю запуск метода, который содержится в этом классе. Детали, которые вам нужно посмотреть (я думаю), - это метод run() и метод рисования. Остальные - это просто помощь, чтобы поток начал и остановился безопасно.
https://www.youtube.com/watch?v=pAFng8mOcOQ
Вот видео. Я надеюсь, что вы, ребята, можете помочь мне, и им жаль, если это глупый вопрос :)