私は基本的に、郵便番号の貼り付けテキストの各行をチェックし、データベース内のローカライゼーションをチェックする小さなアプリケーションをJavaで構築しています。処理中にプログレスバーを更新する
すべて正常に動作しますが、チェックプロセスに時間がかかることがあります。また、行がチェックされるたびにプログレスバーを追加して値を更新したいと考えています。
この件に関する他のスレッドを読んでいるにもかかわらず、プロセスが終了したときに進捗バーのみが更新される理由がわかりません。 私は、GUIをフリーズしない何らかの方法でプログレスバーを自分のプロセスから切り離す必要があることを知りましたが、実際にいくつかの助けをして、それを行う方法と理由を説明することに感謝します。だれでも助けてくれてありがとう!
ここにメインコードがあります。プログレスバーで進捗状況を更新するプロセスは、button2リスナーが起動したプロセスです。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import static sun.security.krb5.Confounder.intValue;
public class mainform {
private JButton button1;
private JTextField txt_1;
private JPanel panelmain;
private JLabel outlab;
private JTextField codepostal;
private JTextArea paste_lignes;
private JButton button2;
private JProgressBar progressBar1;
private JLabel progress;
public mainform() {
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String[] lines = paste_lignes.getText().split("\\n");
String resultQPV = "";
int numLines = 0;
for (int i = 0; i < lines.length; i++) {
numLines++;
}
System.out.println(numLines);
for (int i = 0; i < lines.length; i++) {
String adresse = "";
String CP = "";
String[] cells = lines[i].split("\\t");
float percent_d = ((float) i/(float) numLines) * 100;
System.out.println(i + " " + numLines + " " + percent_d);
int percent = (int) percent_d;
progressBar1.setValue(percent);
try {
Thread.sleep(50);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
for (int j = 0; j < cells.length; j++) {
if (CheckAdresse.identify_me(cells[j]) == "CP") {
CP = cells[j];
}
if (CheckAdresse.identify_me(cells[j]) == "adresse") {
adresse = cells[j];
}
}
String QPV = null;
String voie = null;
String numero = null;
if (adresse == "" || CP == "") {
QPV = "erreur sur la ligne";
} else {
voie = ParserAdresse.voie(adresse);
numero = Integer.toString(ParserAdresse.numVoie(adresse));
try {
QPV = CheckAdresse.Check(CP, voie, numero);
} catch (IOException e1) {
e1.printStackTrace();
}
}
resultQPV = resultQPV + QPV + "\n";
//System.out.println(i + " " + percent + " " + voie + " " + CP + " " + numero);
}
paste_lignes.setText(resultQPV);
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame("mainform");
frame.setContentPane(new mainform().panelmain);
frame.setSize(900, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
下のリンクを読むことができますあなた[例](http://stackoverflow.com/questions/5691979/progressbar-doesnt-change-its-value-in-java?rq=1) – Visveswaran
それはトリックでした!このリンクをありがとう、参照スレッドのソリューションは私のために働いた! – Elyss