Приостановка выполнения - Java

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

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

Есть форма с кнопкой при нажатии на которую форма сворачивается и создаётся новая форма с принскрином монитора, но первая форма сворачивается одновременно с тем как новая форма создается и она попадает в фокус. Ка можно сделать чтобы сначала первая форма закрылась, а уж потом создалась вторая? Что то у меня не чего не выходит, я попробовал делать паузу с помощью приостановления потока, но не чего не выходит. Я испольховал
Листинг программы
  1. new Thread(new Runnable() {
  2. public void run() {
  3. while(true) { //бесконечно крутим
  4. try {
  5. Thread.sleep(4000);
  6. System.out.println("Hi!");
  7. } catch (InterruptedException e) {
  8. e.printStackTrace();
  9. }
  10. }
  11. }
  12. }).start();
От как все у меня выглядит
Листинг программы
  1. public class Scan extends JFrame{
  2. public static void main(String[] args) {
  3. JButton b1 = new JButton("Кнопка");
  4. final JFrame fram = new JFrame("Форма 1");
  5. fram.setVisible(true);
  6. fram.setBounds(50, 50, 350, 300);
  7. fram.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  8. JPanel panel = new JPanel();
  9. fram.add(b1);
  10. b1.addActionListener(new ActionListener() {
  11. public void actionPerformed(ActionEvent e) {
  12. fram.setState(JFrame.ICONIFIED);
  13. }
  14. });
  15. panel.add(b1);
  16. b1.addActionListener(new ActionListener() {
  17. @Override
  18. public void actionPerformed(ActionEvent e) {
  19. new Thread(new Runnable() {
  20. public void run() {
  21. while(true) {
  22. try {
  23. Thread.sleep(4000);
  24. System.out.println("Hi!");
  25. } catch (InterruptedException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }
  30. }).start();
  31. JFrame frame = new JFrame("Форма2");
  32. frame.addComponentListener(new TransparentComponentListener());
  33. Start app = new Start(frame);
  34. app.setLayout(new BorderLayout());
  35. app.setVisible(true);
  36. frame.getContentPane().add("Center", app);
  37. frame.pack();
  38. frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
  39. frame.show();
  40. app.setVisible(true);
  41. }});
  42. fram.getContentPane().add(panel);
  43. }
  44. }
Как по мне должно работать, а оно не работает.Так же пробовал и через Robot, у него есть метод wait(). Все так же не получается, у меня получается одновременно обрабатываются два обработчика нажатия на кнопку, если я к нужному прицеплю этот метод или таймер то оно все ровно ждет в обоих обработчиках, а потом выводит второй, а уж потом прячет первый фрейм. Подскажите что я делаю не так

Решение задачи: «Приостановка выполнения»

textual
Листинг программы
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5.  
  6. public class Scan extends JFrame{
  7.  
  8.     public static void main(String[] args)  {
  9.         JButton b1 = new JButton("Кнопка");
  10.         final JFrame fram = new JFrame("Форма 1");
  11.  
  12.         fram.setVisible(true);
  13.  
  14.         fram.setBounds(50, 50, 350, 300);
  15.         fram.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  16.         JPanel panel = new JPanel();
  17.         fram.add(b1);
  18.         b1.addActionListener(e -> fram.setState(JFrame.ICONIFIED));
  19.  
  20.         panel.add(b1);
  21.  
  22.         b1.addActionListener(e -> {
  23.             new Thread(() -> {
  24.                 try {Thread.sleep(500);} catch (InterruptedException e1) {}
  25.                 try {
  26.                     Image image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
  27.                     JLabel label = new JLabel(new ImageIcon(image));
  28.                     JFrame frame = new JFrame("Форма2");
  29.                     frame.add(label);
  30.                     frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
  31.                     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  32.                     frame.setVisible(true);
  33.                 } catch (AWTException e1) {
  34.                     e1.printStackTrace();
  35.                 }
  36.             }).start();
  37.         });
  38.         fram.getContentPane().add(panel);
  39.  
  40.     }
  41. }

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


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

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

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

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

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

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