Port öffnen

Hallo :slight_smile:

Ich bin neu hier und auch neu in der JavaME Programmierung.

Ich habe einen Code geschrieben, welcher mir ausgibt, welcher Port verfügbar ist und anschließend öffne ich diesen Port. Allerdings funktioniert das nur manchmal, d.h. ich kann nur manchmal den Port erfolgreich öffnen und manchmal (leider öfters) wirft er mir eine „IllegalArgumentException“, obwohl ich zwischenzeitlich nichts an dem entsprechenden Code ändere.
Kann sich das jemand erklären?

import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class SerialComm extends MIDlet implements CommandListener
{
        private CommConnection serialConnection = null;
        private final Command exitCommand   = new Command("Exit", Command.EXIT, 1);
        private final Command openCommand   = new Command("Open", Command.OK, 3);
        private final Command portCommand  = new Command("Port", Command.OK, 1);     
        private final Command statusCommand = new Command("Status", Command.OK, 2);
        private final TextBox textBox = new TextBox("(^_^)", "Hallo!", 25, TextField.ANY);
       // private final Command transmitCommand = new Command("Transmit", Command.OK, 4);
 
    public SerialComm()
    {
        textBox.addCommand(exitCommand);
        textBox.addCommand(openCommand);
        textBox.addCommand(portCommand);
        textBox.addCommand(statusCommand);
        textBox.setCommandListener(this);
    }

    private void close()
    {
        try
        {
            serialConnection.close();
            serialConnection = null;
        }
        catch (final IOException ioException)
        {
        }
        
        textBox.setString("Exit");
    }

    public void commandAction(final Command command, final Displayable displayable)
    {
        if (command == exitCommand)
        {
            destroyApp(false);
            notifyDestroyed();
        }

        if (command == openCommand)
        {
            open();
        }

        if (command == portCommand)
        {
            getPort();
        }

        if (command == statusCommand)
        {
            status();
        }
    }

    protected void destroyApp(final boolean unconditional)
    {
        close(); 
    }

    private void getPort()
    {
        textBox.setString("Port: " + System.getProperty("microedition.commports"));
    }

    private void open()
    {
        textBox.setString("open");

        //String Parameter = "comm:COM0;baudrate=9600;bitsperchar=8;stopbits=1;parity=none;blocking=off";
        try
        {
            serialConnection= (CommConnection)Connector.open("comm:com0");
            textBox.setString("Success");
        }
        catch (final IOException e)
        {
            textBox.setString("Failure" + e);
        }
    }

    protected void pauseApp()
    {
    }

    private void status()
    {
        textBox.setString("status");
        textBox.setString("status: opened? " + (serialConnection != null));
    }

    protected void startApp()
    {
        Display.getDisplay(this).setCurrent(textBox);
        textBox.setString("Hello World!");
    }
}

Vielen Dank!
Liebe Grüße,
Sannchen

sicher das der Port immer wieder geschlossen wird?

Bisher ging ich davon aus.
Werde heute das Programm umschreiben und es anders testen.

Danke erstmal EagleEye! :slight_smile:

Der Port wurde wirklich nicht geschlossen. Funktioniert jetzt. Danke für den Tipp!! :slight_smile:

Scheinbar möchte die Schnittstelle nur einmal am Tag funktionieren.
Ich habe den Code nicht verändert und nun funktioniert es nicht mehr! Hilfe!! :grr:

private void open() 
 {    
        
        textBox.setString("open"); //wenn open stehen bleibt, wirft er eine Illegal Argument Exception

        try
        {
            CommConnection cc = (CommConnection)Connector.open("comm:COM0");
//            ;baudrate=9600;bitsperchar=8;stopbits=1;parity=none;blocking=off
            textBox.setString("Port offen");
            
            int secondsRemaining = secondsRuntime;
                
            while (secondsRemaining > 0) 
            {

                textBox.setString("Der Port ist offen");
                secondsRemaining--;
                try 
                {
                    Thread.sleep(100);
                }
                catch(InterruptedException e) 
                { }
             }
             cc.close();
            textBox.setString("Port geschlossen");
        }
        catch (IOException e)
        {
            textBox.setString("Fehlgeschlagen " + e);
        }
       
    }```

Danke!

hmmm, wenn du deine Anwendung neustartest gehts dann wieder?

Ging bis dahin nicht. Aber ich hatte immer noch nicht den Port richtig geschlossen.
Jetzt habe ich es wirklich und es funktioniert einwandfrei.

Allerdings kämpfe ich jetzt mit dem Input Stream. Der Output Stream funktioniert.
Mal sehen…