style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

ayuda: Como llamar a un metodo de un midlel en javaMe

buenas quiero ver si alguien puede por favor este es mi problema:
tengo una clase del tipo midlet llamada HelloMIDlet que posee un metodo sonido(aca el codigo):

public class HelloMIDlet extends MIDlet implements CommandListener {

private boolean midletPaused = false;

public void sonido(){
textField5.setString("se ejecuto ese metodo sonido");
display=Display.getDisplay(this);
Alert alerta=new Alert(null, "tiempo", null, AlertType.ALARM);
display.setCurrent(alerta);

}

y tengo otra clase (thread) llamada Tiempo1 y desde esta clase quiero invocar al metodo sonido de la clase anterior (HelloMIDlet),
aca abajo el codigo del hilo, como veran e hecho lo usual en este caso :
HelloMIDlet cel=new HelloMIDlet(2); //declarar un objeto del tipo HelloMIDlet
cel.sonido(); //invocacion su metodo sonido

public class Tiempo1 extends Thread {
TextField testo;
public boolean continuar=true;
int conteo=0;
int ciclo=0;
int sciclo1=0;
int sciclo2=0;
int conteoCiclo=0;

boolean estado1=true;

public Tiempo1(TextField test,int xciclo,int xsubciclo1,int xsubciclo2){

testo=test;
ciclo=xciclo;
sciclo1=xsubciclo1;
sciclo2=xsubciclo2;
}

public void run(){
while(continuar){

try{
while(ciclo>0){
conteo++;
testo.setString(String.valueOf(conteo));
if (estado1){
if(conteo>sciclo1){
conteo=0;
estado1=false;
HelloMIDlet cel=new HelloMIDlet();

cel.sonido(); // invocacion al metodo
}
}else{
if(conteo>sciclo2){
conteo=0;
ciclo=ciclo-1;

if (ciclo>0){
estado1=true;
conteo=0;
HelloMIDlet cel=new HelloMIDlet();
cel.sonido();// invocacion al metodo
}
}
}

sleep(1000);
}

}catch(Exception e4){

}
}

}
}

el compilador no me arroja ningun error- mi problema es k este metodo no se llega a ejecutar .

Prove tambien otra forma le cree un constructor a la clase HelloMIDlet de la sgte manera:

public HelloMIDlet(int o) {
textField5.setString("ales");
display=Display.getDisplay(this);
Alert alerta=new Alert(null, "tiempo", null, AlertType.ALARM);
display.setCurrent(alerta);
}

en la clase Tiempo1 : y por lo poco k se al crear el objeto de tipo HelloMIDlet se deveria ejecutar el codigo del constructor creado:
HelloMIDlet cel=new HelloMIDlet(4);
pero no pasa nada.

Agradeceria mucho su ayuda.
gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de beto.bateria

Al ejecutar un programa j2me,

Al ejecutar un programa j2me, se crea un MIDlet, y este MIDlet es el unico que puede existir dentro de ese programa. Con display.setCurrent(objeto) lanzas el objeto para que este se vea, este objeto debe de ser una clase que herede de Screen () (puedes verificarlo en la api http://download.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/in...) este objeto puede ser un list, un form, etc.

Yo te recomiendo que crees una clase que herede de Form e implemente CommandListener y a esa clase le digas que la muestre, quedaria algo asi (display.setCurrent(form))

quedaria algo asi:

public class MIDLet1 extends MIDlet {
 startApp(){
  Hello hello = new Hello();
  display.setCurrent(hello);
 }
 pauseApp()
 destroyApp()
}

public class Hello extends forms implements CommandListener{
 //todo lo que tu quieras;

 public void sonido(){
 //todo lo que tu quieras;
 }
}

public class Tiempo1 extends Thread {

 Hello hello;

 public Tiempo1(Hello hello){

 this.hello = hello;
 }

 public void run(){
 // todo lo que tu quieras;
 hello.sonido();
 }
}

La verdad no se que quieres hacer, asi que no se en que momento debes de crear el objeto que herede de tiempo y executar start, pero espero que te sirva de algo. Otra cosa, a la clase que hereda de Form le puedes agregar el list y otras cosas, verifica en la api (la url en un parrafo anterior)

cantinfleando

para beto.baterias:

1.- "Con display.setCurrent(objeto) lanzas el objeto para que este se vea, este objeto debe de ser una clase que herede de Screen () (puedes verificarlo en la api ". esto es parcialmente cierto ya que puedes usar un Canvas o GameCanvas y estas no heredan de Screen

2.-suponiendo que las 3 clases estan en archivos diferentes, que usas los import correspondientes, que heredas de Form y no de forms y que ademas tengas una razon muy muy muy poderosa como para crear una clase que herede de Form, aun asi esto
"public class Hello extends forms implements CommandListener" simplemente no se puede hacer

3.-cuando implementas CommandListener debes implementar su metodo CommandAction

4.- no puedes crear clases que hereden de Form

5.- no puedes agregarle un List a un Form

6.- en un MIDlet Suite puedes tener varios MIDlets, entre otras cosas

para aless:

te falta crear un objeto de tipo Tiempo1 e iniciar el hilo(metodo start()) cuando quieras que se ejecute el metodo sonido, en el constructor del objeto tipo Tiempo1 mandale una instancia del mismo MIDlet. Tiempo1 tiempo = new Tiempo1(this);
la clase Tiempo1 que hizo beto.baterias tiene algo de sentido solo que cambia Hello por HelloMIDlet

espero les sirva la informacion

saludos

Imagen de beto.bateria

Karoshi, tienes razon en

Karoshi, tienes razon en algunas partes, pero :
public class Hello extends Form implements CommandListener
Si se puede hacer, de hecho durante mas de dos años trabaje haciendo interfaces con este tipo de prototipo.

Los objetos que se le pueden agregar a las clases que heredan de Form son:
ChoiceGroup, CustomItem, DateField, Gauge, ImageItem, Spacer, StringItem, TextField (no incluye list :s)

display.setCurrent(objeto) lanza objetos que heredan de displayable.

aless una disculpa por las inconsistencias :)

aless te recomiendo que crees una clase que herede de Form y con esta trabajes, en vez de la de MIDlet, cuando aprendas patrones de diseño te daras cuenta que la clase MIDlet sirve como un controlador.

interesante

este tema esta interesante

me gustaria agregar que dentro de los objetos que puedes agregar a Form te falto el mas usando: Command y uno menos usado como es el Ticker

"public class Hello extends Form implements CommandListener"
cuando intentes hacer eso te encontraras con el problema de que no puedes sobreescribir el constructor de la clase y te estara marcando error, ademas como comentaba no encuentro una buena razon para crear una clase que herede de Form, pero si la tienes entonces deberias hacerlo con los demas clases que heredan de Screen o si ya estas en ese plan hasta las que heredan de Item

por razones practicas yo no recomendaria eso

saludos

Imagen de beto.bateria

Que tal Karoshi, me

Que tal Karoshi, me interesaria ver como creas tus aplicaciones, me da la impresion que las haces completamente diferentes a las mias. Trabajo con una arquitectura MVC, el codigo que muestro es la vista , en la parte de abajo esta el codigo de la interface uiable:

package view;

import java.util.*;

import javax.microedition.lcdui.*;

import businessobject.*;

import controller.*;

import view.able.*;

public class ContratacionView extends Form implements CommandListener, uiable{

