动态显示了当前机器内存的使用情况,并且不断刷新空闲内存所占比例,程序运行的结果如下图所示:
主要应用:
(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();
}
}