Hola, tengo un problema porque no entiendo muy bien como se capturan los eventos en los JavaBeans.
Parto del ejemplo de un JavaBeans temporizador que cuando llega a 0, muestra un mensaje.
Código:
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;
}
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)
Código:
private void temporizadorBean1CapturarFinCuentaAtras(Temporizador.TemporizadorBean.FinCuentaAtrasEvent evt) {
// TODO add your handling code here:
JOptionPane.showMessageDialog(null, "¡¡Fin!!", "Aviso",
JOptionPane.INFORMATION_MESSAGE);
}
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)
He copiado la clase FinCuentaAtrasEvent y la interface FinCuentaAtrasListener, y la captura con esta condición:
Código:
if(horaReal==alarma.getHora()& minutosReal==alarma.getMinuto()&alarma.isActivo()){
//JOptionPane.showMessageDialog(null,"Alarma");
receptor.capturarFinCuentaAtras( new FinCuentaAtrasEvent(this));
Cuando pruebo este JavaBean no tengo en el menú contextual de eventos el FinCuentaAtras, no se a que se debe esto...
Introduzco el código del evento a mano
Código:
private void relojBean2CapturarFinCuentaAtras(Reloj.RelojBean.FinCuentaAtrasEvent evt) {
// TODO add your handling code here:
JOptionPane.showMessageDialog(null, "¡¡Alarma!!", "Aviso",
JOptionPane.INFORMATION_MESSAGE);
}
Y me aparace este error
Código:
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)
relojBean1.setAlarma(???);
¿Alguien me podría orientar un poco y decirme que estoy haciendo mal o qué camino debo seguir?
Gracias de antemano, saludos.