Merhabalar, ProgressBar öğrenmeye çalışıyorum söyle bir sorun ile karşılaştım:
İlk başta gayet iyi çalışıyordu, progressbar doluyordu. Fakat bunu buton kullanarak yapmak istediğim for döngüsünü actionlistener’in içine aldığımda çalışıyor fakat progressbar’ın dolmasını göremiyorum.(direkt %100 oluyor).
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
public class ProgresssBarr {
public static void main(String[]args) {
JFrame frame = new JFrame("xxx");
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setSize(600,400);
JProgressBar testp = new JProgressBar(0,100000);
testp.setBounds(0, 0, 600, 20);
testp.setValue(0);
testp.setStringPainted(true);
JButton run = new JButton("Başlat");
run.setBounds(140, 50, 300, 20);
frame.add(testp);
frame.add(run);
frame.setVisible(true);
run.addActionListener((ActionEvent e)->{
for(int i = 0; i <= 100000; i++) {
testp.setValue(i);
System.out.println(i+" Toplama: "+pbtest.toplama()+" > "+testp.getString());
System.out.println(i+" Çıkarma: "+pbtest.toplama()+" > "+testp.getString());
System.out.println(i+" Çarpma: "+pbtest.toplama()+" > "+testp.getString());
System.out.println(i+" Bölme: "+pbtest.toplama()+" > "+testp.getString());
}
});
}
}
Buda diğer class’ın kodları:
import java.util.Random;
public class pbtest {
static Random r = new Random();
public static int toplama() {
int x = r.nextInt(1000)+1;
int y = r.nextInt(1000)+1;
return x+y;
}
public static int cikarma() {
int x = r.nextInt(1000)+1;
int y = r.nextInt(1000)+1;
return x-y;
}
public static int carpma() {
int x = r.nextInt(1000)+1;
int y = r.nextInt(1000)+1;
return x*y;
}
public static int bolme() {
int x = r.nextInt(1000)+1;
int y = r.nextInt(100)+1;
return x/y;
}
}
Javayı bilmiyorum kodlara bakmadım ama sorun şu olabilir: Progressbar zaten anında dolmak zorundadır.Progressbar’ın dolması için dosya filan oluştursun.Dosya oluştuktan sonra %100 oluyor ise sıkıntı yok demektir
Sanmıyorum çünkü eğer hızlı işlendiğinden olsa actionlistener’in içine koymadan öncede olurdu ama onda olmuyor sonuçta aynı kod tek fark butona basmam.
for döngüsünün içine söyle bir şey ekledim lakin ama bu sefer ProgressBar titrek oldu. Büyük ihtimal ile for döngüsüyle her seferinde yenilendiği içindir
Siz cevabı yazmadan önce acaba arayüz kütüphanesi ayrı bir thread olarak mı çalışıyor diye düşünmüştüm. Bu açıklar belki durumu, sonuçta butonun bağlı olduğu fonksiyon da bu thread’da çalıştırıldığı için arayüzü dondurur.