Я разрезаю большой файл на блоки и хочу показать скорость выполнения.когда я нажимаю кнопку startCut, вот код для выполнения:
FileInputStream in = new FileInputStream(sourceFile);
int blockSize = (int)(getSelectedBlockSize() * 1024);
int totalBlock = Integer.parseInt(txtNumberOfBlock.getText());
byte[] buffer = new byte[blockSize];
int readBytes = in.read(buffer);
int fileIndex = 1;
class PBThread extends Thread
{
@Override
public void run()
{
while(true)
{
pbCompleteness.setValue(value);
//value++; //place A
System.out.println(value);
if (value >= 100)
break;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
value = 0;
PBThread pbThread = new PBThread();
pbThread.start();
while(readBytes != -1)
{
File file = new File(targetFilePath + fileIndex);
FileOutputStream out = new FileOutputStream(file);
out.write(buffer, 0, readBytes);
out.close();
value = (int)(fileIndex / (double)totalBlock * 100);// place B
readBytes = in.read(buffer);
fileIndex++;
}
Я меняю значение индикатора выполнения за пределами метода run в месте B, проблема в том, что - grogressbar показывает только два состояния:0% и 100%.но, если я уберу код в месте B и изменим значение индикатора выполнения внутри метода run в месте A, проблема исчезнет.я знаю, что с SwingWorker
это можно легко исправить, но я хочу знать, почему это происходит, хотя я изменяю значение в методе run, когда я распечатываю его в методе run, оно действительно меняется.Как я могу исправить эту проблему при изменении значения вне метода run?