最近、USB ポートからデータをシリアルに取得して COSM に転送するプログラムを作成しました。メソッドを介してシリアルに取得されたデータは、前述のデータを COSM にアップロードするために使用されるメソッドserialevent
に渡されませんでした。ただし、メソッドのシグネチャから指定子をupdate
削除した後、この問題は解決されました。synchronized
serialevent
public synchronized void serialEvent(SerialPortEvent oEvent)//Event handler for Serial communication
{
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE)
{
try {
val=input.read();//Variable where data is received.Initialized to 0.
this.update(78164);
}
catch (Exception e)
{
System.err.println(e.toString());
}
}
}
アップロード方法:
private void update(int feedid) throws PachubeException, IOException ,Exception
{
Feed f = this.pachube.getFeed(feedid);
//System.out.println(f==null);
System.out.println("updating ...");
f.updateDatastream(8345, (double) val);//Expected value=77,Obtained value=0
f.updateDatastream(6274, (double) val);//Expected value=77,Obtained value=0
f.updateDatastream(1044, (double) val);//Expected value=77,Obtained value=0
System.out.println("updated");
}
私の質問は、複数のスレッドを使用していない場合でもsynchronized
、変数に存在するデータをserialevent
メソッドから渡すことを指定子がどのように拒否したかです。upload