Ciao a tutti

ho appena terminato il mio programma di memory ma quando vado a farlo eseguire mi visualizza tutta una schermata nera senza farmi vedere le carte! Per testare ho inserito dei System.out.println per verificare l'effettivo funzionamento e tutto sembra andare..secondo me c'è un errore nel paint..però non riesco a capire se sia lì o altrove..qualcuno potrebbe darmi una mano?? grazie mille ecco il codice:

Carta
codice:
package memory;

import java.awt.Image;
import java.awt.Toolkit;

public class Carta {
    static final int VISIBILE = 1;
    static final int COPERTA = 0;
    static final int RIMOSSA = -1;


    private short stato;
    private short tipo;
    private Image immagine;
    private Image retro;

    public Carta(short simbolo){
        tipo = simbolo;
        caricaImmagine(simbolo);
        stato = Carta.COPERTA;
    }

    public Image Immagine(){
        if (stato == Carta.VISIBILE)
            return immagine;
        else
            if(stato == Carta.COPERTA)
                return retro;
            else
                return null;
    }

    public void volta(){
        if (stato == Carta.VISIBILE)
            stato = Carta.COPERTA;
        else
            if(stato == Carta.COPERTA)
                stato = Carta.VISIBILE;
    }
    
    public void rimuovi(){
        stato = Carta.RIMOSSA;
    }

    public void caricaImmagine(int n){
        Toolkit kit = Toolkit.getDefaultToolkit();
        immagine = kit.getImage("D:/carta"+n+".jpg");
        retro = kit.getImage("D:/carta_retro.jpg");
        System.out.println("caricata" + n);
    }

    public int simbolo() {
        return tipo;
    }

    public boolean Uguale(Carta compara) {
        if (compara.simbolo() == tipo)
            return true;
        else
            return false;
    }

    public boolean Rimossa() {
        if (stato == Carta.RIMOSSA)
            return true;
        else
            return false;
    }

    public boolean Visibile(){
        if(stato == Carta.VISIBILE)
            return true;
        else
            return false;
    }
}
Mazzo

codice:
package memory;

import java.util.ArrayList;
import java.util.Collections;
/**
 *
 * @author Nicolò
 */
public class Mazzo {

    private ArrayList<Carta> mazzo;
    private Carta carte[];

    public Mazzo(){
        carte = new Carta[16];
        mazzo = new ArrayList<Carta>(16);
        mescola();
    }

    public void mescola(){

        int i = 0;

        for(int j = 0; j < 2; j++)
            for(short p = 1; p <= 8; p++){
                carte[i] = new Carta(p);
                mazzo.add(i, carte[i]);
                i++;
        }

        Collections.shuffle(mazzo);
    }

    public Carta Carta(int i){
        return mazzo.get(i);
    }
}
View

codice:
package memory;


import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.MediaTracker;
/**
 *
 * @author Nicolò
 */
public class View extends JPanel implements MouseListener {
    private final Mazzo mazzo;
    private BufferedImage immagine;
    private Graphics pittore;
    private JFrame frame;
    private MediaTracker segugio;
    private int preselezionata;

    /**
     * Viene richiamato ogni volta che un componetne grafico
     * viene aggiornato.
     */
    @Override
    public void update(Graphics g) {
        paint(g);
    }

    public View (Mazzo m){
        mazzo = m;
        segugio = new MediaTracker(this);
        immagine = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
        pittore = immagine.getGraphics();
        this.addMouseListener(this);
        frame = new JFrame("Memory 1.0 - Nicolò Torreggiani");
        frame.setBounds(20, 20, 400, 420);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(null);
        frame.add(this);
        frame.setVisible(true);
        preselezionata = -1;
        Segui();
        }

    @Override
    public void paint(Graphics g) {

        int i = 0;
        
        for (int x = 0; x < 4; x++){
            for(int y = 0; y < 4; y++){
                System.out.println("carta " + i + "\nx = " + x + "\ny = " + y + "\ntipo: " + mazzo.Carta(i).simbolo());
                g.drawImage(mazzo.Carta(i).Immagine(), x*100, y*100, null);
                i++;
            }
        }

        g.drawImage(immagine, 0, 0, null);
    }

    public void Segui(){
        for(int i = 0; i < 16; i++)
            segugio.addImage(mazzo.Carta(i).Immagine(), i);
        try{
            segugio.waitForAll();
        } catch(Exception e){}
    }

    public void mouseClicked(MouseEvent e) {}

    public void mousePressed(MouseEvent e) {
        int indice;
        int x, y;
        x = e.getX() / 100;
        y = e.getY() / 100;
        indice = 4 * x + y;

        System.out.println("Premuta " + indice);

        // Controllo che non sia stata rimossa
        if(!mazzo.Carta(indice).Rimossa()) {
            // Controllo che sia la prima carte selezionata
            if(preselezionata == -1) {
                System.out.println("Preselezione");
                preselezionata = indice;
                mazzo.Carta(indice).volta();
            } else{
                // Controllo che non sia la stessa carta
                if(preselezionata == indice){
                    System.out.println("E' la stessa carta");
                    preselezionata = -1;
                    mazzo.Carta(indice).volta();
                } else {
                    // Controllo che le due carte siano dello stesso tipo
                    if(mazzo.Carta(preselezionata).Uguale(mazzo.Carta(indice))){
                        System.out.println("Uguali");
                        mazzo.Carta(preselezionata).rimuovi();
                        mazzo.Carta(indice).rimuovi();
                        preselezionata = -1;
                    } else{
                        System.out.println("Diverse");
                        mazzo.Carta(preselezionata).volta();
                        mazzo.Carta(indice).volta();
                        preselezionata = -1;
                    }
                }
            }
        }
    }

    public void mouseReleased(MouseEvent e) {}

    public void mouseEntered(MouseEvent e) {}

    public void mouseExited(MouseEvent e) {}

}
Main

codice:
package memory;

/**
 *
 * @author Nicolò
 */
public class Main {

    public static void main(String[] args) {
        Mazzo mazzo = new Mazzo();
        View v = new View(mazzo);
      
    }

}