JFrame oczekiwania na wykonanie innego zadania

0

Witam.
Chciałbym stworzyć panel oczekiwania na wykonanie pewnego zadania.

To jest panel informacyjny

public class InfoPane extends JFrame{
	
	InfoPane(String txt){
		setPreferredSize(new Dimension(300,200));
		setMinimumSize(new Dimension(300,200));
		setResizable(false);
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JLabel l = new JLabel(txt,SwingUtilities.CENTER);
		l.setPreferredSize(new Dimension(200,150));
		l.setOpaque(true);
		l.setBackground(new Color(25,150,69));
		l.setForeground(Color.BLACK);
		l.setFont(new Font("Helvetica", Font.BOLD, 22));
		this.add(l);
		setVisible(true);
	}
	
	public void exit(){
		this.setVisible(false);
		this.dispose();
	}
}

a listener do guzika dodany do Głównego JFrame

		JButton but4 = new JButton("Zapisz zmiany");
		
		but4.addActionListener(p -> {
			InfoPane ip = new InfoPane("Sending to serwer");
			hf.sendData();
			ip.exit();
		});

Niestety wyświetla się pusty frame ustawiony na srodku, o dobrej wielkosci ale jest tylko białe tło.
Wyłącza się poprawnie.

0

bo nie zdąży się odświeżyć a już wykonujesz kod blokujący formatkę - hf.sendData();. Możesz albo hf.sendData(); wykonać w wątku pobocznym (bardziej "pro" ale więcej pisania) albo dodać przed hf.sendData(); Thread.yield() - to wyczytane na SO więc nie wiem czy zadziała

0

Więcej pisania? Niewiele:

new Thread(() -> { hf.send(); }).start();

W Javie <8 trochę więcej, bo trzeba new Runnable({ public void run() { ...

Edit. No tak, Abrakadaber słusznie upomniał. Może tak?

new Thread(() -> {
  hf.send();
  java.awt.EventQueue.invokeLater(() -> { ip.exit(); });
}).start();

1 użytkowników online, w tym zalogowanych: 0, gości: 1