У меня есть приложение Java с текстом метки и показывает фактическое оставшееся место на жестком диске. Я создал другой класс, «Runnable», который каждые X секунд читает, сколько места осталось на жестком диске.
Теперь моя проблема: как я могу показать на «статическом» ярлыке в JFrame эту информацию? Самое близкое, что я подумал, должно сработать, это создать функцию в классе «runneable», возвращающую «двойное» число, и создать экземпляр этого класса в JFrame
, но похоже, что JFrame запускается только однажды в этой строке, и обновления нет в коде.
Как я могу контролировать это? Я тоже хочу отслеживать другие переменные, но это начало.
Код: для чтения места на жестком диске
package gwcontrol;
import java.io.File;
public class Analisis implements Runnable{
long delay;
File file = new File("C:\\");
float FreeSpace;
float TotalSpace;
public Analisis(long delay){
this.delay = delay;
//setDaemon(true);
}
public void run(){
try {
while (true) {
this.FreeSpace = (float) file.getFreeSpace() / 1024 / 1024 / 1024;
System.out.println("Espacio libre: " + this.FreeSpace);
Thread.sleep(this.delay);
}
} catch (InterruptedException e) {
//System.out.println("Error" + e);
}
}
public float getFreeSpace(){
return this.FreeSpace;
}
public float getTotalSpace(){
return this.TotalSpace;
}
}
Код: GUI (не весь код, только необходимый IMO)
public class ControlGUI extends javax.swing.JFrame {
/** Creates new form ControlGUI */
public Analisis analisis = new Analisis(1000);
public ControlGUI() {
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch (Exception e){
System.err.println( e );
}
new Thread(analisis).start();
File file = new File("C:\\");
float FreeSpace = (float) file.getFreeSpace() / 1024 / 1024 / 1024;
float TotalSpace = (float) file.getTotalSpace() / 1024 / 1024 / 1024;
float UsedSpace = TotalSpace - FreeSpace;
setTitle("GWControl - A+V - v.1.0");
initComponents();
jProgressBar1.setMaximum((int)TotalSpace);
jProgressBar1.setMinimum(0);
jProgressBar1.setValue((int)UsedSpace);
lbl_espacio_libre.setText("HDD: " + analisis.getFreeSpace() + " Mb libres");
lbl_porcentaje_espacio.setText(UsedSpace*100/TotalSpace + "% del disco utilizado");
}
Спасибо !!
Обновленный код:
Читая ЗДЕСЬ , я внес эти изменения:
в ControlGUI.java:
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ControlGUI control = new ControlGUI();
control.setVisible(true);
}
});
}
и
Внутри конструктора:
this.updateProgress(analisis.getFreeSpace());
[...]
private void updateProgress(final double numero) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
lbl_espacio_libre.setText("HDD: " + numero + " Mb libres");
}
});
}
Я пока не могу заставить его работать = /