안녕하세요, 아래 메소드에서 나중에 메소드를 호출하지만 여전히 다음 버튼을 클릭 한 후 닫기 버튼에서 응답을받을 수 없습니다. 내 코드에서 hte 실수를 지적하십시오. 또는 내가 예상 한 동작이 잘못되었는지 알려주십시오.swing의 invokeLater 메소드
public void actionPerformed(ActionEvent e) {
//Some log messgae
if (e.getSource() == btnNext) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
/// some piece of code for some database transaction
}
});
}
은 내가 btnNExt 클릭하면 아직도 내가 그것의 데이터베이스 트랜잭션을 수행 할 때 사이에서 응용 프로그램을 종료 할 수 있어야한다고 여기 기대합니다. 어떤 일이 일어나지 않았습니까?
여기에 문제가 있거나 코드별로 문제가 있다고 생각합니다.
invokeLater는 swing 이벤트 스레드에서 실행되며 실행 중에 UI가 고정됩니다. 데이터베이스 트랜잭션 코드가 UI를 견지하고 있으며 별도의 스레드에서 실행 중이어야합니다. 스윙 코드가 없으면 invokeLater로 실행하지 마십시오. – schmop
데이터베이스 코드에 invokeLater 대신 SwingWorker를 사용하십시오. –