Avatar billede hono Nybegynder
26. marts 2005 - 15:18 Der er 4 kommentarer og
1 løsning

Forståelse af javakode

Jeg har fundet nedenstående kode som jeg er igang med at granske. Den kan bruges til at finde en serielport på ens computer og så sende seriel data via denne. Jeg forstår den efterhånden stor set - der er dog én ting der undrer mig. Hvad betyder følgende linie, eller rettere, hvad skal den gøre godt for?

if (portId.getName().equals("/dev/term/a"))??

Den fulde kode ser således ud:

/*
* @(#)SimpleWrite.java    1.12 98/06/25 SMI
*
* Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
*
* Sun grants you ("Licensee") a non-exclusive, royalty free, license
* to use, modify and redistribute this software in source and binary
* code form, provided that i) this copyright notice and license appear
* on all copies of the software; and ii) Licensee does not utilize the
* software in a manner which is disparaging to Sun.
*
* This software is provided "AS IS," without a warranty of any kind.
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
* ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
* LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE
* SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS
* BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
* INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
* HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING
* OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* This software is not designed or intended for use in on-line control
* of aircraft, air traffic, aircraft navigation or aircraft
* communications; or in the design, construction, operation or
* maintenance of any nuclear facility. Licensee represents and
* warrants that it will not use or redistribute the Software for such
* purposes.
*/

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")) {
                if (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) {}
                }
            }
        }
    }
}


På forhånd tak!

Hono
Avatar billede arne_v Ekspert
26. marts 2005 - 15:21 #1
Den spørger om portens navn er "/dev/term/a" ?

Hvilket sikkert er Unix varianten af "COM1"
Avatar billede hono Nybegynder
26. marts 2005 - 15:25 #2
Vil det sige at denne kode er lavet til et UNIX-system? Jeg skal altså fjerne denne linie, hvis den skal bruges på en Windowsmaskine, eller hvad? For jeg vil da mene at jeg allerede med linie

if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

har sikret mig, at det kun er serielle porte jeg får fat i, ikke?
Avatar billede arne_v Ekspert
26. marts 2005 - 15:28 #3
Mit gæt er ayt du skal ændre

                // if (portId.getName().equals("COM1")) {
                if (portId.getName().equals("/dev/term/a")) {


til

                if (portId.getName().equals("COM1")) {
                // if (portId.getName().equals("/dev/term/a")) {
Avatar billede hono Nybegynder
26. marts 2005 - 15:31 #4
ah, ja, selvfølgelig. Jeg siger tusind tak for den hurtige hjælp. Kom med et svar, så får du pointene.

Hono
Avatar billede arne_v Ekspert
26. marts 2005 - 15:42 #5
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