Swing и потоки - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день. Пытаюсь написать приложение, которое должно делать следующее: кнопка Старт запускает поток для ПРогрессбара, он заполняется; при повторном нажатии поток должен остановиться. У меня получается что не только прогресс бар засыпает, но и все приложение. Что подправить? Код
Листинг программы
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.MouseEvent;
  4. import java.awt.event.MouseListener;
  5.  
  6. class Form extends JFrame{
  7. JFrame j=new JFrame();
  8. JButton b1=new JButton("Start");
  9. JButton b2=new JButton("Prosto");
  10. private BoundedRangeModel model;
  11. JProgressBar p;
  12. Mouse m=new Mouse();
  13. ThreadProcess t1=new ThreadProcess();
  14. JProgressBar pbUndefined;
  15. Form(){
  16. super("Поток-прогрессбар");
  17. j.setLayout(new FlowLayout(FlowLayout.CENTER));
  18. j.setSize(300,300);
  19. j.setResizable(false);
  20. j.setLocationRelativeTo(null);
  21. j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22. model=new DefaultBoundedRangeModel(1,2,0,10);
  23. p=new JProgressBar(model);
  24. j.add(p);
  25. pbUndefined = new JProgressBar(0, 100);
  26. pbUndefined.setStringPainted(true);
  27. pbUndefined.setString("Привет");
  28. j.add((pbUndefined));
  29. b1.setSize(40,30);
  30. b1.addMouseListener(m);
  31. j.add(b1);
  32. b1.setSize(40,30);
  33. b2.addMouseListener(new MouseListener() {
  34. @Override
  35. public void mouseClicked(MouseEvent e) {
  36. JOptionPane.showMessageDialog(j,"Hello");
  37. }
  38. @Override
  39. public void mousePressed(MouseEvent e) {
  40. }
  41. @Override
  42. public void mouseReleased(MouseEvent e) {
  43. }
  44. @Override
  45. public void mouseEntered(MouseEvent e) {
  46. }
  47. @Override
  48. public void mouseExited(MouseEvent e) {
  49. }
  50. });
  51. j.add(b2);
  52. j.setVisible(true);
  53. }
  54. class ThreadProcess extends Thread {
  55. public void run() {
  56. // Проверка завершения процесса
  57. while ( model.getValue() < model.getMaximum() ) {
  58. try {
  59. // Увеличение текущего значение
  60. model.setValue(model.getValue() + 1);
  61. // Случайная временная задержка
  62. sleep(1000);
  63. } catch (Exception e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. }
  68. }
  69.  
  70. class Mouse implements MouseListener {
  71. private boolean f=false;
  72. ThreadProcess t=new ThreadProcess();
  73. @Override
  74. public void mouseClicked(MouseEvent e) {
  75. if(!t.isAlive()) {
  76. t.start();
  77. pbUndefined.setIndeterminate(true);
  78. f=true;
  79. }
  80. else {
  81. try {
  82. t.sleep(3000);
  83. } catch (InterruptedException e1) {
  84. e1.printStackTrace();
  85. }
  86. pbUndefined.setIndeterminate(false);
  87. f=false;
  88. }
  89. }
  90. @Override
  91. public void mousePressed(MouseEvent e) {
  92. }
  93. @Override
  94. public void mouseReleased(MouseEvent e) {
  95. }
  96. @Override
  97. public void mouseEntered(MouseEvent e) {
  98. }
  99. @Override
  100. public void mouseExited(MouseEvent e) {
  101. }
  102. }
  103. }
  104.  
  105. public class Test {
  106. public static void main(String[] args) {
  107. new Form();
  108. }
  109. }

Решение задачи: «Swing и потоки»

textual
Листинг программы
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5.  
  6.  
  7.  
  8. class Form extends JFrame{
  9.     JFrame j=new JFrame();
  10.     JButton b1=new JButton("Start");
  11.     JButton b2=new JButton("Prosto");
  12.     private BoundedRangeModel model;
  13.     JProgressBar p;
  14. //    Mouse m=new Mouse();
  15.     ButtonListener bListener = new ButtonListener();
  16.     ThreadProcess t1=new ThreadProcess();
  17.     JProgressBar pbUndefined;
  18.     Form(){
  19.         super("Поток-прогрессбар");
  20.         j.setLayout(new FlowLayout(FlowLayout.CENTER));
  21.         j.setSize(300,300);
  22.         j.setResizable(false);
  23.         j.setLocationRelativeTo(null);
  24.         j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  25.  
  26.         model=new DefaultBoundedRangeModel(1,2,0,10);
  27.         p=new JProgressBar(model);
  28.         j.add(p);
  29.  
  30.         pbUndefined = new JProgressBar(0, 100);
  31.  
  32.         pbUndefined.setStringPainted(true);
  33.         pbUndefined.setString("Привет");
  34.         j.add((pbUndefined));
  35.  
  36.         b1.setSize(40,30);
  37.         b1.addActionListener(bListener);
  38.         j.add(b1);
  39.  
  40.         b1.setSize(40,30);
  41.         b2.addActionListener(new ActionListener() {
  42.  
  43.             @Override
  44.             public void actionPerformed(ActionEvent e) {
  45.                 JOptionPane.showMessageDialog(j,"Hello");
  46.             }
  47.         });
  48.         j.add(b2);
  49.  
  50.         j.setVisible(true);
  51.     }
  52.     class ThreadProcess extends Thread {
  53.         public void run() {
  54.             // Проверка завершения процесса
  55.             while ( model.getValue() < model.getMaximum() ) {
  56.                 try {
  57.                     // Увеличение текущего значение
  58.                     model.setValue(model.getValue() + 1);
  59.                     // Случайная временная задержка
  60.                     sleep(1000);
  61.                 } catch (Exception e) {
  62.                     e.printStackTrace();
  63.                 }
  64.             }
  65.         }
  66.     }
  67.  
  68.  
  69.     class ButtonListener implements ActionListener {
  70.         private boolean f=false;
  71.         ThreadProcess t=new ThreadProcess();
  72.         @Override
  73.         public  void actionPerformed(ActionEvent e) {
  74.             if(!t.isAlive()) {
  75.                 t = new ThreadProcess();
  76.                 t.start();
  77.                 p.setValue(0);
  78.                 f=true;
  79.             }
  80.             else {
  81.                 try {
  82.                     t.sleep(100);
  83.                 } catch (InterruptedException e1) {
  84.                     e1.printStackTrace();
  85.                 }
  86.                 f=false;
  87.             }
  88.             if(pbUndefined.isIndeterminate()) {
  89.                 pbUndefined.setIndeterminate(false);
  90.             }else {
  91.                 pbUndefined.setIndeterminate(true);
  92.             }
  93.  
  94.         }
  95.        
  96.     }
  97. }
  98.  
  99.  
  100. public class Test {
  101.     public static void main(String[] args) {
  102.         new Form();
  103.     }
  104. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.455 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут