RXTX library braucht sehr lange zum laden. Ist das normal?

Status
Nicht offen für weitere Antworten.

Gonzo07

Mitglied
Hallo alle,

Ich arbeite gerade mit RXTX. Es funktioniert super, nur brauchts zu beginn ca 1-2min bis die Library geladen ist.

Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7

danach bleibt es für ca 1-2 min hängen, was ziemlich stört, wenn man ein größeres Programm testen will und nach jeder kleinen Änderung mal wieder warten muss.

Nach den 1-2 min funktioniert alles einwandfrei.

Nur bin ich mir sicher, dass das Warten nicht normal ist, weil sich sonst schon mehr Leute darüber aufgeregt hätten.
Ich konnte aber keine passenden Artikeln finden.


Ich benutze NetBean 6.1
Java Version 6 Aktualisierung 10


Wenn ich ein jar Archiv aus dem Programm mache und es außerhalb NetBean öffne, dann muss ich genausolange warten.

Bitte schreibt mir, ob ihr auch so lange warten müsst.

Danke
Gonzo
 
Nein, das ist nicht normal. Hast du mal mit Hilfe eines Profilers (z.b. jvisualvm ist Teil des JDK) getestet wo wirklich die Zeit liegen bleibt?
In was für einer Umgebung setzt du die API ein? Swingclient, Webapp etc.?
 
Danke für deine Antwort.

Profiler ist ein guter Tip. Habs mit dem NetBean integrierten Profiler überprüft und bis auf die folgende Zeile eingeschränkt:

portList = CommPortIdentifier.getPortIdentifiers();



Das ist der erste Aufruf bei dem ganze 220sec verbraten werden . Sind also fast 4 min. Mehr als ich mir gedacht hab.
Die Zeit geht ganz sicher dort verloren!

Ganz schön lange dafür, dass er verfügbaren Com Schnittstellen auflistet.


Ich hab eine Applikation mit Swing Elementen für ein GUI ( keine Webappl.) Von der GUI will ich Daten an die Com Schnittstelle (USB ) schicken.
Mein Empfänger ist ein Evalboard mit einem uP und Uart -USB Addapter. Mit dem Herstellertreiber für Windows wird es als Com Schnittstelle erkannt. Ich hab andere Programme, die mit dem Evalboard ohne Probleme kommunizieren können. Einzig und alleine bei Java hab ich diese ünerwünschte Wartezeit.

Ich hab das Sample Program von JAVA SUN verwendet und hab bereits dort diese Wartezeit. Also kann es kein Teil von meinem Program sein

Ich werd ein Workaround um den Befehl probieren

Hat jemand eine weitere Idee
 
Das ist sehr merkwürdig. Hast du es mal an einem anderen Rechner ausprobiert? Bekommst du denn ein Ergebnis zurück?
220 Sekunden klingt für mich nach Timeout oder ähnliches. Hast du die V24 auch korrekt konfiguriert (Start- Stoppbits, etc.)?
 
Die 220 Sec benötigt er nur für diesen Befehl

Hier ist die gesamte Initialisierung

Code:
    private Thread                    readThread;
    private static CommPortIdentifier portId;
    private static Enumeration	      portList;
    private static SerialPort	      serialPort;
    private static InputStream	      inputStream;
    private static String	      messageString = "Hello, world!";
    
    private static OutputStream       outputStream;
    
    private boolean		      portFound = false;
    private String		      defaultPort = "COM3";

    
    
    
    public void Init() 
    {
        // Try to reach the serial Port
        System.out.println("Found port:1 "+defaultPort);
        portList = CommPortIdentifier.getPortIdentifiers();
        System.out.println("Found port:2 "+defaultPort);
        
        

	while (portList.hasMoreElements()) 
        {
	    portId = (CommPortIdentifier) portList.nextElement();
	    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) 
            {
		if (portId.getName().equals(defaultPort)) 
                {
		    System.out.println("Found port: "+defaultPort);
                    m_GUI.Write_Report("Found port: "+defaultPort);
                    m_GUI.Write_Report("Ready for sending");
		    portFound = true;
                    
		       
		} 
	    } 
	} 
	if (!portFound) 
        {
	    System.out.println("port " + defaultPort + " not found.");
            m_GUI.Write_Report("port " + defaultPort + " not found.");
	}
        
        
        // Try to set the communication on the establised port
        
	try {
	    serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
	} catch (PortInUseException e) {}
        
        try {
	    serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, 
					   SerialPort.STOPBITS_1, 
					   SerialPort.PARITY_NONE
                                           );
	} catch (UnsupportedCommOperationException e) {}
        
      
        
        // Generating outputstream for write
         try {
            outputStream = serialPort.getOutputStream();
         } catch (IOException e) {}
         
        // Generating inputstream for write
	try {
	    inputStream = serialPort.getInputStream();
	} catch (IOException e) {}

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

	serialPort.notifyOnDataAvailable(true);

	readThread = new Thread(this);
	readThread.start();
    }

Der Befehl
portList = CommPortIdentifier.getPortIdentifiers();
wird gleich zu beginn aufgerufen.
Da schaut er nach welche COM Ports da sind.
Alles andere wird nacher in ms erledigt nur der erste Befehl ganz oben benötigt die Zeit.

Nach der Initialisierung kann ich das Port ohne Probleme und Zeitverzögerung verwenden. Es funktioniert einwandfrei. Nur die 4 min warten jedesmal zu beginn sind total lästig.

Ich habs schon mit einem Workaround probiert, wobei ich ihm direkt das Port vorgegeben hab was er benutzen soll. Jedoch braucht er genausolange. Somit kanns auch nicht sein, dass er beim suchen der einzelnen Ports sich verirrt.

Ich wollte es gestern auf einen anderen PC probieren leider ohne Erfolg, weil mein Kollege einen MAC hatte und das parallel laufende Windows konnte keine COMs finden.

Schön langsam glaub ich auch, dass es an meinem System liegt.
Das wäre gut fürs Program, weil es dann funktioniert, nur schlecht für mich, weil ich doch weiterhin mit meinem PC weiterprogrammieren und testen müsste. Und das Problem wäre damit ja dann auch nicht behoben.
Ich werd schaun, dass ich nen anderen PC zum austesten finde.
 
Einfach mal so eingeworfen:
Evtl. sowas wie "virtuelle" COM anschlüsse z.B. Bluetooth, die das Problem erzeugen?
 
Nur mal so ein paar Tipps:

sowas ist tödlich:
Code:
} catch (UnsupportedCommOperationException e) {}

wenn man eine Exception fängt, muß man diese auch irgendwie behandeln d.h. zumindest loggen. Ansonsten siehste später nie warum deine Anwendung nicht funzt.

Warum sind fast alle dein Member static?
 
Ich hab das Problem gelöst.

Es waren die Bluetooth Treiber. Ich hab sie jetzt deinstalliert.
Jetzt funktioniert alles supa.

Danke für eure Hilfe

PS
Kann man dieses Topic irgendwie schließen?
 
[quote="Gonzo07"
PS
Kann man dieses Topic irgendwie schließen?[/quote]
Ja - du hast unten Links ein Icon mit einem Häkchen drauf.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben