2017-03-15 3 views
1

명령 행에서 완벽하게 작동하는 샘플 Java 파일로 Processing을 사용하여 VRPN 장치에서 버튼 값을 읽는 프로그램을 작성하고 있습니다.Java 파일 출력/값을 읽는 처리 받기

이미 스케치 폴더를 적절한 라이브러리/파일로 설정 했으므로 값을 PDE 측 (현재 System.out.println())으로 보내도록 Java 코드를 재구성해야합니다. PApplet 객체를 설정하려고 시도했지만 ButtonTest 클래스 내에서 구성하는 데 어려움이 있습니다. 나는 자바 내에서 이런 종류의 기능을 연구하려고했지만 올바른 용어를 찾는 데 어려움을 겪고있다. 어떤 도움이라도 대단히 감사하겠습니다!

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); 
    } 
} 

내 파일 구조 : 내가 관리했습니다 그냥 참조 용

My file structure

이 보인 처리 스케치에 자바 파일에서 값을 보내 (PDE 파일은 현재/빈 준비하고 기다리고) 여기,이 프로젝트를 위해 구현할 수없는 것 같습니다. https://forum.processing.org/two/discussion/3677/

답변

1

외부 클래스의 데이터를 처리 스케치에 가져와야합니다. 다음과 같은 두 가지 옵션이 있습니다.

옵션 1 : 처리 스케치에서 외부 클래스의 데이터를 가져올 때마다 간단히 getter 함수를 호출하십시오. 다음은 간단한 예입니다.

이점은 외부 클래스가 처리에 대해 알 필요가 없다는 것입니다. 단점은 외부 클래스를 지속적으로 폴링해야한다는 것입니다.

옵션 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