Почему мой код в Swing просто возвращает черный экран?

Итак, я пытаюсь создать простой цикл, в котором изображение будет начинаться над рамкой и опускаться ниже нее, в то время как мое здоровье выше нуля, что всегда, поскольку я не добавлял никакого способа уменьшить его. Проблема в том, что каждый раз, когда я запускаю его, NetBeans просто возвращает черный экран. Это проблема с моим кодом или с IDE? Вот мой код до сих пор. Спасибо.

import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class FastFoodGame extends JPanel  
{
    static int y = -100;
    static int health = 3;
    Random ran = new Random(1023);
    Random run = new Random(99);
    Image burger;
    public static void fall()
    {
        y = y + 5;
    }
    @Override
    public void paint(Graphics g)
    {
        while(health > 0)
        {
            y = -100;
            try 
            {
                TimeUnit.SECONDS.sleep(1);
            } 
            catch (InterruptedException ex) 
            {
                Logger.getLogger(FastFoodGame.class.getName()).log(Level.SEVERE, null, ex);
            }
            if(run.nextInt() <= 74)
            {
                burger = new ImageIcon("Classic.jpg").getImage();
                g.drawImage(burger, ran.nextInt(), y, 100, 100, this);
            }
            else
            {
                burger = new ImageIcon("Moldy.jpg").getImage();
                g.drawImage(burger, ran.nextInt(), y, 100, 100, this);
            }

        }
    }
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Fast Food Game");
        frame.add(new FastFoodGame());
        frame.setVisible(true);
        frame.setSize(1024, 768);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        while(health > 3)
        {
            fall();
        }
    }              
}

person Kantha    schedule 07.09.2017    source источник
comment
Некоторое время выполнения в методе paint - это НЕ то, как следует выполнять пользовательское рисование - вы блокируете EDT, не позволяя ему рисовать что-либо или реагировать на любые новые события.   -  person MadProgrammer    schedule 07.09.2017
comment
Начните с более подробного изучения Выполнение пользовательского рисования, Рисование в AWT и Swing и Как использовать таймеры Swing для возможного решения   -  person MadProgrammer    schedule 07.09.2017
comment
И некоторое понимание параллельного доступа в Java не помешает.   -  person MadProgrammer    schedule 07.09.2017
comment
Если это не дубликат, измените свой вопрос, включив в него минимальный воспроизводимый пример, демонстрирующий ваш пересмотренный подход.   -  person trashgod    schedule 07.09.2017