Rumah >Java >javaTutorial >Bagaimana untuk Mengelakkan Pembekuan GUI Semasa Memuatkan Imej dalam Swing?
Apabila imej dimuatkan dari web ke panel, GUI boleh beku sehingga proses pemuatan selesai. Ini boleh menjengkelkan pengguna.
Untuk mengelakkan pembekuan GUI, pertimbangkan untuk menggunakan javax.swing.SwingWorker. Kelas ini membolehkan pemuatan latar belakang imej sambil mengekalkan urutan GUI hidup.
Contoh berikut menunjukkan cara menggunakan SwingWorker untuk memuatkan imej:
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(); } } } }
Dalam ini contoh:
Dengan menggunakan SwingWorker, proses pemuatan imej boleh dijalankan di latar belakang, membenarkan GUI kekal responsif semasa imej sedang diambil dan dipaparkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Pembekuan GUI Semasa Memuatkan Imej dalam Swing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!