Pregunta jFrame

Iniciado por MasterPunk, 10 Junio 2013, 14:58 PM

0 Miembros y 1 Visitante están viendo este tema.

MasterPunk

Hola, estoy haciendo una pequeña aplicación gráfica (llamémosla "juego") que resumidamente es asi:

Código (java) [Seleccionar]

package juego;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Juego extends JPanel {

    void move() {
        //no entrare en detalles
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setColor(Color.red);
        g2d.fillRect(100, 100, 100, 100);//pinta un cuadrado rojo
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        Juego game = new Juego();
        frame.add(game);
        frame.setSize(300, 300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        while (true) { //bucle de juego
            game.move();
            game.repaint();
            try {
                Thread.sleep(15);
            } catch (InterruptedException ex) {
            }
        }
    }
}


El problema es que cuando intento que la ventana se cree al pulsar un botón de otro jFrame:

Código (java) [Seleccionar]

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        JFrame frame = new JFrame();
        Juego game = new Juego();
        frame.add(game);
        frame.setSize(300, 300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        while (true) { //bucle de juego
            game.move();
            game.repaint();
            try {
                Thread.sleep(15);
            } catch (InterruptedException ex) {
            }
        }
    }


La pantalla sale en blanco y no me deja cerrarla. ¿Sabríais decirme a que se debe?
Gracias

RyogiShiki

Estas haciendo una llamada bloquente dentro del EDT (Event Dispath Thread) que es donde se ejecutan las aplicaciones Swing. En otras palabras los ciclos while(true) deben ejecutarse en su propio Thread.

Saludos