addEventListener(this)

Gerd Müller

Mitglied
Servus,

kann mir bitte jemand erklären was der this-operator genau bei addEventListener(this) macht?
Müsste hier nicht ein SerialPortEventListener Object stehen anstelle des this-Operator sein, oder geht das nicht direkt mit einem Interface?

Java:
import java.io.IOException;
import java.io.InputStream;
 
import javax.comm.CommPortIdentifier;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;
public class PortReader implements SerialPortEventListener {
  //@SuppressWarnings("unchecked")
 // private static Enumeration ports;
 
  //static CommPortIdentifier pID;
 
  private InputStream inStream;
 
  private static SerialPort serPort=null;
 
  public PortReader(CommPortIdentifier pID) throws Exception{
 
	   ReaderWindow.getTa().append("Lausche auf Port:"+pID.getName()+"\n");
 
	  try{
	    serPort = (SerialPort) pID.open("PortReader", 2000);
	    inStream = serPort.getInputStream();
	    [COLOR="Red"]serPort.addEventListener(this);[/COLOR]
	    serPort.notifyOnDataAvailable(true);
	    serPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
	  }catch(PortInUseException piu){
		  ReaderWindow.getTa().append("Der Port ist in Benutzung\n");
	  }
 
  }
 
  public void serialEvent(SerialPortEvent event) {
    switch (event.getEventType()) {
    case SerialPortEvent.BI:
      ReaderWindow.getTa().append("SerialPortEvent.BI occurred\n");
    case SerialPortEvent.OE:
    	ReaderWindow.getTa().append("SerialPortEvent.OE occurred\n");
    case SerialPortEvent.FE:
    	ReaderWindow.getTa().append("SerialPortEvent.FE occurred\n");
    case SerialPortEvent.PE:
    	ReaderWindow.getTa().append("SerialPortEvent.PE occurred\n");
    case SerialPortEvent.CD:
    	ReaderWindow.getTa().append("SerialPortEvent.CD occurred\n");
    case SerialPortEvent.CTS:
    	ReaderWindow.getTa().append("SerialPortEvent.CTS occurred\n");
    case SerialPortEvent.DSR:
    	ReaderWindow.getTa().append("SerialPortEvent.DSR occurred\n");
    case SerialPortEvent.RI:
    	ReaderWindow.getTa().append("SerialPortEvent.RI occurred\n");
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
    	ReaderWindow.getTa().append("SerialPortEvent.OUTPUT_BUFFER_EMPTY occurred\n");
      break;
    case SerialPortEvent.DATA_AVAILABLE:
    	ReaderWindow.getTa().append("SerialPortEvent.DATA_AVAILABLE occurred\n");
      byte[] readBuffer = new byte[20];
 
      try {
        while (inStream.available() > 0) {
          int numBytes = inStream.read(readBuffer);
          ReaderWindow.getTa().append("Bytes: "+numBytes+"\n");
        }
        ReaderWindow.getTa().append(new String(readBuffer));
      } catch (IOException ioe) {
    	  ReaderWindow.getTa().append("Exception " + ioe+"\n");
      }
      break;
    }
  }
 
public static SerialPort getSerPort() {
	return serPort;
}
 
public void setSerPort(SerialPort serPort) {
	PortReader.serPort = serPort;
}
 
}

Danke
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
es muss ein SerialPortEventListener-Object übergeben werden und this beschreibt das eigene Objekt der Klasse PortReader,
welches das Interface SerialPortEventListener implementiert, also ein erlaubter Wert ist
 

Gerd Müller

Mitglied
Danke schonmal für deine Hilfe!
Ich hab jetzt meinen Code für meine Anwendung Umgeschrieben.
Ich möchte über einen COM Port, Daten eines Stromzählers einlesen, der Zähler schickt so alle 3-4 Sekunden neue Daten.
Wie mach ich das jetzt genau, das jedes mal wenn neue Daten kommen mein Programm auf Hören schaltet?
Wie genau kann ich jetzt die SerialPortEvent.DATA_AVAILABLE Variable sinnvoll nutzen??oder muss ich public void serialEvent(SerialPortEvent event) irgendwie aufrufen?
Java:
import gnu.io.*;
import java.io.*;
import java.util.*;


public class NamedPortListener implements SerialPortEventListener
{

	private static SerialPort OffenerPort=null;
	InputStream inputStream;
	
//Konsturktor

public NamedPortListener()
{
}

public NamedPortListener(CommPortIdentifier PortToOpen)
{
	if (PortToOpen.getPortType() == CommPortIdentifier.PORT_SERIAL) {
		try {
			OffenerPort = (SerialPort) PortToOpen.open("PortOpener",10);			
			System.out.println("wird zur Zeit nicht benutzt.");
			} catch(PortInUseException e) {
			String owner = PortToOpen.getCurrentOwner();
			if (owner == null) owner = "unbekannt";
			System.out.println("wird zur Zeit von "+owner+ " benutzt.");
			}
		try{	OffenerPort.addEventListener(this);
		}
		catch(TooManyListenersException e){
		}		
		}	
	
}
	
private CommPortIdentifier findport()
{	
			CommPortIdentifier ocom1=null;
		
			try {						
				ocom1 = CommPortIdentifier.getPortIdentifier("COM1");
				System.out.println("COM1 gefunden");
				} 
			catch(NoSuchPortException e) {
				System.out.println("Fehler COM1 nicht gefunden");
				}
		
return ocom1;	
}
		

private void setParameter(SerialPort PortToParameter)
{
	try{
		PortToParameter.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
		System.out.println("COM1 erfolgreich parametrieren.");
	}
	catch(UnsupportedCommOperationException e)
	{
		System.out.println("Fehler beim Schnittstelle parametrieren.");
	}
}

public void serialEvent(SerialPortEvent event) {
    switch (event.getEventType()) {
    case SerialPortEvent.BI:
    case SerialPortEvent.OE:
    case SerialPortEvent.FE:
    case SerialPortEvent.PE:
    case SerialPortEvent.CD:
    case SerialPortEvent.CTS:
    case SerialPortEvent.DSR:
    case SerialPortEvent.RI:
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
      break;
    case SerialPortEvent.DATA_AVAILABLE:
      byte[] readBuffer = new byte[396];

      try {
        while (inputStream.available() > 0) {
          int numBytes = inputStream.read(readBuffer);
        }
        System.out.print(new String(readBuffer));
       
      } catch (IOException e) {
      }
      break;
    }
  }



public static void main(String[] args) 
{
	NamedPortListener start = new NamedPortListener();
	CommPortIdentifier derPort = start.findport();
	NamedPortListener ref=new NamedPortListener(derPort);
	ref.setParameter(OffenerPort);
	
	
   
      OffenerPort.close();
}	
}
 

Neue Themen


Oben