Avatar billede superanden Nybegynder
15. maj 2009 - 12:35 Der er 3 kommentarer og
1 løsning

Null pointer exception i Seriel Kommunikation?

Hej jeg forsøger at få et java program til at læse fra en seriel port men det virker ikke efter hensigten.

Det detekterer godt nok min COM port som det skal men giver mig en null pointer exception.

programmet ser således ud:
package simpleread;

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

public class SimpleRead implements Runnable, SerialPortEventListener {
    static CommPortIdentifier portId;
    static Enumeration          portList;
    InputStream              inputStream;
    SerialPort              serialPort;
    Thread              readThread;

 
    public static void main(String[] args) {
    boolean              portFound = false;
    String              defaultPort = "COM3";

    if (args.length > 0) {
        defaultPort = args[0];
    }

    portList = CommPortIdentifier.getPortIdentifiers();

    while (portList.hasMoreElements()) {
        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
        if (portId.getName().equals(defaultPort)) {
            System.out.println("Found port: "+defaultPort);
            portFound = true;
            SimpleRead reader = new SimpleRead();
        }
        }
    }
    if (!portFound) {
        System.out.println("port " + defaultPort + " not found.");
    }

    }

    public SimpleRead() {
    try {
        serialPort = (SerialPort) portId.open("SimpleReadApp", 10000);
    } catch (PortInUseException e) {}

    try {
        inputStream = serialPort.getInputStream();
    } catch (IOException e) {}

    try {
        serialPort.addEventListener(this);
    } catch (TooManyListenersException e) {}

    serialPort.notifyOnDataAvailable(true);

    try {
        serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
                      SerialPort.STOPBITS_1,
                      SerialPort.PARITY_NONE);
    } catch (UnsupportedCommOperationException e) {}

    readThread = new Thread(this);

    readThread.start();
    }

   
    public void run() {
    try {
        Thread.sleep(20000);
    } catch (InterruptedException e) {}
    }

    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[20];

        try {
        while (inputStream.available() > 0) {
            int numBytes = inputStream.read(readBuffer);
        }

        System.out.print(new String(readBuffer));
        } catch (IOException e) {}

        break;
    }
    }
}



Outputtet er
run:
Found port: COM3
Exception in thread "main java.lang.NullPointerException
  at simpleread.SimpleRead <init>(SimpleRead.java:47)
  at simpleread.SimpleRead.main(SimpleRead.java:31)
BUILD SUCCESSFUL (total time 12 seconds)

linje 47 er inputStream = serialPort.getInputStream();
linje 31 er SimpleRead reader = new SimpleRead();
Avatar billede arne_v Ekspert
16. maj 2009 - 03:03 #1
Fejlen kan vist kun skyldes at serialPort er null i den linie.

Det er svært at sige hvorfor.

Men prøv og erstat alle dine:

} catch (XxxException e) {}

med:

} catch (XxxException e) {
  e.printStackTrace();
}

så vi kan se hvilke fejl du får.

Du bør aldrig sluge fejl på den måde.
Avatar billede arne_v Ekspert
04. juli 2009 - 03:36 #2
Kommet videre ?
Avatar billede superanden Nybegynder
12. oktober 2009 - 10:14 #3
Hej Arne. Jeg kan ikke huske hvad jeg gjorde for at få det til at virke. Men smid et svar for det er formentlig pga. din rettelse at jeg fandt ud af det.

tak for hjælpen.
Avatar billede arne_v Ekspert
12. oktober 2009 - 16:32 #4
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester