Приостановка выполнения - 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д