Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: MasterPunk en 10 Junio 2013, 14:58 PM

Título: Pregunta jFrame
Publicado por: MasterPunk en 10 Junio 2013, 14:58 PM
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
Título: Re: Pregunta jFrame
Publicado por: RyogiShiki en 10 Junio 2013, 18:37 PM
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