이미지가 웹에서 패널로 로드되면 GUI가 로딩 프로세스가 완료될 때까지 정지합니다. 이는 사용자에게 불편을 줄 수 있습니다.
GUI 정지를 방지하려면 javax.swing.SwingWorker 사용을 고려하세요. 이 클래스를 사용하면 GUI 스레드를 활성 상태로 유지하면서 이미지를 백그라운드로 로드할 수 있습니다.
다음 예에서는 SwingWorker를 사용하여 이미지를 로드하는 방법을 보여줍니다.
import java.awt.*; import java.io.IOException; import java.net.URL; import java.util.concurrent.ExecutionException; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.*; public final class WorkerTest extends JFrame { private final JLabel label = new JLabel("Loading..."); public WorkerTest() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); label.setHorizontalTextPosition(JLabel.CENTER); label.setVerticalTextPosition(JLabel.BOTTOM); this.add(label); this.pack(); this.setLocationRelativeTo(null); } private void start() { new ImageWorker().execute(); } public static void main(String args[]) { EventQueue.invokeLater(() -> { WorkerTest wt = new WorkerTest(); wt.setVisible(true); wt.start(); }); } class ImageWorker extends SwingWorker<Image, Void> { private static final String TEST = "http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png"; @Override protected Image doInBackground() throws IOException { Image image = ImageIO.read(new URL(TEST)); return image.getScaledInstance(640, -1, Image.SCALE_SMOOTH); } @Override protected void done() { try { ImageIcon icon = new ImageIcon(get()); label.setIcon(icon); label.setText("Done"); WorkerTest.this.pack(); WorkerTest.this.setLocationRelativeTo(null); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } } }
여기서 예:
SwingWorker를 사용하면 이미지 로딩 프로세스가 백그라운드에서 실행될 수 있으므로 이미지를 가져오고 표시하는 동안 GUI가 계속 응답할 수 있습니다.
위 내용은 Swing에서 이미지를 로드하는 동안 GUI 정지를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!