2017-03-15 23 views
1

VRPNデバイスからボタン値を読み込むプログラムを、コマンドラインで完全に動作するサンプルJavaファイルを使用して処理しています。Javaファイルの出力/値を読み取る処理の取得

私は既に適切なライブラリ/ファイルを使ってスケッチフォルダを設定していますが、PDE側(現在はSystem.out.println())に値を送るようにJavaコードを再設定する必要があります。私は、PAppletオブジェクトを確立しようとしましたが、ButtonTestクラス内で設定するのに問題がありました。私はJavaの中でこの種の機能を研究しようとしましたが、正しい用語を見つけるのが難しかったです。どんな助けでも大歓迎です!

import vrpn.*; 
import processing.core.PApplet; 

public class ButtonTest implements vrpn.ButtonRemote.ButtonChangeListener { 


    public void buttonUpdate(ButtonRemote.ButtonUpdate u, ButtonRemote button) { 
    System.out.println("Button message from vrpn: \n" + 
    "\ttime: " + u.msg_time.getTime() + " button: " + u.button + "\n" + 
    "\tstate: " + u.state); 
    } 

    public static void main(String[] args) { 

    String buttonName = "[email protected]:3891"; 
    ButtonRemote button = null; 

    try { 
     button = new ButtonRemote(buttonName, null, null, null, null); 
    } 

    catch(InstantiationException e) { 
     // if fails 
     System.out.println("We couldn't connect to button " + buttonName + "."); 
     System.out.println(e.getMessage()); 
     return; 
    } 

    ButtonTest test = new ButtonTest(pa); 
    button.addButtonChangeListener(test); 
    } 
} 

マイファイル構造:(PDEファイルは、現在準備及び待機中/空)

My file structure

ただ、参考のために私が見た処理スケッチにJavaファイルから値を送信するために管理してきましたここでは、このプロジェクトでは実装できないようです。https://forum.processing.org/two/discussion/3677/

答えて

1

外部クラスのデータをProcessingスケッチに取得する必要があります。 2つのオプションがあります:

オプション1:処理スケッチでは、外部クラスからデータを取得するときはいつでも、単にゲッター関数を呼び出します。ここに簡単な例があります:

ExternalClass ec; 

void setup(){ 
    ec = new ExternalClass(); 
} 

void draw(){ 
    println(ec.getData()); 
} 

これは、外部クラスが処理について何も知らなくてもよいという利点があります。欠点は、常に外部クラスをポーリングする必要があることです。

オプション2:処理スケッチへの参照を外部クラスに渡してから、外部クラスから処理スケッチの関数を呼び出します。あなたはまずスケッチクラスのインスタンスへの参照を取得します。これはコンストラクタを介して渡される可能性があります。次に、そのインスタンスを使用してスケッチクラスの関数を呼び出します。

処理側でthisキーワードを使用すると、スケッチ自体への参照を渡すことができます。それは次のようになります。

ExternalClass ec; 

void setup(){ 
    ec = new ExternalClass(this); 
} 

void setData(int whatever){ 
    println(whatever); 
} 

はまた、あなたがあなたの外部のクラスから呼び出すことができsetData()機能を、気づきます。

ここで、外部クラスはスケッチを参照する必要があります。処理エディタで、あなたは自分のスケッチの名前を使用します。

public class ExternalClass{ 
    YouSketchName sketch; 

    public ExternalClass(YourSketchName sketch){ 
     this.sketch = sketch; 
    } 

    private void dataChanged(){ 
     sketch.setData(42); 
    } 
} 

これは、イベントが発生する代わりに、常にそれのためのポーリングを、それはもっと複雑だときにデータを設定することができます。

+0

ありがとう!これは参考になりましたが、VRPNライブラリには一定の制限や困難があったために、私が必要とする方向ではありませんでした。とにかくありがとう! – themessup

関連する問題