ここにはたくさんのJProgressBar
質問がありますが、すべての回答を通して、自分の問題を診断できないようです。アドレス検証ソフトウェアでファイルを処理しています。[処理] ボタンをクリックすると、JProgressBar
処理された各ファイルを更新する必要があります。ボタンは次のとおりです。
private JButton getJButton0() {
...
jButton0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
jButton0ActionActionPerformed(event);
t.start();
}
...
みんなのお勧めでsetValue()
、スレッド内でメソッドを使用しました
Thread t = new Thread(){
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jProgressBar0.setValue(BulkProcessor.getPercentComplete());
}
});
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
...
BulkProcessor.getPercentComplete()
完了率を表す別のクラスから呼び出しているメソッドです。この方法をテストしたところ、正しく更新されました。問題は、ファイルの処理が完了するまでプログレス バーが更新されず、その後 100% にジャンプすることです。これが繰り返しの質問である場合は申し訳ありませんが、このサイトでいくつかの深刻な調査を行いましたが、うまくいきませんでした. どんな助けでも大歓迎です。
編集:
推奨される複製ごとに、私はこれを試しました:
public void update(){
new SwingWorker<Void,Void>() {
protected Void doInBackground() throws Exception {
jProgressBar0.setValue(BulkProcessor.getPercentComplete());
return null;
};
}.execute();
}
そして、actionPerformed()
(で切り替え)の下でこのupdate()メソッドを呼び出してみましt.start()
たupdate()
。私はまだ同じ問題を抱えています。
編集
user1676075 の推奨事項に基づいていますが、同じ問題があります:
public static void update(){
new SwingWorker<Void,Integer>() {
protected Void doInBackground() throws Exception {
do
{
percentComplete = BulkProcessor.getPercentComplete();
publish(percentComplete);
Thread.sleep(100);
} while(percentComplete < 100);
return null;
}
@Override
protected
void process(List<Integer> progress)
{
jProgressBar0.setValue(progress.get(0));
}
}.execute();
}
編集
これが私のBulkProcessor
クラスのコードです
private String getOutputLine( String searchString, String inputLine )
throws QasException
{
..(code for processing lines)..
countRecord++;
percentComplete = (int) Math.round((countRecord/totalRecord)*100);
totalRecord
BulkProcessor
私のクラスのメインクラスで更新されます
public static void main( String input, String output ){
count.clear();
try{
String inputFile = input;
String outputFile = output;
LineNumberReader lnr = new LineNumberReader(new FileReader(new File(input)));
lnr.skip(Long.MAX_VALUE);
totalRecord = lnr.getLineNumber() + 1; //line count in file
BulkProcessor bulk = new BulkProcessor(inputFile, outputFile, ConfigManager.DFLT_NAME);
bulk.process();
}catch(Exception e ){
e.printStackTrace();
}
}