2016-10-26 4 views
0
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("/dev/cu.usbserial-FTCC026H")) { 
       System.out.println("Connecting....."); 
     //    if (portId.getName().equals("/dev/term/a")) { 
       ReadReadings reader = new ReadReadings(); 
      } 
     } 
    } 
} 
public ReadReadings() { 
    try { 
     serialPort = (SerialPort) portId.open("ReadReadings", 1000); 
    } catch (PortInUseException e) {System.out.println(e);} 
    try { 
     inputStream = serialPort.getInputStream(); 
    } catch (IOException e) {System.out.println(e);} 
try { 
     serialPort.addEventListener(this); 
} catch (TooManyListenersException e) {System.out.println(e);} 
    serialPort.notifyOnDataAvailable(true); 
    try { 
     serialPort.setSerialPortParams(9600, 
      SerialPort.DATABITS_8, 
      SerialPort.STOPBITS_1, 
      SerialPort.PARITY_NONE); 
     try { 
      inputStream = serialPort.getInputStream(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace();serialPort.close(); 
     } 
     br = new BufferedReader(new InputStreamReader(inputStream)); 

    } catch (UnsupportedCommOperationException e) {System.out.println(e);} 

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

public void run() { 
    try { 
     Thread.sleep(10000); 
     if(inputStream != null) 
     { 
      serialPort.close(); 
      try { 
       inputStream.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      serialPort.close(); 
      ConnectToHardware.frame.dispose(); 
     frame = new DisplayReadings(); 
     //frame.pack(); 
     frame.setVisible(true); 

     } 

    } catch (InterruptedException e) {System.out.println(e);serialPort.close();} 
} 
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[1024]; 
     // String temp = ""; 

     try { 
      String inputLine=br.readLine(); 

      series.put(num, inputLine); 
      num++; 
      System.out.println(inputLine); 

     } 

     catch (IOException e) {System.out.println(e);} 
     break; 
    } 


} 
} 

I runnable JAR-Datei von meinem Projekt erstellen müssen erhalten, die drei Klassen umfasst, externe rxtx Bibliothek und librxtxSerial.jnilib in project.But wenn diese librxtxSerial runnable jar-Datei erstellen .jnilib-Datei ist nicht in der JAR-Datei enthalten. Ich denke, das ist der Grund dafür, keine Ausgabe zu erhalten, wenn JAR-Datei ausgeführt wird.Brauchen librxtxSerial.jnilib in runnable jar-Datei Hilfe

+0

zeigen Sie Ihren Code, sonst kann ppl nicht helfen –

+0

Ich habe meinen Code hinzugefügt, aber ich muss JAR-Datei erstellen, damit ich ohne IDE laufen kann. Ich benutze Eclipse. Ich möchte, dass Doppelklick auf JAR-Datei würde mein Programm laufen.Thanks.Its funktioniert perfekt in Eclipse aber nicht runnable JAR-Datei. – krishna

Antwort

0

JNI-Bibliotheken werden vom Betriebssystem geladen. Daher können sie nicht direkt aus einer JAR-Datei geladen werden. Sie werden aus dem Dateisystem geladen (siehe java.load.path für Details).

Sie können versuchen, ein Installationsprogramm in Ihren Java-Code zu integrieren, der die Bibliothek aus der JAR-Datei in das Dateisystem kopiert, bevor der systemeigene Code geladen wird.

+0

Danke für Hilfe. Aber ich bekomme den Teil der Integration nicht als Installer. welcher Installer ist frei, da ich dieses Projekt als Einzelperson mache, also will ich kein Geld ausgeben, um Installer für Projekt zu kaufen. Ich schätze wirklich Ihre Hilfe. Eine weitere Sache include Pfadname meiner serialLib (exe-Datei) in Argument Registerkarte wird mein Problem lösen. – krishna

+0

Es ist kein vollständiges Installationsprogramm. Ich meinte nur eine Methode, die die Daten der jni-lib von der jar-Datei in das Dateisystem kopiert. Ich denke, das kann mit weniger als 20 Zeilen Code gemacht werden. – clemens

+0

Können Sie mir den Link dieses Codes geben, da ich meinem Client eine JAR-Datei bereitstellen möchte, damit er sie verwenden kann, indem er sie nicht über die Befehlszeile anklickt. – krishna