所以,我正在嘗試撰寫一個函式來縮放影像并將其用作背景,但它分配了大量記憶體,并且在幾秒鐘后引發了記憶體不足例外。這是無限回圈中的函式。
public static void scale() {
JLabel background = new JLabel();
Image imgscale = img.getScaledInstance(back.getWidth(), back.getHeight(), Image.SCALE_SMOOTH);
ImageIcon backgroundImage = new ImageIcon(imgscale);
background.setIcon(backgroundImage);
background.setSize(back.getWidth(), back.getHeight());
jlayeredpane1.add(background, Integer.valueOf(0));
jlayeredpane1.remove(background);
frame.setVisible(true);
}
uj5u.com熱心網友回復:
無限回圈中的函式。
等等,什么!?
public static void scale() {
JLabel background = new JLabel();
Image imgscale = img.getScaledInstance(back.getWidth(), back.getHeight(), Image.SCALE_SMOOTH);
ImageIcon backgroundImage = new ImageIcon(imgscale);
background.setIcon(backgroundImage);
background.setSize(back.getWidth(), back.getHeight());
jlayeredpane1.add(background, Integer.valueOf(0));
jlayeredpane1.remove(background);
frame.setVisible(true);
}
想一想,每次呼叫此方法時,您...
- 創建
JLabel(background)的新實體 - 創建 的新實體
img,按比例縮小 - 創建一個新的實體
ImageIcon來環繞Image - 應用
ImageIcon到JLabel - 將
JLabel您剛剛創建的實體添加到JLayeredPane JLabel從...中洗掉您剛剛創建的實體JLayeredPane等等,什么!?
你想知道為什么你的記憶體不足?!我什至沒有提到這是在static背景關系中完成的。
補充一點,如果您在事件調度執行緒的背景關系中執行此操作,您將導致 UI “凍結”,如果您不在事件調度執行緒的背景關系中執行此操作,那么您由于 Swing 違反了 API,因此不是執行緒安全的。
我建議看看類似...
- 自動縮放 ImageIcon 到標簽大小
- 調整圖示大小以適應 Java 中的 JButton?
- 如何在 JPanel 中設定背景圖片
關于如何實作目標的一些更好的想法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/428115.html
