JFrame no muestra todas las imágenes en pantalla completa

Entonces, estoy trabajando en un proyecto que requiere cambiar entre imágenes. Las imágenes deben estar en modo de pantalla completa. Parece que hay 2 problemas que estoy enfrentando. Primero es con el cambio de imagen. Cuando cambio entre imágenes, algunas imágenes aparecen bien cuando cambio. Otros no parecen aparecer en la pantalla en absoluto. Parece que estoy obteniendo un marco vacío. En segundo lugar, la clave correcta parece funcionar siempre, pero solo por mi cordura, he puesto impresiones del sistema. Las salidas del sistema no parecen aparecer en la consola, pero cambia las imágenes en el marco (aunque a veces aparece un marco vacío). Cualquier sugerencia / solución sería muy apreciada.

Nota sobre el código: las cadenas de dibujo que tengo son para probar las coordenadas. Estoy usando una Eyetribe, así que solo para mostrar dónde estoy mirando. El cordón parece funcionar perfectamente. Además, estoy llamando a switchImage muy rápido, casi 22 veces en un segundo. ¿Podría ser eso un problema? Aunque me hace preguntarme por qué funciona para algunas imágenes y no para otras. ACTUALIZACIÓN: El problema parece estar en g.drawImage. No parece estar dibujando algunas imágenes, pero parece que no puedo entender por qué sucede eso. Actualmente este es mi código para imágenes de pantalla completa.

public void showFrame(){

    //jL -> JLabel
    //jF -> JFrame
    //jP -> Panel
    jF.setTitle("Test");
    jF.setUndecorated(true);
    jF.setResizable(false);
    jF.setVisible(true);

    Toolkit tk = Toolkit.getDefaultToolkit();
    int xsize = (int)tk.getScreenSize().getWidth();
    int ysize = (int)tk.getScreenSize().getHeight();
    jF.setSize(xsize, ysize);
    jF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



    if(testImagesList != null){
        img = new ImageIcon(testImagesList.get(0));
    }
    Image imag = img.getImage();
    bi = new BufferedImage(1280, 800, BufferedImage.TYPE_INT_ARGB);
    Graphics g = bi.createGraphics();
    g.drawImage(imag, 0, 0, 1280, 800, null);

    ImageIcon newIcon = new ImageIcon(bi);
    jL.setIcon(newIcon);
    jF.add(jL);
    jP.add(jL);
    jF.add(jP);
    jF.validate();  
}

Para cambiar entre imágenes estoy usando un oyente clave. KeyListner llama al código de imagen del interruptor. Ambos se dan a continuación.

public void switchImage(ImageIcon image, JFrame jF, JLabel jL, JPanel jP, GazeData gazeData){
    Image imag = image.getImage();

    BufferedImage bi = new BufferedImage(1280, 800, BufferedImage.TYPE_INT_ARGB);
    Graphics g = bi.getGraphics();

    g.drawImage(imag, 0, 0, 1280, 800, null);
    g.setColor(Color.black);
    int x = (int) gazeData.smoothedCoordinates.x;
    int y = (int) gazeData.smoothedCoordinates.y;
    Font font = new Font("Verdana", Font.BOLD, 16);
    g.setFont(font);


    String text = "hello(" + gazeData.smoothedCoordinates.x + gazeData.smoothedCoordinates.y + ")";
    g.drawString(text, x, y);
    g.drawString("Fixed Coordinate at (400, 500)", 400, 500);
    ImageIcon newIcon = new ImageIcon(bi);
    jL.setIcon(newIcon);
    jP.add(jL);
    jF.validate();  
}

@Override
public void keyPressed(KeyEvent e) {
    // TODO Auto-generated method stub
    if(e.getKeyCode() == KeyEvent.VK_RIGHT){
        //  j.switchImage(image, jF, jL, jP, gazeData);
        System.out.println("RightDetected");
        imageIndex++;

        ImageIcon newImage = new ImageIcon(imageList.get(imageIndex));

        if(newImage != null){
            this.currentImage = newImage;
            System.out.println("IMAGE SWITCHED!!!! Current Image="+imageList.get(imageIndex));
            j.switchImage(currentImage, j.jF, j.jL, j.jP, currentGazeData);


        }

    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta