2016-10-13 3 views
-1

У меня есть проблема, что я могу вызвать метод из другого класса в моей JFrameJava + Uno + RFID: вызов метода чтения RFID в Java

это мой метод класса, который я получил от других людей в этом форуме

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package transaksi_satu; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import gnu.io.CommPortIdentifier; 
import gnu.io.SerialPort; 
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import java.util.Enumeration; 


public class UnoConnect implements SerialPortEventListener{ 

    SerialPort serialPort; 

    private static final String PORT_NAMES[] = {"COM3"}; 
    private BufferedReader input; 
    private OutputStream output1; 
    private static final int TIME_OUT = 2000; 
    private static final int DATA_RATE = 9600; 

    public UnoConnect(){ 
    CommPortIdentifier portId = null; 
    Enumeration portEnum = CommPortIdentifier.getPortIdentifiers(); 

    //First, Find an instance of serial port as set in PORT_NAMES. 
    while (portEnum.hasMoreElements()) { 
     CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement(); 
     for (String portName : PORT_NAMES) { 
      if (currPortId.getName().equals(portName)) { 
       portId = currPortId; 
       break; 
      } 
     } 
    } 
    if (portId == null) { 
     System.out.println("Could not find COM port."); 
     return; 
    } 

    try { 
     serialPort = (SerialPort) portId.open(this.getClass().getName(), 
       TIME_OUT); 
     serialPort.setSerialPortParams(DATA_RATE, 
       SerialPort.DATABITS_8, 
       SerialPort.STOPBITS_1, 
       SerialPort.PARITY_NONE); 

     // open the streams 
     input = new BufferedReader(new InputStreamReader(serialPort.getInputStream())); 
     output1 = serialPort.getOutputStream(); 

     serialPort.addEventListener(this); 
     serialPort.notifyOnDataAvailable(true); 
    } catch (Exception e) { 
     System.err.println(e.toString()); 
    } 



    } 
    public void close() { 
    if (serialPort != null) { 
     serialPort.removeEventListener(); 
     serialPort.close(); 
    } 
} 

public void serialEvent(SerialPortEvent oEvent) { 
    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { 
     try { 
      String inputLine=null; 
      if (input.ready()) { 
       inputLine = input.readLine(); 
          System.out.println(inputLine); 
          //Lbl_ID.setText(inputLine);     
      } 

     } catch (Exception e) { 
      System.err.println(e.toString()); 
     } 
    } 

} 
} 

Я хочу получить результат из функции «public void serialEvent (SerialPortEvent oEvent)» в нижней части исходного кода, когда я пытаюсь вызвать его в другой из него, не отображается.

какая ошибка я делаю? Может кто-нибудь мне помочь?

+0

Вы отлаживали его? Возможно, было исключение, поэтому «серийное событие» никогда не вызывало – Beloo

+0

@Beloo да, у меня есть результат «Build Successfull» –

+0

Это не отладка, а построение. Отладка - это процесс, когда вы присоединяете отладчик к запущенному приложению и выполняете программные операции шаг за шагом, чтобы проверять результаты ввода и вывода каждой строки. – Beloo

ответ

0

Метод public void serialEvent(SerialPortEvent oEvent) выполняется, когда что-то получено от последовательного порта (оно не предназначено для вызова самостоятельно), поэтому внутри него необходимо обработать то, что получено, чтобы его картировать (на основе вашего примера обратите внимание к комментариям внутри, там вы должны что-то сделать с полученными данными):

public void serialEvent(SerialPortEvent oEvent) { 
    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { 
     try { 
      String inputLine=null; 
      if (input.ready()) { 
       inputLine = input.readLine(); 
          System.out.println(inputLine); 
          // DO SOMETHING WITH THE inputLine RECEIVED HERE 
          // EG. PASS IT TO SOME OTHER SERVICE METHOD 

      } 

     } catch (Exception e) { 
      System.err.println(e.toString()); 
     } 
    } 

} 
+0

Можете ли вы мне помочь, как передать результат другому методу службы, если он в методе ??? –

+0

У меня есть проблема здесь в течение нескольких дней, и это дает мне головную боль. –

+0

Добавьте ссылку на эту услугу в слушателя (лучше всего во время строительства), а затем просто вызовите надлежащий метод этой службы. Помните, что вам необходимо зарегистрировать этот прослушиватель в соответствующий последовательный порт (построенный ранее), чтобы получать от него события. Посмотрите документацию библиотеки, которую вы используете для этого. –