0

Estoy tratando de actualizar mi dataTable cada cierto tiempo desde el Controller con el siguiente código.

if (tiempMilisegundos > 0) {
            timer = new Timer(tiempMilisegundos, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    obtenerCatalogos();
                    org.primefaces.context.RequestContext.getCurrentInstance().update(
                            "tablaAlertasCped");
                }
            });

            timer.start();
        }

Pero al momento de llegar al RequestContex muestra el siguiente error:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at org.primefaces.context.RequestContext.getCurrentInstance(RequestContext.java:39) at mx.gob.sat.matce.rni.web.controller.AlertasController.obtenerCatalogos(AlertasController.java:235) at mx.gob.sat.matce.rni.web.controller.AlertasController$1.actionPerformed(AlertasController.java:198) at javax.swing.Timer.fireActionPerformed(Timer.java:291) at javax.swing.Timer$DoPostEvent.run(Timer.java:221) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:642) at java.awt.EventQueue.access$000(EventQueue.java:85) at java.awt.EventQueue$1.run(EventQueue.java:603) at java.awt.EventQueue$1.run(EventQueue.java:601) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:612) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Alguien sabrá el motivo, he probado el request fuera del timer y si funciona pero dentro de el ya no.

Dev. Joel
  • 23,229
  • 3
  • 25
  • 44
jose
  • 23
  • 5
  • 2
    Posible duplicado de [¿Cuál es la solución a todos los errores NullPointerException presentes, pasados y futuros?](https://es.stackoverflow.com/questions/42977/cu%c3%a1l-es-la-soluci%c3%b3n-a-todos-los-errores-nullpointerexception-presentes-pasados) – Pablo Lozano Jul 30 '19 at 07:08

1 Answers1

2

RequestContext.getCurrentInstance() te está devolviendo null, y aunque no te ayude en tu problema, este compartamiento es normal.

El RequestContext de PrimeFaces requiere que pueda acceder al JSF FacesContext. Pero este último solo es accesible desde un thread que esté procesando un request (pedido) JSF.

Cuando usas un Timer, este ejecuta tu código en un thread distinto que no sabe nada de JSF, ni del FacesContext, por eso te devuelve null.

Referencias en inglés:

sstan
  • 16,591
  • 2
  • 21
  • 45