2017-11-24 30 views
1

내 Java 응용 프로그램에는 인쇄 기능이 있습니다.Java에서 UI를 차단하지 않는 인쇄 기능이 있습니까?

PrinterJob pj = PrinterJob.getPrinterJob(); 
pj.setJobName(myJobName); 
pj.setPrintable(myPrintableObject); 
if (pj.printDialog() == false) { 
    return; 
} 
pj.print(); 

인쇄 작업이 완료되지 않은 상태에서 인쇄 작업이 차단되어 UI에서 다른 것을 클릭 할 수 없습니다.

동일 JTextPane가의 인쇄 기능에 적용

JTextPane jtp = new JTextPane(); 
     ...   
jtp.print(null, null, show, null, null, show); 

자바 인쇄의 possiblity가이 UI를 차단하지 않고 있는가 아니면 여러 스레드 자신에 의해 실현해야합니까?

+0

'Runnable'에서 인쇄 작업을 감싸고'Thread'에 전달하십시오. –

답변

1

이벤트 디스패처 스레드에서 이러한 메서드를 호출하는 것이 문제입니다. 이 스레드는 UI를 제공하기 위해 존재하며 장기간의 활동에는 사용해서는 안됩니다. 왜냐하면 당신이 그 스레드를 차지할 때 이벤트를 더 이상 처리 할 수 ​​없기 때문에 귀하의 UI가 멈 춥니 다!

대신 자신의 스레드로 래핑해야합니다. 또는 SwingWorker와 같은 것을 사용하십시오.

+1

고마워요! SwingWorker를 사용했는데 꽤 쉬웠습니다. :) – moons