    private TextField habitacion     = null;

    private TextField identificacion = null;

    private TextField nombre         = null;

    private TextField apellido       = null;

    private TextField reservada      = null;

    private TextField fechaEntrada   = null;

    private TextField fechaSalida    = null;

   

    private Command _aceptar         = null;

    private Command _habitaciones    = null;

    private Command _reporte         = null;

    private Command _sincronizar     = null;

    private Command _salir           = null;

   

    private Controller controller    = null;

   

    public ContratacionView(Controller controller){

       

        super("Contratacion de habitacion");

       

        this.controller = controller;

       

        habitacion     = new TextField("Habitacion", "", 40, TextField.ANY);

        identificacion = new TextField("ID Persona", "", 40, TextField.ANY);

        nombre         = new TextField("Nombre"    , "", 40, TextField.ANY);

        apellido       = new TextField("Apellido"  , "", 40, TextField.ANY);

        reservada      = new TextField("Reservada" , "", 40, TextField.NUMERIC);

        fechaEntrada   = new TextField("Fecha E"   , "", 40, TextField.ANY);

        fechaSalida    = new TextField("Fecha S"   , "", 40, TextField.ANY);

       

        _aceptar       = new Command("Contratar"            , Command.OK, 0);

        _habitaciones  = new Command("Status Habitaciones"  , Command.OK, 1);

        _reporte       = new Command("Reporte Habitaciones" , Command.OK, 2);

        _sincronizar   = new Command("Sincronizar"          , Command.OK, 3);

        _salir         = new Command("Salir"                , Command.EXIT, 4);

       

        this.append(habitacion);

        this.append(identificacion);

        this.append(nombre);

        this.append(apellido);

        this.append(reservada);

        //this.append(fechaEntrada);

        //this.append(fechaSalida);

       

        this.addCommand(_aceptar);

        this.addCommand(_habitaciones);

        this.addCommand(_reporte);

        this.addCommand(_sincronizar);

        this.addCommand(_salir);

       

        this.setCommandListener(this);

    }

   

