2013-11-11 3 views
1

Привета я новичок в серийные programming.I пытаются вернуть последовательные данные из одного класса в другой, Это мой код (с помощью библиотеки RxTx)использование или хранения последовательных данных и доступ из другого класса Java

class XXX implements SerialPortEventListener{ 

    final int[] val = new int[2]; 

    public synchronized void serialEvent(SerialPortEvent oEvent) { 
     String storeId; 
     String status; 

     if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { 
      try { 
       String inputLine = input.readLine(); 
       String[] arrayValues = inputLine.split(" "); 
       storeId=arrayValues[0]; 
       status=arrayValues[1]; 
       light=Integer.parseInt(storeId); 
       lightstatus = Integer.parseInt(status); 

       //System.out.println(light); 
       //System.out.println(status); 
       val[0] = light; 
       val[1] = lightstatus; 
      } catch (Exception e) { 
       System.err.println(e.toString()); 
      } 
     } 
    } 

    public int send(){ 
     return val[0]; 
    } 

    public int sendst(){ 
     return val[1]; 
    } 
} 

чтение и печати данных в этом классе является успешным, но доступ к значению из этого возвращает нуль ... любая помощь будет appreciated..Thankyou

ответ

0

чтение и печати данных в этом классе является успешным, Но доступ к значению из этого возвращает null ...

Основываясь на вашем кодексе, я вижу, вы следуете этому примеру: Event Based Two Way Communication (если вы этого не сделаете, тогда вы должны взглянуть). Как гласит его название, это основанный на события способ чтения/записи через последовательный порт.

Сказав это, я сильно подозреваю, что вы пытаетесь сделать что-то вроде этого:

XXX serialPortListener = new XXX(); 
int light = serialPortListener.send(); 
int lightStatus = serialPortListener.sendst(); 

Это наиболее вероятно, что send() и sendst() возвращение null или 0 потому что SerialPortEvent до сих пор не произошло, когда называются эти методы , Поэтому, если вы работаете в сценарии, основанном на событиях, то в этой структуре разумно держать это. Как? Например, реализующей Observer pattern:

1) Сделать XXX класс простираться от Observable и выполнить это небольшое изменение:

public class XXX extends Observable implements SerialPortEventListener { 

    int[] val = new int[2]; 

    public synchronized void serialEvent(SerialPortEvent oEvent) { 
     String storeId; 
     String status; 
     if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { 
      try { 
       // all your code here 
       setChanged(); 
       notifyObservers(); 
      } catch (Exception e) { 
       System.err.println(e.toString()); 
      } 
     } 
    } 

    ... 
} 

2) Другой класс должен реализовать Observer интерфейс:

public class MyObserver implements Observer { 

    @Override 
    public void update(Observable o, Object arg) { 
     if(o instanceof XXX){ 
      XXX observable = (XXX) o; 
      System.out.println("Light: " + observable.send()); 
      System.out.println("Light status: " + observable.sendst()); 
     } 
    } 
} 

3) Добавить объект MyObserver к XXX пример:

XXX serialPortListener = new XXX(); 
serialPortListener.addObserver(new MyObserver()); 

Всё. Каждый раз, когда обрабатывается SerialPortEvent, наблюдатель будет уведомлен, и он успешно прочитает значения.

+0

Awesome, Это сработало для меня, спасибо большое, что вы действительно спасли меня – Charan

+0

Добро пожаловать! :) @Charan – dic19