반응형
1. Thread를 상속받아 1초 단위 타이머 스레드 만들기
package hello;
import java.awt.*;
import javax.swing.*;
class TimerThread extends Thread {
private JLabel timerLabel;
public TimerThread(JLabel timerLabel) {
this.timerLabel = timerLabel;
}
public void run() {
int n=0, min=0;
while(true) {
//timerLabel.setText(Integer.toString(n));
String str = String.format("%02d:%02d",n, min);
timerLabel.setText(str);
min++;
if(min == 60) {
min=0;
n++;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
return;
}
}
}
}
public class TimerThreadEx extends JFrame {
public TimerThreadEx() {
setTitle("Thread를 상속받은 타이머 스레드 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JLabel timerLabel = new JLabel();
timerLabel.setFont(new Font("Gothic", Font.ITALIC, 80));
c.add(timerLabel);
TimerThread th = new TimerThread(timerLabel);
setSize(250,150);
setVisible(true);
th.start();
}
public static void main(String[] args) {
new TimerThreadEx();
}
}
package hello;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class TimerRunnable implements Runnable {
private JLabel timerLabel;
public TimerRunnable(JLabel timerJLabel) {
this.timerLabel = timerJLabel;
}
@Override
public void run() {
int n=0;
while(true) {
timerLabel.setText(Integer.toString(n));
n++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
return;
}
}
}
}
public class ThreadInterruptEx extends JFrame{
private Thread th;
public ThreadInterruptEx() {
setTitle("threadInterruptEx에제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JLabel timerLabel = new JLabel();
timerLabel.setFont(new Font("Gothic", Font.ITALIC, 80));
TimerRunnable runnable = new TimerRunnable(timerLabel);
th = new Thread(runnable);
c.add(timerLabel);
JButton btn = new JButton("kill timer");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
th.interrupt();
JButton btn = (JButton)e.getSource();
btn.setEnabled(false);
}
});
c.add(btn);
setSize(300,170);
setVisible(true);
th.start();
}
public static void main(String[] args) {
new ThreadInterruptEx();
}
}
반응형
'JAVA' 카테고리의 다른 글
[자바] 입출력, 자바의 IO패키지 (0) | 2020.01.19 |
---|---|
[자바]이벤트와 메뉴 (0) | 2020.01.18 |
[자바] Gui 프로그래밍 (0) | 2020.01.18 |