양식을 고정하지 않고 이미지를 표시하는 방법
코드에서 버튼을 클릭하면 이미지 로딩 프로세스가 이벤트를 차단합니다. 스레드를 발송하여 양식이 일시적으로 정지됩니다. 이를 방지하려면 별도의 스레드를 사용하여 백그라운드에서 이미지 로딩을 수행할 수 있습니다.
javax.swing.SwingWorker를 사용하는 솔루션
javax.swing.SwingWorker 클래스를 사용하면 작업에서 사용자 인터페이스(UI)를 계속 업데이트하는 동시에 별도의 스레드에서 작업을 실행할 수 있습니다. 이를 사용하여 문제를 해결할 수 있는 방법은 다음과 같습니다.
"client_Trackbus" 클래스:
SwingWorker<Image, Void> imageLoader = new SwingWorker<Image, Void>() { @Override protected Image doInBackground() throws Exception { // Load the image from URL in a separate thread URL imageURL = new URL("http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg"); Image image = Toolkit.getDefaultToolkit().createImage(imageURL); return image; } @Override protected void done() { try { // Display the loaded image on the panel ImageIcon icon = new ImageIcon(get()); label.setIcon(icon); jPanel1.add(label); // Resize the panel to fit the image jPanel1.setSize(label.getPreferredSize()); // Update the form getContentPane().add(jPanel1); revalidate(); repaint(); } catch (Exception ex) { // Handle any exceptions here } } }; // Start the image loading task in the background imageLoader.execute();
이 코드는 별도의 스레드에서 실행되는 SwingWorker를 생성합니다. . doInBackground() 메서드는 이벤트 전달 스레드를 차단하지 않고 URL에서 이미지를 로드합니다. 이미지가 로드되면 이벤트 전달 스레드에서 done() 메서드가 호출되어 이미지가 표시되고 양식이 업데이트됩니다. 이 접근 방식을 사용하면 이미지가 로드되는 동안 양식이 응답성을 유지할 수 있습니다.
위 내용은 Java Swing 양식을 동결하지 않고 이미지를 로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!