java监视系统内存状态小程序

来源:互联网 发布:现在学php有前途吗 编辑:程序博客网 时间:2024/05/21 08:48

动态显示了当前机器内存的使用情况,并且不断刷新空闲内存所占比例,程序运行的结果如下图所示:

                        java监视系统内存状态小程序

主要应用:

(1)多线程的使用

(2)getRuntime()方法的使用

程序源代码如下:

MainFrame.java

package jmemorydemo;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class MainFrame extends JFrame{
 
 private JPanel contentPane;
 private BorderLayout borderLayout1 = new BorderLayout();
 private JProgressBar jProgressBar1 = new JProgressBar();
 private JLabel jLabel1 = new JLabel();
 private JLabel jLabel2 = new JLabel();
 
 //构造方法
 public MainFrame(){
  enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  try{
   jbInit();
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 
 public void jbInit()throws Exception{
  contentPane = (JPanel)this.getContentPane();
  contentPane.setLayout(borderLayout1);
  this.setSize(new Dimension(304,215));
  this.setTitle("内存监视演示");
  jLabel1.setFont(new java.awt.Font("Dialog", 0, 14));
  jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
  jLabel1.setText("Memory Monitor");
  //将进度设置成垂直状态
  jProgressBar1.setOrientation(JProgressBar.VERTICAL);
  jProgressBar1.setFont(new java.awt.Font("Dialog",0,14));
  jProgressBar1.setToolTipText("");
  //设置进度条能够显示字符串文本
  jProgressBar1.setStringPainted(true);
  
  jLabel2.setFont(new java.awt.Font("Dialog", 0, 14));
  jLabel2.setText("");
  contentPane.add(jProgressBar1, BorderLayout.CENTER);
  contentPane.add(jLabel1, BorderLayout.NORTH);
  contentPane.add(jLabel2, BorderLayout.SOUTH);
  //调用类ProgressThread
  ProgressThread pThread = new ProgressThread(this.jProgressBar1, this.jLabel2);
  pThread.start();  
 }
 
 //覆盖方法processWindowEvent(WindowEvent e),当窗口关闭时,程序能够正常结束
 public void processWindowEvent(WindowEvent e){
  super.processWindowEvent(e);
  if(e.getID() == WindowEvent.WINDOW_CLOSED){
   System.exit(0);
  }
 }
}
ProgressThread.java

package jmemorydemo;

import javax.swing.*;

public class ProgressThread extends Thread{
 
 JProgressBar pBar;//进度条
 JLabel label;//标签
 public ProgressThread(JProgressBar pBar, JLabel label){
  this.pBar = pBar;
  this.label = label;
 }
 
 public void run(){
  int min = 0;
  int max = 100;
  int free = 0;
  int totle = 0;
  int status = 0;
  pBar.setMinimum(min);//设置进度条的最小长度为0
  pBar.setMaximum(max);//设置进度条的最大长度为100
  pBar.setValue(status);//设置进度条的当前的值
  while(true){
   try{
    //获取内存的总内存数
    totle = (int)(Runtime.getRuntime().totalMemory()/1024);
    //获取空闲的内存数
    free = (int)(Runtime.getRuntime().freeMemory()/1024);
   }catch(Exception e){
    e.printStackTrace();
   }
   //设置标签的显示文本内容
   label.setText("Free Memory: " + (int)(Runtime.getRuntime().freeMemory()/1024) + "K"
                           + " Totle Memory Allocated: "
                           + (int)(Runtime.getRuntime().totalMemory()/1024) + "K");
   status = (int)(free * 100 / totle);
   pBar.setValue(status);
   //设置进度条内容
   pBar.setString("Free Memory " + status + "%");
   try{
    Thread.sleep(1000);
   }catch(InterruptedException err){
    err.printStackTrace();
   }
  }
 }

}

JmemoryDemo.java

package jmemorydemo;

import java.awt.*;

public class JMemoryDemo {
 private boolean packFrame = false;
 //构造方法
 public JMemoryDemo(){
  MainFrame frame = new MainFrame();
  //校验frame的预设值
  if(packFrame){
   frame.pack();
  }else{
   frame.validate();
  }
  //让主窗口启动后位于屏幕的中央
  //去的屏幕的长度和宽度
  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  //取得当前frame的长度和宽度
  Dimension frameSize = frame.getSize();
  if(frameSize.height > screenSize.height)frameSize.height = screenSize.height;
  if(frameSize.width > screenSize.width)frameSize.width = screenSize.width;
  //设置frame显示的位置
  frame.setLocation((screenSize.width - frameSize.width)/2,
              (screenSize.height - frameSize.height)/2);
  frame.setVisible(true);  
 }
 
 public static void main(String[] args){
  new JMemoryDemo();
 }

}