Использование потоков в Swing?

Сейчас пытаюсь разобраться с мультипоточностью в свинге.

К примеру есть окно в котором располагается кнопка, по нажатию на которую выполняется какое-то длительное действие-А. Для того что бы GUI не подвисал решил запустить то самое действие-А в новом потоке.
e7gpc1.jpg
Выглядит это следующим образом:
Код
package swing.aug17_2;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class SwingApp2 {

	private JFrame frame;
	private JButton btn;
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable(){
			public void run(){
				try {
					SwingApp2 app = new SwingApp2();
					app.frame.setVisible(true);
				} catch (Exception e){
					e.printStackTrace();
				}
			}
		});
	}
	
	public SwingApp2(){
		initialize();
	}

	private void initialize() {
		frame = new JFrame();
		frame.setTitle("Hello Swing");
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.setPreferredSize(new Dimension(300, 80));
		frame.setSize(300, 80);
		frame.setLocationRelativeTo(null);
		frame.setIconImage(Toolkit.getDefaultToolkit().getImage(SwingApp2.class.getResource("/icon.png")));
		frame.getContentPane().setLayout(new BorderLayout());
		
		btn = new JButton("PUSH");
		btn.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				Thread thr = new Thread(){
					@Override
					public void run(){
						try {
							Thread.sleep(2000);
							System.out.println("Done");
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						
					}
				};
				thr.start();
				
			}
		});
		frame.add(btn, BorderLayout.CENTER);		
	}
}

Возникают сомнение на счёт вызова действия-А в новом потоке. Правильно ли вызывать таким способом? Если же нет - посоветуйте верный способ.
Спасибо.
  • Вопрос задан
  • 3541 просмотр
Пригласить эксперта
Ответы на вопрос 1
@FoxInSox
Все Ок, не сомневайтесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы