(Solucionado) Ventana JFrame

Imagen de keshone
0 puntos

Buenas!

No sé si la estoy liando al escribir en esta sección, o debería ir al apartado de Imagen... probaremos!

Mi problema es el siguiente, intento crear una ventanita MUY sencilla con JFrame y parece que todo se crea bien, pero en cuanto pulso sobre ella, se cambia el color y se pone toda gris y no me deja cerrarla si no es forzando la salida. Aquí os pongo el código ... pero me da a mí que será alguna librería que no tenga instalada en Ubuntu... algo del GUI o algo...

import javax.swing.*;
import java.awt.*;

public class UtilitatNewFrame{

public static JFrame crearNewFrame(){

JFrame marc= new JFrame ("kesh");
marc.setSize(300,300);
marc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contingut=marc.getContentPane();
contingut.setLayout(new BorderLayout());
contingut.add(new JButton ("Boton 1"),BorderLayout.NORTH);
contingut.add(new JButton ("Boton 2"),BorderLayout.CENTER);

return marc;
}

public static void main (String[]args){

JFrame frame = UtilitatNewFrame.crearNewFrame();
frame.setVisible(true);
}
}

 

Muchas gracias!

Imagen de akdmia
+1
0
-1

Te fijaste si esta lanzando alguna Exception en la consola ?

+1
0
-1
Imagen de keshone
+1
0
-1

Sí, me fijé y no está lanzando ninguna... no sé qué puede ser...

+1
0
-1
Imagen de akdmia
+1
0
-1

Con que JRE lo estas ejecutando ?

fijate, que por defecto ubuntu instala GCJ, que es una implementacion de Java, pero no esta 100% completa.

ejecuta:

java -version

 

si instalaste java de Sun desde repositorios, asegurate de tenerlo en el PATH:

sudo update-alternatives --config java

+1
0
-1
Imagen de keshone
+1
0
-1

Al ejecutar el comando para ver las alternativas de java, me aparece esto:

Hay 2 alternativas que proveen `java'.

  Selección     Alternativa
-----------------------------------------------
 +        1    /usr/lib/jvm/java-gcj/jre/bin/java
*         2    /usr/bin/gij-4.2
 

Pero lo curioso es que tanto si selecciono 1 o 2, al ejecutar "java -version", me aparece lo mismo:

java version "1.5.0"
gij (GNU libgcj) version 4.2.1 (Ubuntu 4.2.1-5ubuntu5)

Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 

No deberían aparecer cosas distintas?

De todas formas, comentarte que compilar, compila bien. El caso es que al ejecutar el programa se queda como inactivo...

gracias! 

 

+1
0
-1
Imagen de akdmia
+1
0
-1

Lo que sospechaba.. tenes el GCJ defecto ( y el de sun directamente no lo tenes instalado )...

> Pero lo curioso es que tanto si selecciono 1 o 2, al ejecutar "java -version", me aparece lo mismo

en realidad los 2 son el mismo.

/usr/bin/gij-4.2: (gij = GNU Interpreter For Java ), es el interprete para java de GCJ.

/usr/lib/jvm/java-gcj/jre/bin/java: es un enlace a "gij".. con el proposito de que el comando "java" funcione.

 

Te aconsejaria que instales el java de sun:

sudo apt-get install sun-java6-jdk

 

y luego si.. ejecutas de nuevo el:

sudo update-alternatives --config java

sudo update-alternatives --config javac ( este seria para cambiar el compilador )

 

+1
0
-1
Imagen de pastorius3
+1
0
-1

buenas,

mira, llevo tiempo en ubuntu y no mucho en java, pero si creo saber lo que puede estar pasando.

puede ser un problema de PATH, para que puedas interactuar con la interfaz grafica en java,

hace esto. (es una ele, 'l', 'L' )

$ update-java-alternatives -l

lo cual te arroja, las versiones instaladas, recuerda esta parte

'java-6-sun' que esta al final de la primera linea (fijate por la ruta)

java-6-sun 63 /usr/lib/jvm/java-6-sun
java-gcj 1042 /usr/lib/jvm/java-gcj

luego hace esto

$ sudo update-java-alternatives -s java-6-sun

recuerda que java-6-sun es la version que te aparecio con el comando anterior.

despues prueba algun ejemplo,

otra opcion es que yo llamo al metodo para salir de otra forma,

pero tu codigo me funciono bien,

ahora creo que tendrias que extender la clase JFRAME,

tienes que tener cuidado con lo Orientado a objetos,

eso de retornar no me gusto mucho..

espero que haberte ayudado ,

saluDOS

 

| hscs87(arroba)gmail.com | Linux User #415581 | Ubuntu User #6998

+1
0
-1

return NULL ;  

| pastorius3 gmail com | Linux User #415581 | Ubuntu User #6998 |

Imagen de akdmia
+1
0
-1

Pero si te fijas lo que mostro antes, ( con el resultado de update-alternatives --config java )

veras que el tema es que "java-6-sun" directamente no esta instalado ( o por lo menos no el de repositorios )

por eso el PATH es correcto, porque apunta al unico JRE que tiene instalado.

al parecer es un bug de libgcj..

hice la prueba de ejecutar el .class con java de gcj y efectivamente pude reproducir el problema, en cambio con el java de sun tanto el 5 como el 6, el .class funciono perfectamente.

por eso la solucion, sera instalar java de sun, y recien ahi asignarlo por defecto en el PATH

+1
0
-1
Imagen de keshone
+1
0
-1

Por fin me funciona!!!

Muchísimas gracias a los 2, pastorius3 y akdmia.

Tal y como decía akdmia, el problema era que no tenía la versión de java Sun instalada. Ha sido instalarla y funcionar perfectamente!

Decir, por si a otra persona le pasara, que tiene que tener activados los repositorios Universe y Multiverse para poder descargar la versión de Sun. Esto se hace de manera sencillísima: Sistema-> Administración->Orígenes del Software. Una vez ahí seleccionar las casillas de universe y multiverse.

Además, añadir que funciona mil veces más rápida esta versión de java que la gcj.

Muchísimas gracias sobretodo a akdmia por star desde el principio

+1
0
-1
Imagen de linxzero
+1
0
-1

faltan piezas de codigo en el main
frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){
System.exit(0);}}); //Cierra la ventana

frame.pack(); //posiciona todos los componentes

frame.setVisible(true); //hace visible la ventana(es visible por defecto pero si quieres que este oculta pones setVisible(false);)

espero que solucione el problema si no es esto no se que es

+1
0
-1
Imagen de linxzero
+1
0
-1

agrega esta pieza de codigo al main y deberia sulucionar el problema

frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

agrega esto tambien
frame.pack();

+1
0
-1