我有一個帶有標籤文本的java應用程序,並顯示實際剩餘的硬盤空間。我創建了另一個類,一個「Runnable」,每X秒讀一次硬盤剩餘多少空間。監控硬盤空間......如何實時顯示信息?
現在我的問題:我該如何顯示JFrame中的「statatic」標籤,該信息?我認爲最接近的工作應該是在「可運行」類中創建一個函數,返回「double」數字,並在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");
}
謝謝!
更新的代碼:
通過閱讀HERE,我做了這些變化:
在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");
}
});
}
我無法得到它的工作尚未=/
你可以張貼一些代碼? – Kaj 2011-05-09 20:02:43