fillrect()、drawrect()、およびthread.sleep()によってプログレスバーが作成されています。問題は、プログラムを閉じたり、フレームのサイズを変更するときに、プログレスバーが停止してプログラムが応答しないことです。私はJPregressBar()を使わずにこの進捗バーを行う別の方法を探していますが、私が閉じるとフレームが閉じます。
これはコードです:プログラムを閉じるときに応答しない
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、ヘッドアップのおかげで。私は私のコメントを削除するつもりです! – Floam
私はこの質問者にとって役に立つリンクを見つけました:http://www.nurkiewicz.com/2014/05/interruptedexception-and-interrupting.html – Floam
イベントで 'Thread.sleep'を呼び出すべきではありませんディスパッチスレッド( 'paint'メソッド内)また、現在オーバーライドしているペインティングの動作を許可するには、 'super.paint(g)'を呼び出す必要があります。最後に、ウィンドウではなく、 'paintComponent'を使って' JPanel'を使ってペインティングする必要があります。私は[The Java Tutorial - Custom Painting](https://docs.oracle.com/javase/tutorial/uiswing/painting/)をチェックすることをお勧めします。 –