EventListener zu einem COM Port hinzufügen

Status
Nicht offen für weitere Antworten.

bonatus

Aktives Mitglied
Hallo

ich probier schon eine ganze weile rum aber ich bekomme immmer eine Fehler bei:

serialPort.addEventListener(this);

Woran kann das liegen?

und hier der Code dazu:
Code:
public void empfangen()
    {
    	try 
    	{ 
                                 CommPortIdentifier portId = 
        	                           CommPortIdentifier.getPortIdentifier("COM2");
    		 serialPort = (SerialPort) portId.open(this.getClass().getName(),2000); 
    		 InputStream inputStream = serialPort.getInputStream(); 
    		 bufferedReader = new BufferedReader( 
    		 new InputStreamReader(inputStream)); 
    		 outputStream = serialPort.getOutputStream(); 
    		    
    		 serialPort.addEventListener(this);
    		   
    		 serialPort.notifyOnDataAvailable(true); 
    		 serialPort.setSerialPortParams(9600, 
    		         SerialPort.DATABITS_8, SerialPort.STOPBITS_1, 
    		         SerialPort.PARITY_NONE); 

    	} 

    		catch (PortInUseException e)    {System.out.println(e);} 
    		catch (IOException e)               {System.out.println(e);} 


    }


Code:
public void serialEvent(SerialPortEvent event) { 
    	   if(event.getEventType()== SerialPortEvent.DATA_AVAILABLE){ 
    	      try 
                        { 
    	        } 
    	      catch (IOException e) { 
    	         e.printStackTrace(); 
    	      } 
    	   } 
    	}
 
Hallo. Wenn du nicht sagst, was für einen Fehler du bekommst, wird dir wohl keiner helfen können.
 
Die Fehlermeldung:
The method addEventListener(SerialPortEventListener) in the type SerialPort is not applicable for
the arguments (Verwaltung)
 
Versuch mal das (Du musst die 3 Dateien in die richtigen Verzeichnisse geben, sonst geht gar nichts:

win32com.dll nach c:\jdk1.6\jre\bin
comm.jar nach c:\jdk1.6\jre\lib\ext
javax.comm.properties nach c:\jjdk1.6\jre\lib

Code:
public interface ISchnittstelle
    {
      public static int BITANZAHLPROPAKET = 11;  
      public static int DATENABSTAND = 4;       
    }





import javax.comm.*;
import java.io.*;
import java.util.*;

public class SerielleSchnittstelle1 implements Runnable, SerialPortEventListener, ISchnittstelle   
    {
     private static OutputStream outs;    
     private Enumeration portList;		   
     private CommPortIdentifier portId;
     private SerialPort serialPort;
     private InputStream ins;  
     private Thread readThread;
     private int portAnzahl = 0;
     private int baudRate = 9600;
     private byte[] readBuf = new byte[100];
     
     public SerielleSchnittstelle1()
	{
	try { 
                    this.baudRate = baudRate;
	    portList = CommPortIdentifier.getPortIdentifiers();
	    while (portList.hasMoreElements()) 
		{
		portId = (CommPortIdentifier) portList.nextElement();
		if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) 
		    {
		    if (portId.getName().equals(comPortName)) 
			{
			try {
                                 serialPort = (SerialPort) portId.open("COM1ViewPanelXML" + portAnzahl, 3000);
                            } 
			catch (PortInUseException e) {System.err.println("Fehler bei open: " + e);}
			try {ins = serialPort.getInputStream();
			     outs = serialPort.getOutputStream();}
			catch (IOException e) {System.err.println("Fehler bei Output Stream öffnen");}
                        try {
                            serialPort.addEventListener(this);
                            } 
                        catch (Exception e) {System.err.println("Fehler2: " + e);}
			serialPort.notifyOnDataAvailable(true);
			try {serialPort.setSerialPortParams(9600, 8, N, 1);} 
			catch (UnsupportedCommOperationException e) {System.err.println("Fehler bei der Initialisierung der seriellen Schnittstelle");}  
                        serialPort.setInputBufferSize(4096);
                        try {                         
                            serialPort.enableReceiveTimeout((10000 * BITANZAHLPROPAKET * DATENABSTAND)/this.baudRate);      // timeout so einstellen: 1000ms/Baudrate * AnzahlderBytesproPaket(11) * Datenabstand(4)
                            serialPort.enableReceiveThreshold(4096);
                            }
                        catch (Exception e) {}
                         this.outs.write("hallo".getBytes(), 0, 9);
                        }
		    }	    
		}
            readThread = new Thread(this);
            readThread.start();
	    }
	catch (Exception ex) {}
	} 
     
     public void run() 
        {
        try {
            Thread.sleep(10);
            } 
        catch (InterruptedException e) {} 
        } 

     public void serialEvent(SerialPortEvent event) 
        {  
        try { 
            int numBytes = ins.read(readBuf);
              }
         }
}
 
Ich verzweifle bald.
Wenn ich deinen Code bei mir zum laufen bringen will erscheint die selbe Fehlermeldung.
Und die drei Dateien habe ich auch schon kopiert.

gruß bonatus
 
Zur Not halt nen Empfangsthread machen der bei "available()" weitere Programmteile ansteuert. Ich hab das immer gern mit nem Ringpuffer verbunden ...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben