У меня есть класс Observable и класс Observer.
Это немного глупо, но метод notifyObserver(arg) моего класса Observable НИКОГДА не вызывает метод update(Observable obj, Object arg) моего класса Observer...
Вот мой класс OBSERVABLE: который извлекает кадр GPS из приемника GPS.
public class GPSFrame extends Observable implements Runnable, SerialPortEventListener
{
static Thread myThread;
private CommPortIdentifier portid=null;
private SerialPort serialport;
private BufferedReader fluxgps; // Reading flow port where the GPS is connected
/** CONSTRUCTOR **/
public GPSFrame()
{
myThread=new Thread(this);
}
public void start()
{
// The thread start automatically run() method
myThread.start();
}
@Override
public void run()
{
try
{
// Driver initialization
Win32Driver driver=new Win32Driver();
driver.initialize();
GPSFrame gpscom=new GPSFrame();
gpscom.listPort();
}
catch (Exception e){ System.out.println("start "+e.toString()); }
}
// Scanning all available ports
public void listPort()
{
Enumeration<?> listport=CommPortIdentifier.getPortIdentifiers();
while(listport.hasMoreElements())
{
portid=(CommPortIdentifier)(CommPortIdentifier)listport.nextElement();
if(portid.getPortType()==CommPortIdentifier.PORT_SERIAL)
{
// On lance la gestion des evenements sur le portid
this.portInitialization(portid.getName());
}
}
}
public void portInitialization(String portcom)
{
// ...
}
public void retrieveGpsFrame()
{
String rawframe=new String();
try
{
rawframe=(String)fluxgps.readLine();
String[]gpsframe=rawframe.split(",");
// We are doing a pre-selection of the frame
if(gpsframe[0].equals("$GPGGA") || gpsframe[0].equals("$GPRMC"))
{
/* IMPORTANT - DON'T FORGET SETCHANGED() or GPSFrame'll never
* notify UPDATE() ServerBoard method - We'll never see any changes */
System.out.println(rawframe);
setChanged();
notifyObservers(rawframe);
}
else
{
gpsframe=null;
}
}
catch (IOException e) { e.printStackTrace(); }
}
}
Вот мой класс OBSERVER: который получает и показывает... ничего!
public class ServerBoard extends JFrame implements Observer
{
[...]
// RETRIEVE GPS FRAMES
public void retrieveGPSFrame()
{
gpsframe = new GPSFrame();
gpsframe.addObserver(this);
gpsframe.start();
}
// UPDATE THE JTEXTAREA AND CLIENT
public void update(Observable obj, Object arg)
{
messagearea.append("Affiche moi ce message");
if (arg instanceof String)
{
gpsdata = (String) arg;
System.out.println(gpsdata );
messagearea.append(gpsdata);
tcpserver.sendMessage(gpsdata);
}
}
public void serialEvent(SerialPortEvent event)
{
// Gestion des evenements sur le port
// On ne fait rien sauf quand les donnees sont disponibles
switch(event.getEventType())
{
case SerialPortEvent.DATA_AVAILABLE:
this.retrieveGpsFrame(); // Si les datas sont dispo, on lance la lecture
break;
default:
break; // On ne fait rien sinon
}
}
}
В моем логарифме ошибок нет. Когда я запускаю свои приложения в режиме отладки, они никогда не проходят метод обновления.
Не могли бы вы мне помочь ?
Заранее спасибо.
С уважением,
тофу
notifyObservers
звонят? - person nachokk   schedule 06.01.2014