Ich habe einen Fortschrittsbalken von fillrect(), drewrect() und thread.sleep() gemacht. Das Problem ist, dass, wenn ich das Programm schließen oder die Größe des Rahmens ändern möchte, der Fortschrittsbalken anhält und das Programm nicht reagiert. Ich suche nach einer alternativen Möglichkeit, diesen Fortschrittsbalken zu erstellen, ohne die JRegressBar() zu verwenden, und wenn ich drücke, wird der Rahmen geschlossen.
Dies ist der Code:Nicht zu beantworten, wenn Sie das Programm schließen
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
public class Main extends JFrame{
private int num1, num2, width=0, g1;
public Main(){
this.setTitle("Progressbar with rectangles");
this.setSize(500, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(true);
}
public void paint(Graphics g){
g.setColor(Color.RED);
g.drawRect(40, 40, 300, 20);
g.setColor(Color.BLACK);
for(width=0; width<300; width++){
g.fillRect(40,40,width,20);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[]args){
Main m=new Main();
}
}
@ Vogel612, danke für die Köpfe hoch. Ich werde meinen Kommentar entfernen! – Floam
Ich habe diesen Link gefunden, der dem Fragesteller nützlich sein könnte: http://www.nurkiewicz.com/2014/05/interruptedexception-and-interrupting.html – Floam
Sie sollten 'Thread.sleep' nicht auf dem Event aufrufen Dispatch Thread (in der 'paint' Methode). Sie sollten auch 'super.paint (g)' aufrufen, damit das Malverhalten, das Sie gerade überschreiben, ausgeführt werden kann. Zuletzt sollten Sie über 'JPanel' mit' paintComponent' malen, kein Fenster. Ich empfehle das [Java Tutorial - Benutzerdefinierte Malerei] (https://docs.oracle.com/javase/tutorial/uiswing/painting/) –