スレッドという機能を使うとプログラムの実行を休止したり、複数のメソッドを同時実行できるようになります。
スレッドを使って1秒間に1個ずつランダムは大きさ、位置、色の円を描くプログラムです。
// 1秒間に1個ずつランダムな大きさと色の円を描く import java.applet.*; import java.awt.*; // <applet code="ap_thread_oval" width="300" height="300"></applet> public class ap_thread_oval extends Applet implements Runnable { Thread t; public void init() { // スレッドの開始 t = new Thread(this); t.start(); } public void run() { try { while(true){ // 再描画要求 repaint(); // 1000ミリ秒(1秒)休止する Thread.sleep(1000); } } catch (Exception e){ } } // 描画の更新 オーバーライドすることでアプレット全体の表示消去を抑止する public void update(Graphics g){ paint(g); } public void paint(Graphics g){ // アプレットのサイズを取得 Dimension d = getSize(); // 円の中心、半径、色を乱数で作成 int x = (int)(Math.random() * d.width); int y = (int)(Math.random() * d.height); int r = (int)(Math.random() * d.width / 2); int R = (int)(Math.random() * 255); int G = (int)(Math.random() * 255); int B = (int)(Math.random() * 255); // 色の設定 setBackground(new Color(10, 10, 10));
g.setColor(new Color(R, G, B)); // 円の描画 g.drawOval(x - r, y - r, 2 * r, 2 * r); } }
スレッドを使い、1秒おきに日付と時間を取得し、表示しています。
// デジタル時計アプレット import java.applet.*; import java.awt.*; import java.util.*; // <applet code="ap_thread_clock" width="300" height="150"></applet> public class ap_thread_clock extends Applet implements Runnable { Thread t; public void init() { // スレッドの開始 t = new Thread(this); t.start(); } public void run() { try{ while (true) { // 再描画要求 repaint(); // 1000ミリ秒間の休止 t.sleep(1000); } } catch (Exception e){ } } public void paint(Graphics g){ int Year, Month, Date, Hour, Minute, Second, AMPM; String S_AMPM; Calendar C = Calendar.getInstance(); Year = C.get(C.YEAR); Month = C.get(C.MONTH) + 1; Date = C.get(C.DATE); AMPM = C.get(C.AM_PM); Hour = C.get(C.HOUR); Minute = C.get(C.MINUTE); Second = C.get(C.SECOND); if(AMPM == C.AM) { S_AMPM = "AM "; } else { S_AMPM = "PM "; } setBackground(Color.white); g.setFont(new Font("Serif", Font.BOLD, 36)); g.drawString(Year + "/" + Month + "/" + Date, 10, 40); g.drawString(S_AMPM + Hour + ":" + Minute + ":" + Second, 10, 80); } }