반응형
자바에서는 Timer 와 TimerTask 를 이용한 주기적인 작업이 가능합니다.
예를 들어 1분에 한번씩 특정 디렉토리를 감시한다던지.
매일 밤 12시에 백업을 실시한다던지...
이런 기능이 필요하다면 Timer 와 TimerTask 를 사용해보세요.
아래 예제는 1초에 한번씩 카운트 라벨이 바뀌는 스윙 프로그램입니다.

import java.util.TimerTask;
import javax.swing.*;
import java.awt.*;
import java.util.Timer;

public class LabelChange {

public static void main(String[] args) {
MyFrame frame = new MyFrame();

Timer timer = new Timer();
//TimerTask, Delay시간, 동작주기
timer.schedule(new LabelChangeTimerTask(frame), 0, (1 * 1000));
}
}

class MyFrame
extends JFrame {

private JLabel label = null;

public MyFrame() {
this.getContentPane().setLayout(new BorderLayout());
label = new JLabel();
this.getContentPane().add(label, BorderLayout.CENTER);
this.setSize(200, 200);
this.setVisible(true);
}

public void setLabelValue(String msg) {
label.setText(msg);
}
}

class LabelChangeTimerTask
extends TimerTask {

private MyFrame frame = null;
private static int cnt = 0;

public LabelChangeTimerTask(MyFrame frame) {
this.frame = frame;
}

public void run() {
cnt++;
frame.setLabelValue(cnt + "");
}
}
<출처:ibm.com/developerworks/kr>
반응형

import java.awt.*;
import javax.swing.*;

public class JImagePanel extends JPanel {
Image image;

public JImagePanel(Image image) {
this.image = image;
}

public void paintComponent(Graphics g) {
g.drawImage(this.image, 0, 0, this);
}

public static void main(String[] args) {
JFrame frame = new JFrame();
ImageIcon icon = new ImageIcon("d:\\java.gif");
JImagePanel panel = new JImagePanel(icon.getImage());
frame.getContentPane().add(panel);
frame.setSize(300,300);
frame.setVisible(true);
}
}
<출처:ibm.com/developerworks/kr>

반응형
자바 API에서 제공하는 것은 가상머신 관련된 것 뿐이라서 실제 메모리하고는 상관이 없습니다.

JNI를 사용해도 되겠지만 C 프로그램과는 친하고 싶지 않아서리... ^^ 꽁수를 부려봤습니다.



윈도우 플랫폼의 메모리 사용량은 systeminfo 라는
윈도우 명령을 사용해서 가능하기는 합니다만...
윈도 XP 이상에서만 지원되죠. 98 같은데서는 안됩니다 =.=

import java.io.*;

public class MemoryInfo {
public MemoryInfo() {
}
public static void main(String[] args) {
try {
String output, err;
String[] cmd = {"systeminfo.exe"};
Process proc = Runtime.getRuntime().exec(cmd);

BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader stderr = new BufferedReader(new InputStreamReader(proc.getErrorStream()));

try {
while ( (output = stdout.readLine()) != null) {
if (output.indexOf("메모리") > 0) {
System.out.println(output);
}
}
while ( (err = stderr.readLine()) != null) {
System.out.println(err);
}
}
catch (IOException e) {
System.exit(0);
}
}
catch (IOException e1) {
System.err.println(e1);
System.exit(1);
}
}
}

============== 실행 결과 =============

총 실제 메모리: 511MB
사용 가능한 실제 메모리: 158MB
가상 메모리: 최대 크기: 2,048MB
가상 메모리: 사용 가능: 2,004MB
가상 메모리: 사용 중: 44MB
<출처:ibm.com/developerworks/kr>

+ Recent posts