【问题标题】:Getting Processing to read Java file output/values获取处理以读取 Java 文件输出/值
【发布时间】:2017-08-05 14:26:24
【问题描述】:

我正在编写一个程序,以使用 Processing 和一个在命令行中完美运行的示例 Java 文件从 VRPN 设备读取按钮值。

我已经使用适当的库/文件设置了我的草图文件夹,我只需要重新配置 Java 代码以将值发送到事物的 PDE 端(当前为 System.out.println())。我尝试建立一个 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 = "spaceNav@127.0.0.1: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 文件当前为空/准备就绪并等待)

仅供参考,我已经设法将值从 Java 文件发送到此处看到的处理草图,我似乎无法为这个项目实现它https://forum.processing.org/two/discussion/3677/

【问题讨论】:

    标签: java input output processing vrpn


    【解决方案1】:

    您需要从外部类中获取数据到处理草图中。您有两种选择:

    选项一:在您的处理草图中,只要您想从外部类获取数据,只需调用一个 getter 函数即可。这是一个简单的例子:

    ExternalClass ec;
    
    void setup(){
       ec = new ExternalClass();
    }
    
    void draw(){
       println(ec.getData());
    }
    

    这样做的好处是您的外部类不必了解有关处理的任何信息。缺点是你必须不断地轮询外部类。

    选项二:将对您的处理草图的引用传递给您的外部类,然后从外部类调用处理草图中的函数。您可以通过首先获取对您的草图类实例的引用来做到这一点,可能通过构造函数传入。然后,您将使用该实例调用您的草图类的函数。

    在处理方面,您可以使用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);
       }
    }
    

    这允许您在事件发生时设置数据,而不是不断地轮询它,但它更复杂。

    【讨论】:

    • 谢谢!这很有帮助,但不是我需要去的方向(只是因为 VRPN 库有一定的限制/困难)。还是谢谢!
    猜你喜欢
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多