Просто добавить к тому, что сказал @ camickr .
Никогда не добавляйте компоненты по методу paint
. Каждый раз, когда компонент окрашивается, выполняется следующий код
ImageIcon icon = new ImageIcon(s);
JLabel myLabel = new JLabel(icon);
add(myLabel);
Таким образом, вы на 100% уверены, что в какой-то момент вам не хватит памяти, так как вы добавляете новый JLabel каждый раз, когда компонент окрашивается. Вы должны добавить метку при создании родительского компонента.
Если вы хотите, чтобы в вашем приложении была анимация, я предлагаю вам загрузить эти изображения и поместить их в List
, к которому вы можете получить доступ с помощью метода paintComponent
.
List<JLabel> images = new ArrayList<JLabel>();
// populate images when the application needs them...
// ...
@Override
public void paintComponent(Graphics g){
// get the image your want to draw
JLabel imageToDraw = images.get(imageIndex);
}