2012-02-23 11 views
-1

これが最善のアプローチであるかどうかは分かりません。そのため、私はあなたの助けを求める人たちに頼んでいます。Java:どのようにスレッド内でプロセスを実行し続け、その値を読み取るのですか?

これは私の問題です。ユーザーがこのボタンを押してからプログラムがいくつかの値を読み込み、この値をデータベースに保存すると、「読み取り」ボタンがあるアプリケーションを開発しています。

私は、ユーザーが「読み込み」を押すとスレッドを開始すると思います。なぜなら、ユーザーは、フリーズしなくても別のことをすることができるからです。 しかし、このスレッドが読み取った値にアクセスすることはできません。

これを行う別の方法はありますか?

EDIT:

private void jtb_readerItemStateChanged(java.awt.event.ItemEvent evt) {            
     // getting some values provided by the user  

     if (buttonReaderState()){ 
      if (supervisory == null) 
       supervisory = new Supervisory(ip, broadcast, deviceID); 
       supervisory.start(); 
     } 
    }           

// Supervisory class 
    public void start(){ 
     Scan scan = new Scan(); 
     Thread t = new Thread(scan); 
     t.start(); 
     threadState = true; 
    } 

    class Scan extends Thread{ 
     public void run(){ 
      // inside the tread I have to initiate another 'supervisory' object, is that right ? 
      Supervisory s = new Supervisory(ip, broadcast, deviceID); 
      while (threadState){ 
       try { 
        s.active(); 

       } catch (IOException ioe) { 
        ioe.printStackTrace(); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

    public void active() throws IOException, Exception { 
     // getting this values from my hardware like temperature and anothers things. 

     for (int i = 0; i < ois.size(); i++) { 
      ObjectIdentifier oi = ois.get(i); 

      //analog input 
      if (i == 1) 
       aI = Float.parseFloat(getPresentValue(localDevice, oi)); 
      //analog output 
      if (i == 2) 
       aO = Float.parseFloat(getPresentValue(localDevice, oi)); 
      //binary input 
      if (i == 3) 
       bI = getBinaryValue(getPresentValue(localDevice, oi)); 
      //binary output 
      if (i == 4) 
       bO = getBinaryValue(getPresentValue(localDevice, oi)); 
     } 

    } 

この値を読んだ後、私は私が構築していますインターフェイスでこの値を表示したいと思いますが、私がこれらの値(AI、AOへのアクセス権を持つことができないようだ、バイ、bO)。

+1

質問が分かりません。 「このスレッドが読み取った値にアクセスできません」という意味はどうですか? – m0skit0

+0

@ m0skit0私の投稿を更新する、私は今より明確になることを願っています;) –

答えて

2

あなたが持っているインタフェースへの参照を渡してください。例えば。 JFrame ownerフィールドをスーパーバイザクラスに追加してそこに値を渡すことができます。

+0

それは動作します! ありがとうございます。 –

関連する問題