Almost-Native

(에러) Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread 본문

Java 프로그램 개발, IT

(에러) Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread

2020. 10. 6. 16:17

자바프로그램에서 컴파일중에 아래와 같은 에러가 발생하는 경우,


run:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread
	at java.awt.EventQueue.invokeAndWait(EventQueue.java:1331)
	at java.awt.EventQueue.invokeAndWait(EventQueue.java:1324)
	at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1353)
	at org.knowm.xchart.SwingWrapper.displayChart(SwingWrapper.java:72)
	at xchart1.XChart1.func_DrawChart(XChart1.java:136)
	at xchart1.MyJFrame.btnSelectActionPerformed(MyJFrame.java:217)
	at xchart1.MyJFrame.access$200(MyJFrame.java:21)
	at xchart1.MyJFrame$2.actionPerformed(MyJFrame.java:68)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    ...

 

내가 호출한 라이브러리 함수내에서 invokeAndWait 콜을 했다는... 이렇게 하지 말라는 내용인 것 같습니다.

이 라이브러리를 내가 직접 만든 것이라면 수정하면 그만이지만, 어디서 가져온 경우는 수정할 수도 없고 난감합니다.

 

이때 쓰레드(Thread) 기능을 사용해서 해결할 수 있습니다.

 

 

func_DrawChart() 함수 호출하는 부분을 1번처럼 직접 호출하던 것을 2번처럼 쓰레드를 사용해서 호출하는 것으로 변경합니다.

별도의 쓰레드로 실행되는 것이기 때문에 그 쓰레드 내에서 Wait 를 하던 말던 상관없어지는 경우 되겄심다.

 


        // 2. 쓰레드를 이용해서 호출
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                // 여기에서 함수 호출...
            }
        });

 

Comments