Приостановка выполнения - Java
Формулировка задачи:
Есть форма с кнопкой при нажатии на которую форма сворачивается и создаётся новая форма с принскрином монитора, но первая форма сворачивается одновременно с тем как новая форма создается и она попадает в фокус. Ка можно сделать чтобы сначала первая форма закрылась, а уж потом создалась вторая?
Что то у меня не чего не выходит, я попробовал делать паузу с помощью приостановления потока, но не чего не выходит. Я испольховал
От как все у меня выглядит
Как по мне должно работать, а оно не работает.Так же пробовал и через Robot, у него есть метод wait(). Все так же не получается, у меня получается одновременно обрабатываются два обработчика нажатия на кнопку, если я к нужному прицеплю этот метод или таймер то оно все ровно ждет в обоих обработчиках, а потом выводит второй, а уж потом прячет первый фрейм. Подскажите что я делаю не так
Листинг программы
- 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);
- }
- }
Решение задачи: «Приостановка выполнения»
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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д