正在处理以读取 Java 文件 output/values
Getting Processing to read Java file output/values
我正在编写一个程序,使用 Processing 和一个在命令行中完美运行的示例 Java 文件从 VRPN 设备读取按钮值。
我已经使用适当的 library/files 设置了草图文件夹,我只需要重新配置 Java 代码以将值发送到事物的 PDE 端(目前 System.out.println()).我已经尝试建立一个 PApplet 对象,但是在 ButtonTest class 中配置它时遇到了问题。我曾尝试在 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 文件当前 empty/ready 正在等待)
仅供参考,我已经设法将值从 Java 文件发送到此处看到的处理草图,我似乎无法为这个项目实现它 https://forum.processing.org/two/discussion/3677/
您需要从外部 class 获取数据到 Processing sketch 中。您有两个选择:
选项一: 在您的 Processing sketch 中,只要您想从外部 class 获取数据,只需调用 getter 函数即可。这是一个简单的例子:
ExternalClass ec;
void setup(){
ec = new ExternalClass();
}
void draw(){
println(ec.getData());
}
这样做的好处是您的外部 class 不必了解有关处理的任何信息。缺点是你必须不断地轮询外部 class.
选项二:将对 Processing sketch 的引用传递给外部 class,然后从外部 class 调用 Processing sketch 中的函数。您可以通过首先获取对您的草图 class 的实例的引用来做到这一点,可能是通过构造函数传入的。然后,您将使用该实例调用草图 class 的函数。
在处理方面,您可以使用 this
关键字传递对草图本身的引用。它可能看起来像这样:
ExternalClass ec;
void setup(){
ec = new ExternalClass(this);
}
void setData(int whatever){
println(whatever);
}
另请注意 setData()
函数,您可以从外部 class 调用该函数。
现在,外部 class 需要引用您的草图。在处理编辑器中,您只需使用草图的名称:
public class ExternalClass{
YouSketchName sketch;
public ExternalClass(YourSketchName sketch){
this.sketch = sketch;
}
private void dataChanged(){
sketch.setData(42);
}
}
这允许您在事件发生时设置数据,而不是不断地轮询它,但它更复杂。
我正在编写一个程序,使用 Processing 和一个在命令行中完美运行的示例 Java 文件从 VRPN 设备读取按钮值。
我已经使用适当的 library/files 设置了草图文件夹,我只需要重新配置 Java 代码以将值发送到事物的 PDE 端(目前 System.out.println()).我已经尝试建立一个 PApplet 对象,但是在 ButtonTest class 中配置它时遇到了问题。我曾尝试在 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 文件当前 empty/ready 正在等待)
仅供参考,我已经设法将值从 Java 文件发送到此处看到的处理草图,我似乎无法为这个项目实现它 https://forum.processing.org/two/discussion/3677/
您需要从外部 class 获取数据到 Processing sketch 中。您有两个选择:
选项一: 在您的 Processing sketch 中,只要您想从外部 class 获取数据,只需调用 getter 函数即可。这是一个简单的例子:
ExternalClass ec;
void setup(){
ec = new ExternalClass();
}
void draw(){
println(ec.getData());
}
这样做的好处是您的外部 class 不必了解有关处理的任何信息。缺点是你必须不断地轮询外部 class.
选项二:将对 Processing sketch 的引用传递给外部 class,然后从外部 class 调用 Processing sketch 中的函数。您可以通过首先获取对您的草图 class 的实例的引用来做到这一点,可能是通过构造函数传入的。然后,您将使用该实例调用草图 class 的函数。
在处理方面,您可以使用 this
关键字传递对草图本身的引用。它可能看起来像这样:
ExternalClass ec;
void setup(){
ec = new ExternalClass(this);
}
void setData(int whatever){
println(whatever);
}
另请注意 setData()
函数,您可以从外部 class 调用该函数。
现在,外部 class 需要引用您的草图。在处理编辑器中,您只需使用草图的名称:
public class ExternalClass{
YouSketchName sketch;
public ExternalClass(YourSketchName sketch){
this.sketch = sketch;
}
private void dataChanged(){
sketch.setData(42);
}
}
这允许您在事件发生时设置数据,而不是不断地轮询它,但它更复杂。