获取处理以读取Java文件输出/值

时间:2017-03-15 01:49:01

标签: java input output processing vrpn

我正在编写一个程序,使用处理程序从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文件当前为空/准备就绪并等待)

My file structure

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

1 个答案:

答案 0 :(得分:1)

您需要将外部类中的数据导入Processing sketch。你有两种选择:

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

ExternalClass ec;

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

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

这样做的好处是你的外部课程不必了解任何有关处理的知识。缺点是你必须经常轮询外部类。

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

在处理方面,您可以使用this关键字来传递草图本身的引用。它可能看起来像这样:

ExternalClass ec;

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

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

另请注意setData()函数,您可以从外部类调用它。

现在,外部类需要引用您的草图。在Processing编辑器中,您只需使用草图的名称:

public class ExternalClass{
   YouSketchName sketch;

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

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

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