SecondCounterLockup.java
上传用户:songled
上传日期:2022-07-14
资源大小:94k
文件大小:1k
源码类别:

进程与线程

开发平台:

Java

  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.text.*;
  4. public class SecondCounterLockup extends JComponent {
  5. private boolean keepRunning;
  6. private Font paintFont;
  7. private String timeMsg;
  8. private int arcLen;
  9. public SecondCounterLockup() {
  10. paintFont = new Font("SansSerif", Font.BOLD, 14);
  11. timeMsg = "never started";
  12. arcLen = 0;
  13. }
  14. public void runClock() {
  15. System.out.println("thread running runClock() is " +
  16. Thread.currentThread().getName());
  17. DecimalFormat fmt = new DecimalFormat("0.000");
  18. long normalSleepTime = 100;
  19. int counter = 0;
  20. keepRunning = true;
  21. while ( keepRunning ) {
  22. try {
  23. Thread.sleep(normalSleepTime);
  24. } catch ( InterruptedException x ) {
  25. // ignore
  26. }
  27. counter++;
  28. double counterSecs = counter / 10.0;
  29. timeMsg = fmt.format(counterSecs);
  30. arcLen = ( ( ( int ) counterSecs ) % 60 ) * 360 / 60;
  31. repaint();
  32. }
  33. }
  34. public void stopClock() {
  35. keepRunning = false;
  36. }
  37. public void paint(Graphics g) {
  38. System.out.println("thread that invoked paint() is " +
  39. Thread.currentThread().getName());
  40. g.setColor(Color.black);
  41. g.setFont(paintFont);
  42. g.drawString(timeMsg, 0, 15);
  43. g.fillOval(0, 20, 100, 100);  // black border
  44. g.setColor(Color.white);
  45. g.fillOval(3, 23, 94, 94);  // white for unused portion
  46. g.setColor(Color.blue);  // blue for used portion
  47. g.fillArc(2, 22, 96, 96, 90, -arcLen);
  48. }
  49. }