gpt4 book ai didi

java - 监控硬盘空间...如何实时显示信息?

转载 作者:行者123 更新时间:2023-11-30 07:33:21 25 4
gpt4 key购买 nike

我有一个带有标签文本的 java 应用程序,并显示实际剩余的硬盘空间。我创建了另一个类,一个“Runnable”类,它每 X 秒读取一次 HDD 上剩余的空间。

现在我的问题是:如何在 JFrame 的“static”标签中显示该信息?我认为最接近的事情是在“runneable”类中创建一个返回“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");
}
});
}

我还不能让它工作=/

最佳答案

您需要创建一个单独的线程在后台运行(例如使用 ScheduledExecutorService),定期收集您需要的信息,然后更新相关的 swing 组件(使用 SwingUtilities. invokeLater()).

或使用 javax.swing.Timer(正如 Kaj 在评论中指出的那样),这可能会为您简化其中的一些内容。

关于java - 监控硬盘空间...如何实时显示信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5941820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com