    public void commandAction(Command c, Displayable d){

       

        if (c == _aceptar){

            saveContratacion();

        } else if (c == _habitaciones){

            showEstadoHabitaciones();

        } else if (c == _reporte){

            showReporte();

        } else if (c == _sincronizar){

            controller.showSincronizar();

        } else if (c == _salir){

            controller.destroyApp(true);

        }

    }

    public void showMessage(String message){

        Alert alerta = new Alert(message);

        controller.getDisplay().setCurrent(alerta, this);

    }

   

    public void showObject(Vector objects){

       

        Habitacion hab = (Habitacion)objects.elementAt(0);

       

        habitacion.setString(hab.getNumeroHabitacion());

       

        if (hab.getEstado() == 3){

       

            reservada.setString("0");

        } else {

       

            reservada.setString("1");

        }

    }

   

    public void saveContratacion(){

       

        Habitacion oHabitacion = new Habitacion();

       

        String hab = habitacion.getString();

        String ide = identificacion.getString();

        String nom = nombre.getString();

        String ape = apellido.getString();

        String res = reservada.getString();

       

        if (

             (hab.length() > 0) && (ide.length() > 0) &&

             (nom.length() > 0) && (ape.length() > 0) &&

             (res.length() > 0) && ( (res.equals("0")) || (res.equals("1")))

        ){

            oHabitacion.setNumeroHabitacion(hab);

            oHabitacion.setIdPersona(ide);

            oHabitacion.setNombre(nom);

            oHabitacion.setApellido(ape);

            int estado = Integer.parseInt(res);

            oHabitacion.setEstado(estado);

            Habitacion habitacionWS = controller.saveContratacion(oHabitacion);

           

            if (habitacionWS == null){

                this.showMessage("No se pudo conectar al servidor, la informacion se guardara en el dispositivo.");

            }

           

        } else {

            this.showMessage("Es necesario llenar todos los campos, el campo reservada solo acepta los valores 0 y 1");

        }

    }

   

    public void showEstadoHabitaciones(){

       

        controller.showEstadoHabitaciones();

    }

   

    public void showReporte(){

       

        controller.showReporte();

    }

}

package view.able;

import javax.microedition.lcdui.*;

import java.util.*;

public interface uiable{

   

    public void showMessage(String message);

   

    public void showObject(Vector objects);

   

}

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">