java blackberry

java - Blackberry: llame a un método después de un tiempo especificado



(2)

Este ejemplo en la clase de Timer y TimerTask java proporciona algunas ideas sobre lo que desea hacer:

http://javaprogramming.language-tutorial.com/2012/02/demonstrate-timer-and-timertask.html

Después de crear una sesión, quiero llamar a un método una y otra vez después de un tiempo específico, es decir, 5 segundos.

Pero cuando llamo a un método, me da un error. Aquí está el código de ejemplo.

public class RunFunction extends MainScreen{ public RunFunction() { //Call Function again and again after 5 sec setTitle("Timer"); Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { BasicEditField b = new BasicEditField("Hello", ""); String a = b.getText(); Dialog.alert("Value " +a); } }, 5000); } }

Necesito ayuda relacionada con esto. ¿Puedes proporcionar algún código de muestra?


Desde los documentos de BlackBerry en la clase del temporizador :

Una instalación para hilos para programar tareas para la ejecución futura en un hilo de fondo.

Entonces, lo primero que debe entender es que cualquier trabajo que haga en el método run() se ejecutará en una cadena de fondo. Los subprocesos de fondo no pueden modificar la interfaz de usuario directamente . Probablemente IllegalStateException una IllegalStateException haciendo eso.

Tal vez esto es solo código de prueba , pero este código

BasicEditField b = new BasicEditField("Hello", ""); String a = b.getText(); Dialog.alert("Value " +a);

es un poco confuso Crea un BasicEditField , pero solo lo usa para obtener el valor String pasado a él. Solo crear instancias de un campo no lo agrega a una pantalla. Entonces, necesitarías llamar

add(b);

después de este código para el campo de edición para mostrar. Pero, de nuevo, eso sería modificar la interfaz de usuario directamente. Entonces, en su caso, probablemente solo necesite envolver su código con una llamada a UiApplication#invokeLater() :

timer.schedule(new TimerTask() { public void run() { // this code executed on background thread -> not UI safe! UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { // this code safely executed on UI thread BasicEditField b = new BasicEditField("Hello", ""); add(b); String a = b.getText(); Dialog.alert("Value " +a); } }); } }, 5000);

A continuación, al llamar al Timer#schedule(TimerTask,long) solo se programará la ejecución de su tarea una vez , después de 5000 milisegundos. Si desea que se ejecute una y otra vez , use la versión del schedule(TimerTask,long,long) que toma tres parámetros . El último parámetro es la cantidad de tiempo entre cada llamada al método run() la tarea del temporizador.