Начало обработки для чтения выходных данных / значений файла Java
Я пишу программу для чтения значений кнопок с устройства VRPN, используя Обработка с примером файла Java, который отлично работает в командной строке.
Я уже настроил свою папку эскиза с соответствующей библиотекой / файлами, мне просто нужно перенастроить код 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/
1 ответ
Вам нужно получить данные из внешнего класса в эскиз обработки. У вас есть два варианта для этого:
Вариант первый: в вашем эскизе обработки просто вызывайте функцию получения, когда вы хотите получить данные из внешнего класса. Вот простой пример:
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);
}
}
Это позволяет вам устанавливать данные при возникновении события, а не постоянно опрашивать их, но это более сложно.