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

进程与线程

开发平台:

Java

  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. public class VisualSuspendResume 
  5. extends JPanel 
  6. implements Runnable {
  7. private static final String[] symbolList = 
  8. { "|", "/", "-", "\", "|", "/", "-", "\" };
  9. private Thread runThread;
  10. private JTextField symbolTF;
  11. public VisualSuspendResume() {
  12. symbolTF = new JTextField(); 
  13. symbolTF.setEditable(false);
  14. symbolTF.setFont(new Font("Monospaced", Font.BOLD, 26));
  15. symbolTF.setHorizontalAlignment(JTextField.CENTER);
  16. final JButton suspendB = new JButton("Suspend");
  17. final JButton resumeB = new JButton("Resume");
  18. suspendB.addActionListener(new ActionListener() {
  19. public void actionPerformed(ActionEvent e) {
  20. suspendNow();
  21. }
  22. });
  23. resumeB.addActionListener(new ActionListener() {
  24. public void actionPerformed(ActionEvent e) {
  25. resumeNow();
  26. }
  27. });
  28. JPanel innerStackP = new JPanel();
  29. innerStackP.setLayout(new GridLayout(0, 1, 3, 3));
  30. innerStackP.add(symbolTF);
  31. innerStackP.add(suspendB);
  32. innerStackP.add(resumeB);
  33. this.setLayout(new FlowLayout(FlowLayout.CENTER));
  34. this.add(innerStackP);
  35. }
  36. private void suspendNow() {
  37. if ( runThread != null ) { // avoid NullPointerException
  38. runThread.suspend();
  39. }
  40. }
  41. private void resumeNow() {
  42. if ( runThread != null ) { // avoid NullPointerException
  43. runThread.resume();
  44. }
  45. }
  46. public void run() {
  47. try {
  48. // Store this for the suspendNow() and 
  49. // resumeNow() methods to use.
  50. runThread = Thread.currentThread();
  51. int count = 0;
  52. while ( true ) {
  53. // each time through, show the next symbol
  54. symbolTF.setText(
  55. symbolList[ count % symbolList.length ]);
  56. Thread.sleep(200);
  57. count++;
  58. }
  59. } catch ( InterruptedException x ) {
  60. // ignore
  61. } finally {
  62. // The thread is about to die, make sure that the 
  63. // reference to it is also lost.
  64. runThread = null;
  65. }
  66. }
  67. public static void main(String[] args) {
  68. VisualSuspendResume vsr = new VisualSuspendResume();
  69. Thread t = new Thread(vsr);
  70. t.start();
  71. JFrame f = new JFrame("Visual Suspend Resume");
  72. f.setContentPane(vsr);
  73. f.setSize(320, 200);
  74. f.setVisible(true);
  75. f.addWindowListener(new WindowAdapter() {
  76. public void windowClosing(WindowEvent e) {
  77. System.exit(0);
  78. }
  79. });
  80. }
  81. }