2011-05-09 2 views
2

레이블 텍스트가있는 Java 응용 프로그램이 있으며 실제로 남아있는 하드 디스크 공간을 보여줍니다. 또 다른 클래스 인 "Runnable"을 만들었습니다.이 클래스는 HDD에 남은 공간을 X 초마다 읽습니다.HDD 공간 모니터링 ... 실시간으로 정보를 표시하는 방법은 무엇입니까?

내 문제 : JFrame의 "정적"레이블에 그 정보를 어떻게 표시 할 수 있습니까? 내가 생각해야 할 가장 가까운 것은 "double"숫자를 반환하는 "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; 
} 

} 

코드 HDD 공간 : 그래픽 사용자 인터페이스 (모든 코드, 그냥 필요 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"); 

} 

감사합니다!


업데이트 코드

: 생성자 내부

public static void main(String args[]) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      ControlGUI control = new ControlGUI(); 
      control.setVisible(true); 
     } 
    }); 
} 

및 :

ControlGUI.java에서

:

this.updateProgress(analisis.getFreeSpace()); 

HERE를 읽어, 나는 이러한 변경을

[...]

private void updateProgress(final double numero) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      lbl_espacio_libre.setText("HDD: " + numero + " Mb libres"); 
     } 
    }); 
} 

나는 아직 =/

당신이 백그라운드에서 실행되는 별도의 스레드를 만들 필요가
+0

당신이 몇 가지 코드를 게시 할 수에 대한 @jtahlborn하는? – Kaj

답변

4

작업 얻을 수 없다 (예를 들어, ScheduledExecutorService)을 사용하여 필요한 정보를 주기적으로 수집 한 다음 관련 스윙 구성 요소 (SwingUtilities.invokeLater() 사용)를 업데이트합니다.

또는 javax.swing.Timer를 사용하십시오. (주석에 Kaj가 지적한대로) 아마도 일부를 단순화 할 것입니다.

+2

.. 또는 java.swing.Timer를 사용하십시오. 올바른 스레드에서 실행됩니다. – Kaj

+0

@ Kaj - nifty. 나는 진짜로 남자가 아니고 스윙 타이머에 대해 몰랐다. – jtahlborn

+0

코드를 변경 했으니 까, 고맙지 만 아직 작업하지 못함 =/ – punchi

0

마지막으로 !!! 덕분에 도서관/기능

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"); 
      } 
     }); 
    } 
    } 
} 
관련 문제