Comunicar Interfaz grafica con una clase. (solucion)
Hola que tal a todos, he empezado a programar en java SE 6, estoy realizando unas interfaces con awt (a la mejor no es la mejor manera de realizar interfaces pero es que apenas comienzo es solo para aprender ) en un proyecto que me he propuesto conectándolo con una base de datos en MySQL, y he agregado un hilo de ejecución que detecta si la base de datos esta disponible o no lo esta, este hilo se ejecuta durante todo el proceso desde que se carga la ventana. Mi duda es como logro que en mi hilo de ejecución pueda por ejemplo que mi ventana Frame cambie de estado visible a no visible. Es decir por ejemplo si cuando en mi tarea(hilo) surge una excepción la cambie a estado no visible y cuando se pueda realizar la conexión a la base de datos este visible. Les pongo el código apenas estoy aprendiendo. Quiero que me orienten de antemano muchas gracias. He quitado un poco de código en donde rectifico que existe el driver de mysql.
import java.awt.Panel;
import java.awt.MenuBar;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.Button;
import java.awt.BorderLayout;
import java.sql.*;
public class Editor extends Frame{
public Editor(){
Panel panel1 = new Panel();
Panel panel2 = new Panel();
MenuBar mb = new MenuBar();
Menu m = new Menu("Archivo");
m.add(new MenuItem("Nuevo"));
m.add(new MenuItem("Abrir"));
m.add(new MenuItem("Cerrar"));
mb.add(m);
setMenuBar(mb);
panel1.add("Center",new TextArea("Nuevo Texto",100,100));
panel2.add(new Button("Aceptar"));
panel2.add(new Button("Cancelar"));
setLayout(new BorderLayout());
add("Center",panel1);
add("South",panel2);
}
public static void main(String irv[]){
Status stas = new Status();
Editor nuevo = new Editor();
nuevo.setTitle("Editor");
nuevo.setSize(500,500);
nuevo.setVisible(true);
stas.start();
}
}
class Status extends Thread{
boolean verdad=true;
Connection conexion;
Statement sentencia;
public void run(){
do{
try{
conexion = DriverManager.getConnection("jdbc:mysql://localhost/Base","user","passwd");
sentencia = conexion.createStatement();
System.out.println("Se ha establecido la conexion y creado sentencia");
//en caso alguna puedo implementar .setVisible(true);
}
catch(Exception e){
System.out.println("Ha ocurrido un error tipo "+e);
//Aqui sucede la excepcion y por ejemplo pueda implementar .setVisible(false);
}
try{
sleep(2000);
}catch(InterruptedException e){
System.out.println("Error tipo"+e);
}
} while(verdad);
}
}
Como aclaración la interfaz no tiene en si relación alguna solo es para demostrar si es posible realizar esto. En este caso la clase Editor hereda de Frame, entonces como puedo que este Frame pueda estar visible o no, desde la clase Status que hereda de Thread quiero hacer este cambio con .setVisible(false) o en su caso .setVisible(true) dentro del metodo run() de la clase Status pero no puedo acceder alguna idea de como hacerlo se los agradecería.
Modifico el post ya que aunque he logrado corregir mi código para hacerlo funcionar, me di cuenta que no era posible acceder a un objeto creado por JVM en ejecución(eso creo), así que instancie la clase principal en la otra clase que es una tarea que se ejecuta cada 1 minuto aproximadamente, esto puede servir para quienes han querido desarrollar un software tipo ciber control en java, por que se pide como requisito estar el servidor disponible y si no esta este se desactiva(pantalla), en realidad solo hacemos .setVisible(false); para ocultar la pantalla. Claro todo esto es solo para demostrar el funcionamiento.
import java.awt.Panel;
import java.awt.MenuBar;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.Button;
import java.awt.BorderLayout;
import java.sql.*;
public class Editor extends Frame{
public Editor(){
Panel panel1 = new Panel();
Panel panel2 = new Panel();
MenuBar mb = new MenuBar();
Menu m = new Menu("Archivo");
m.add(new MenuItem("Nuevo"));
m.add(new MenuItem("Abrir"));
m.add(new MenuItem("Cerrar"));
mb.add(m);
setMenuBar(mb);
panel1.add("Center",new TextArea("Nuevo Texto",100,100));
panel2.add(new Button("Aceptar"));
panel2.add(new Button("Cancelar"));
setLayout(new BorderLayout());
add("Center",panel1);
add("South",panel2);
Visible(true);
}
public void Visible(boolean var){
this.setTitle("Editor");
this.setSize(500,500);
this.setVisible(var);
}
public static void main(String irv[]){
Status stas = new Status();
stas.start();
}
}
class Status extends Thread {
boolean bandera=false;
boolean verdad=true;
Connection conexion;
Statement sentencia;
Editor face = new Editor();
public void run(){
do{
try{
//user=usuario de mysql, passwd=contraseña, base=nombre de la base de datos
conexion = DriverManager.getConnection("jdbc:mysql://localhost/base","user","passwd");
sentencia = conexion.createStatement();
System.out.println("Se ha establecido la conexion y creado sentencia");
if(bandera==true){
face.Visible(true);
bandera=false;
}
}
catch(Exception e){
System.out.println("Ha ocurrido un error tipo "+e);
face.Visible(false);
bandera=true;
}
try{
sleep(60000);
}catch(InterruptedException e){
System.out.println("Error tipo"+e);
}
} while(verdad);
}
}
- Inicie sesión o regístrese para enviar comentarios
Comentarios recientes
hace 8 semanas 5 días
hace 9 semanas 6 días
hace 16 semanas 4 días
hace 1 año 9 semanas
hace 2 años 21 semanas
hace 2 años 25 semanas
hace 2 años 32 semanas
hace 2 años 40 semanas
hace 2 años 43 semanas
hace 2 años 44 semanas