Java 监视硬盘空间。。。如何实时显示信息?
我有一个带有标签文本的java应用程序,它显示了实际剩余的硬盘空间。我创建了另一个类,一个“可运行”类,它每X秒读取硬盘上剩余的空间 现在我的问题是:如何在JFrame中的“static”标签中显示该信息?我认为最有效的方法是在“runneable”类中创建一个返回“double”数字的函数,并在Java 监视硬盘空间。。。如何实时显示信息?,java,monitoring,Java,Monitoring,我有一个带有标签文本的java应用程序,它显示了实际剩余的硬盘空间。我创建了另一个类,一个“可运行”类,它每X秒读取硬盘上剩余的空间 现在我的问题是:如何在JFrame中的“static”标签中显示该信息?我认为最有效的方法是在“runneable”类中创建一个返回“double”数字的函数,并在JFrame中实例化该类,但看起来JFrame只运行一次该行,代码中没有更新 我如何监控这个?我也想监控其他变量,但这是最重要的 代码:读取硬盘空间 package gwcontrol; import
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)
谢谢
更新代码: 通过阅读,我做了以下改变: 在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());
[……]
我还不能让它工作=/您需要创建一个在后台运行的单独线程(例如,使用
ScheduledExecutorService
),定期收集您需要的信息,然后更新相关的swing组件(使用SwingUtilities.invokeLater()
)
或者使用javax.swing.Timer(正如Kaj在评论中指出的),这可能会为您简化一些操作。最后!!!感谢@jtahlborn提供的库/函数
public class ControlGUI extends javax.swing.JFrame {
pruebas prueba;
public ControlGUI() {
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch (Exception e){
System.err.println( e );
}
final 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);
prueba = new pruebas(lbl_espacio_libre);
prueba.start();
lbl_porcentaje_espacio.setText(UsedSpace*100/TotalSpace + "% del disco utilizado");
}
及
.. 或者使用java.swing.Timer。它将在正确的线程上执行。@Kaj-nifty。我不是一个真正的gui爱好者,不知道swing Timer。对代码进行了更改,谢谢,但还不能开始工作=/@Kaj,关于swing Timer,如果您必须访问网络驱动器,您可能不需要它,任何可能阻塞(或可能有故障介质,如CD/DVD/flash)的IO最好在单独的线程中运行。@bestsss。谁说count total disk space类没有在另一个线程中运行,然后总是通过一个方法公开最后的计算结果?;)
private void updateProgress(final double numero) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
lbl_espacio_libre.setText("HDD: " + numero + " Mb libres");
}
});
}
public class ControlGUI extends javax.swing.JFrame {
pruebas prueba;
public ControlGUI() {
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch (Exception e){
System.err.println( e );
}
final 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);
prueba = new pruebas(lbl_espacio_libre);
prueba.start();
lbl_porcentaje_espacio.setText(UsedSpace*100/TotalSpace + "% del disco utilizado");
}
package gwcontrol;
import java.io.File;
import javax.swing.SwingUtilities;
public class pruebas extends Thread implements Runnable {
float FreeSpace;
File file;
javax.swing.JLabel label;
public pruebas(javax.swing.JLabel label){
this.label = label;
file = new File("C:\\");
}
public void run() {
while (true) {
try {
this.FreeSpace = (float) file.getFreeSpace() / 1024 / 1024 / 1024;
System.out.println("Espacio libre: " + this.FreeSpace);
Thread.sleep(1000);
} catch (Exception e) {
System.out.println("Problema: " + e);
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setText("HDD: " + FreeSpace + " Mb libres");
}
});
}
}
}