Avatar billede kenneth_breve Nybegynder
30. marts 2006 - 15:11 Der er 13 kommentarer og
1 løsning

Serial kommunikation i java?

Jeg skal lave en klasse som sender 2 bits afsted serielt med en bitrate på 9600.

Jeg har fundet dette simple eksempel:

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

public class SimpleWrite {
    static Enumeration portList;
    static CommPortIdentifier portId;
    static String messageString = "Hello, world!\n";
    static SerialPort serialPort;
    static OutputStream outputStream;

    public static void main(String[] args) {
        portList = CommPortIdentifier.getPortIdentifiers();

        while (portList.hasMoreElements()) {
            portId = (CommPortIdentifier) portList.nextElement();
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                if (portId.getName().equals("COM1")) {
                // (portId.getName().equals("/dev/term/a")) {
                    try {
                        serialPort = (SerialPort)
                            portId.open("SimpleWriteApp", 2000);
                    } catch (PortInUseException e) {}
                    try {
                        outputStream = serialPort.getOutputStream();
                    } catch (IOException e) {}
                    try {
                        serialPort.setSerialPortParams(9600,
                            SerialPort.DATABITS_8,
                            SerialPort.STOPBITS_1,
                            SerialPort.PARITY_NONE);
                    } catch (UnsupportedCommOperationException e) {}
                    try {
                        outputStream.write(messageString.getBytes());
                    } catch (IOException e) {}
                }
            }
        }
    }
}




Hver gang jeg prøver at køre det, kommer der en nullpointerexception i denne linje:

portList = CommPortIdentifier.getPortIdentifiers();
Avatar billede jakoba Nybegynder
30. marts 2006 - 15:58 #1
Kunne det være der skal oprettes et CommPortIdentifier Objekt for hver kommunikationsport førend den statiske funktion getPortIdentifiers kan kikke i den pool af objekter efter kommunikationsporte?  Hvis du har acces til kildekoden til CommPortIdentifier ville det ytre sig som en static variabel der er en arrayliste (eller vektor/hashmap,/...) i klassen, som ethvert nyoprettet CommPortIdentifier objekt indsætter sig selv i.

Ovenstående er gætteri, men forekommer mig sandsynligt, da klassen ellers skulle være istand til at negotiere med alle mulige (og fremtidige) styresystemer (unix, linux, Windows, mainframes) for at finde deres porte.
Avatar billede jakoba Nybegynder
30. marts 2006 - 16:07 #2
Der skal ihvertfald foretages en form for installation/initiering. se:
    http://java.sun.com/products/javacomm/reference/faqs/index.html
"
    Q: My application does not find any ports when it enumerates available ports.
    Q: BlackBox gives me a message that says "No serial ports found!"

    A: In order for the Java communications API to find ports the file
        javax.comm.properties must be in the correct place. The preferred
        location is in <jdk>/lib. See the installation instructions for
        alternate locations and further information.
"
Avatar billede kenneth_breve Nybegynder
31. marts 2006 - 16:27 #3
Så fik jeg installeret driverne ordentlig...

Men nu får jeg istedet denne fejl:

Caught java.lang.NullPointerException: name can't be null while loading driver com.sun.comm.Win32Driver

Men spørgsmålet er også hvordan og hvorledes jeg finder min com port 1 osv.. når jeg kun har usb porte i min computer???
Avatar billede troublesmurf Praktikant
31. marts 2006 - 22:26 #4
Jeg har brugt Javax.comm til en COM port via USB til at programmere til en mobiltelefon. Der registrerede den mit usb kabel som en COM port (oftest port 3 eller 4, da jeg har alm. com porte i), som der "bare" skulle sendes data til.
Men det kræver at du har et USB kabel der bliver installeret som COM for at kunne benytte den protokol.
Avatar billede kenneth_breve Nybegynder
01. april 2006 - 11:19 #5
Jeg har allerede registreret et com port som nummer 5. Men selvom jeg direkte skriver i java koden at det skal være com5 så får jeg stadig denne fejl:

Caught java.lang.NullPointerException: name can't be null while loading driver com.sun.comm.Win32Driver
Avatar billede snoop_one Nybegynder
01. april 2006 - 13:32 #6
kan du give et kode eksempel hvor du benytter COM5?
Avatar billede troublesmurf Praktikant
01. april 2006 - 13:58 #7
Jeg ved ikke om det kan hjælpe dig, men jeg smider lige min "port-åbner" metode:

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

class Port {
  private static String portName;
  private static SerialPort port;
  private static OutputStreamWriter out;
  private static InputStreamReader in;

  public static void open() throws Exception {
    //open the connection via the serial line
    try {
      CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM3");
      port = (SerialPort)portId.open("SMS Transceiver", 10);
      port.setSerialPortParams(19200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
      out = new OutputStreamWriter(port.getOutputStream(), "ISO-8859-1");
      in = new InputStreamReader(port.getInputStream(), "ISO-8859-1");
      System.out.println("open port\n");    // for debugging
    }
    catch (Exception e) {
      SMS.showText("could not open port:" + e);
      System.exit(0);
    }
  }
Avatar billede snoop_one Nybegynder
01. april 2006 - 22:01 #8
Du kunne evt. prøve, at køre de demo programmer der følger med java comm så du derved sikre dig, at din maskine er sat rigtigt op.
Avatar billede snoop_one Nybegynder
05. april 2006 - 10:26 #9
Er problemet blevet løst?
Avatar billede kenneth_breve Nybegynder
05. april 2006 - 16:50 #10
Nej slet ikke...

Jeg får stadig denne fejl
"Caught java.lang.NullPointerException: name can't be null while loading driver com.sun.comm.Win32Driver"
Avatar billede troublesmurf Praktikant
05. april 2006 - 17:28 #11
Prøv at start dit program i konsollen istedetfor gennem IDE'en...
Avatar billede kenneth_breve Nybegynder
06. april 2006 - 09:47 #12
Hvad mener du med gennem IDE'en??
Avatar billede troublesmurf Praktikant
06. april 2006 - 12:01 #13
Gennem dit udviklings-miljø.

Jeg hørte om nogle der havde haft samme fejl, hvor det hjalp dem. Uvist af hvilke årsager...
Avatar billede kenneth_breve Nybegynder
19. april 2006 - 21:34 #14
Har netop fået løst problemet... Fik hjælp af en lærer...
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