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

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

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

Есть форма с кнопкой при нажатии на которую форма сворачивается и создаётся новая форма с принскрином монитора, но первая форма сворачивается одновременно с тем как новая форма создается и она попадает в фокус. Ка можно сделать чтобы сначала первая форма закрылась, а уж потом создалась вторая? Что то у меня не чего не выходит, я попробовал делать паузу с помощью приостановления потока, но не чего не выходит. Я испольховал
new Thread(new Runnable() {
                    public void run() {
                        while(true) { //бесконечно крутим
                            try {
                                Thread.sleep(4000); 
                                System.out.println("Hi!");
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }).start();
От как все у меня выглядит
public class Scan extends JFrame{
 
    public static void main(String[] args)  {
        JButton b1 = new JButton("Кнопка");
        final JFrame fram = new JFrame("Форма 1");
 
        fram.setVisible(true);
 
        fram.setBounds(50, 50, 350, 300);
        fram.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        fram.add(b1);
        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                fram.setState(JFrame.ICONIFIED);
 
            }
        });
 
        panel.add(b1);
 
        b1.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
                 
                new Thread(new Runnable() {
                    public void run() {
                        while(true) { 
                            try {
                                Thread.sleep(4000); 
                                System.out.println("Hi!");
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }).start();
 
                JFrame frame = new JFrame("Форма2");
                frame.addComponentListener(new TransparentComponentListener());
                Start app = new Start(frame);
                app.setLayout(new BorderLayout());
                app.setVisible(true);
                frame.getContentPane().add("Center", app);
                frame.pack();
                frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
                frame.show();
                app.setVisible(true);
}});
fram.getContentPane().add(panel);
 
    }
}
Как по мне должно работать, а оно не работает.Так же пробовал и через Robot, у него есть метод wait(). Все так же не получается, у меня получается одновременно обрабатываются два обработчика нажатия на кнопку, если я к нужному прицеплю этот метод или таймер то оно все ровно ждет в обоих обработчиках, а потом выводит второй, а уж потом прячет первый фрейм. Подскажите что я делаю не так

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

textual
Листинг программы
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Scan extends JFrame{
 
    public static void main(String[] args)  {
        JButton b1 = new JButton("Кнопка");
        final JFrame fram = new JFrame("Форма 1");
 
        fram.setVisible(true);
 
        fram.setBounds(50, 50, 350, 300);
        fram.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        fram.add(b1);
        b1.addActionListener(e -> fram.setState(JFrame.ICONIFIED));
 
        panel.add(b1);
 
        b1.addActionListener(e -> {
            new Thread(() -> {
                try {Thread.sleep(500);} catch (InterruptedException e1) {}
                try {
                    Image image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
                    JLabel label = new JLabel(new ImageIcon(image));
                    JFrame frame = new JFrame("Форма2");
                    frame.add(label);
                    frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());
                    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                    frame.setVisible(true);
                } catch (AWTException e1) {
                    e1.printStackTrace();
                }
            }).start();
        });
        fram.getContentPane().add(panel);
 
    }
}

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


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

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

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