У меня есть программа, которая загружает файл, когда пользователь нажимает кнопку. Он должен отображать прогресс по мере загрузки. Кажется, я не могу установить значение индикатора выполнения из контекста, в котором я нахожусь. Вот часть основного класса:
private void InstallButtonMouseReleased(java.awt.event.MouseEvent evt) {
String remotePath = "http://download1082.mediafire.com/ei4y11f2aasg/q9c32rwtqlrz78o/Ion-Pro";
String localPath = location + "/IonPro";
new Thread(new Downloader(localPath, remotePath)).start();
}
public void updateProgressBar(int percent) {
jProgressBar1.setValue(percent);
System.out.println(percent);
}
Класс загрузчика:
public class Downloader implements Runnable {
String remotePath;
String localPath;
double Percentace;
public Downloader(String localPath, String remotePath) {
this.localPath = localPath;
this.remotePath = remotePath;
}
@Override
public void run() {
BufferedInputStream in = null;
FileOutputStream out = null;
try {
URL url = new URL(remotePath);
URLConnection conn = url.openConnection();
int size = conn.getContentLength();
if (size < 0) {
System.out.println("Could not get the file size");
} else {
System.out.println("File size: " + size);
}
in = new BufferedInputStream(url.openStream());
out = new FileOutputStream(localPath);
byte data[] = new byte[1024];
int count;
double sumCount = 0.0;
while ((count = in.read(data, 0, 1024)) != -1) {
out.write(data, 0, count);
sumCount += count;
if (size > 0) {
Percentace = sumCount / size * 100.0;
int percentace = (int)Math.round(Percentace);
IonInstaller installer = new IonInstaller();
installer.updateProgressBar(percentace);
}
}
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
} finally {
if (in != null)
try {
in.close();
} catch (IOException e3) {
e3.printStackTrace();
}
if (out != null)
try {
out.close();
} catch (IOException e4) {
e4.printStackTrace();
}
}
}
}
Я использую IDE NetBeans, поэтому большая часть обработки GUI сделана для меня.