I've made a Jpanel with a background image and a Jbutton also with its background. The problem is that background sometimes is loaded sometimes no.
public class Window extends JFrame {
    public static JFrame createwindow() {//fare singleton
        JFrame frame = new JFrame("Battaglia navale");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(740, 740);
        frame.setVisible(true);
        frame.setResizable( false );
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation(((int)dim.getWidth()-(int)frame.getWidth())/2, ((int)dim.getHeight()-(int)frame.getHeight())/2);
        return frame;
    }
}
public class StartWindow {
    JFrame frame;
    private JButton button;
    private JButton button2;
    final String button_start = "img/start.png";
    ImageIcon start = new ImageIcon(button_start);
    public void CreateStartWindow() {
        frame = Window.createwindow();
        Container container = frame.getContentPane();
        JpanelStart panel = new JpanelStart();
        container.add(panel);
        this.button = new JButton(start);
        button.setActionCommand("start");
        button.setHideActionText(true);
        button.setOpaque(false);
        button.setFocusPainted(false);
        button.setBorderPainted(false);
        button.setContentAreaFilled(false);
        this.button2 = new JButton("Classifica");
        panel.add(button);
        panel.add(button2);
        frame.setVisible(true);
    }
    public void addActionListener(ActionListener al) {
        this.button.addActionListener(al);
        this.button2.addActionListener(al);
    }
    public void chiudi() {
        frame.dispose();
    }
}
class JpanelStart extends JPanel {
    private Image img;
    private String path_img = "img/sfondo.jpg";
    public JpanelStart() {
        img = Toolkit.getDefaultToolkit().createImage(path_img);
        loadImage(img);
    }
    private void loadImage(Image img) {
        try {
            MediaTracker track = new MediaTracker(this);
            track.addImage(img, 0);
            track.waitForID(0);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    @Override
    protected void paintComponent(Graphics g) {
        setOpaque(false);
        g.drawImage(img, 0, 0, this);
        super.paintComponent(g);
    }
}
 
     
     
     
    
