Parto del ejemplo de un JavaBeans temporizador que cuando llega a 0, muestra un mensaje.
Código:
Y en la clase donde pruebo el JavaBeans temporizador, que es una aplicación de escritorio Java, implemento la acción FinCuentaAtras (accedo con el botón derecho, Eventos, FinCuentaAtras)public class FinCuentaAtrasEvent extends java.util.EventObject { // constructor, se le pasa el objeto y un identificador. public FinCuentaAtrasEvent(Object source) { super(source); } } //Define la interfaz para el nuevo tipo de evento public interface FinCuentaAtrasListener extends EventListener { void capturarFinCuentaAtras(FinCuentaAtrasEvent ev); } protected int tiempo; public static final String PROP_TIEMPO = "tiempo"; private FinCuentaAtrasListener receptor; public void actionPerformed(ActionEvent e) { // Aquí el código que queramos ejecutar. setText(Integer.toString(tiempo)); repaint(); tiempo--; if(tiempo == 0){ setActivo(false); //JOptionPane.showMessageDialog(null, "Terminado", "Aviso", //JOptionPane.INFORMATION_MESSAGE); receptor.capturarFinCuentaAtras( new FinCuentaAtrasEvent(this)); } } public void addFinCuentaAtrasListener(FinCuentaAtrasListener receptor) { this.receptor = receptor; } public void removeFinCuentaAtrasListener(FinCuentaAtrasListener receptor) { this.receptor=null; }
Código:
Lo que tengo que realizar yo es capturar el evento cuando la hora de un reloj coincida con la de la alarma establecida en las propiedades del reloj (JavaBean)private void temporizadorBean1CapturarFinCuentaAtras(Temporizador.TemporizadorBean.FinCuentaAtrasEvent evt) { // TODO add your handling code here: JOptionPane.showMessageDialog(null, "¡¡Fin!!", "Aviso", JOptionPane.INFORMATION_MESSAGE); }
He copiado la clase FinCuentaAtrasEvent y la interface FinCuentaAtrasListener, y la captura con esta condición:
Código:
Cuando pruebo este JavaBean no tengo en el menú contextual de eventos el FinCuentaAtras, no se a que se debe esto...if(horaReal==alarma.getHora()& minutosReal==alarma.getMinuto()&alarma.isActivo()){ //JOptionPane.showMessageDialog(null,"Alarma"); receptor.capturarFinCuentaAtras( new FinCuentaAtrasEvent(this));
Introduzco el código del evento a mano
Código:
Y me aparace este errorprivate void relojBean2CapturarFinCuentaAtras(Reloj.RelojBean.FinCuentaAtrasEvent evt) { // TODO add your handling code here: JOptionPane.showMessageDialog(null, "¡¡Alarma!!", "Aviso", JOptionPane.INFORMATION_MESSAGE); }
Código:
relojBean1.setAlarma(???);ene 04, 2015 3:32:30 PM org.jdesktop.application.Application$1 run GRAVE: Application class desktopapplication1.DesktopApplication1 failed to launch java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any> at desktopapplication1.DesktopApplication1View.initComponents(DesktopApplication1View.java:125) at desktopapplication1.DesktopApplication1View.<init>(DesktopApplication1View.java:28) at desktopapplication1.DesktopApplication1.startup(DesktopApplication1.java:19) at org.jdesktop.application.Application$1.run(Application.java:171) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744) at java.awt.EventQueue.access$400(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:697) at java.awt.EventQueue$3.run(EventQueue.java:691) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:714) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Exception in thread "AWT-EventQueue-0" java.lang.Error: Application class desktopapplication1.DesktopApplication1 failed to launch at org.jdesktop.application.Application$1.run(Application.java:177) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744) at java.awt.EventQueue.access$400(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:697) at java.awt.EventQueue$3.run(EventQueue.java:691) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:714) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any> at desktopapplication1.DesktopApplication1View.initComponents(DesktopApplication1View.java:125) at desktopapplication1.DesktopApplication1View.<init>(DesktopApplication1View.java:28) at desktopapplication1.DesktopApplication1.startup(DesktopApplication1.java:19) at org.jdesktop.application.Application$1.run(Application.java:171) ... 14 more BUILD SUCCESSFUL (total time: 4 seconds)
¿Alguien me podría orientar un poco y decirme que estoy haciendo mal o qué camino debo seguir?
Gracias de antemano, saludos.