2009-06-25 5 views
3

스윙 응용 프로그램을 개발 중이며 모든 것이 정상적으로 작동합니다. 하지만 GUI 문제가 있습니다.스윙 응용 프로그램 문제

응용 프로그램을 실행하고 다른 응용 프로그램을 최소화 할 때 응용 프로그램은 계속 작동하지만 JFrame의 중앙 부분은 보이지 않거나 숨겨집니다. 프로그램 로직의 일부를 마친 후 GUI는 다시 칠하고 다시 볼 수 있습니다. 프로그램이 실행을 마칠 때까지 계속됩니다.

이 동작을 방지하기위한 API가 있습니까, 아니면 GUI를 강제로 표시 할 클래스가 있습니까? 아니면 진행률 막대를 추가 할 수 있습니까?

누군가이 정보가 필요한 경우 Windows Vista에서 java 1.6을 사용하여 테스트 할 것입니다.

답변

9

GUI가 응답하지 않는 원인이되는 일종의 느린 IO 또는 계산을하는 것처럼 들리는 데요.

다른 스레드에서 장기 실행 프로세스를 수행하면됩니다.

표준 방법은 SwingWorker 클래스입니다.

Java tutorials에는 SwingWorker을 올바르게 사용하는 방법에 대한 훌륭한 참고 자료 및 자습서가 있습니다.

Herehere은 내가 생각하는 또 다른 질문에 대한 링크입니다.

이 동작은 오래 실행중인 프로세스가 GUI가 자체를 다시 그릴 때 사용하는 스레드를 차단 한 결과입니다. 따라서 작업이 수행되는 동안 GUI가 JFrame을 다시 칠하지 못하고 응답하지 않게됩니다.

+0

Windows에서 창 영역이 더러워지면 스윙이 다시 칠하는 것을 잊어 버리는 경우가 있습니다. Swing Timer를 매초마다 실행시키고 창에 repaint()를 실행하십시오. – akarnokd

+0

창이 다시 활성화되면 (포커스를 다시 얻음) 기본적으로 자체적으로 다시 칠합니다. – jjnguy

+0

타이머를 추가하면 도움이되지만 스레드가 차단 된 경우 GUI에서 자체를 다시 칠할 수 없습니다. – jjnguy

2

jinguy와 마찬가지로 완료하는 데 오랜 시간이 걸리고 백그라운드 스레드에 넣어야하는 작업을 수행하는 것으로 나타났습니다. 이 작업을 올바르게 수행하는 방법에 대한 자세한 내용은 Java Sun Concurrency in Swing 자습서를 참조하십시오.

2

장기간 비즈니스 운영을 별도의 스레드에서 수행해야합니다. SwingWorker을 사용하시기 바랍니다.

이 간단한 것으로 확인하십시오 example.