LoginSignup
5
3

More than 5 years have passed since last update.

Processingで外部のJavaクラスファイルからprintlnなどを呼び出す時

Last updated at Posted at 2018-10-24

はじめに

概要

Processingでちゃんとクラス分けをして気持ちよく開発していたら、外部のJavaクラスファイルからprintln()などの標準的な関数(厳密にはprocessing.core.PApplet以下で定義されているメソッド)が使えへんやん!って思ったので、少し調べて見ました。

環境

今の自分の環境です。他の環境でも基本的には問題ないと思います。

  • Processing
    • Processing3.3.7
  • OS
    • macOS HighSierra

Processingについて

Processingとは、ビジュアルアートなどにおいて、簡単にコーディングができたり学べだりする言語/環境です。2001年から開発が続いており、ビジュアルアートにおけるソフトウェアリテラシや、テクノロジにおけるアートリテラシの向上に貢献しています。現在ではたくさんの学生、アーティスト、デザイナー、研究者、一般人(hobbyists)がProcessingを用いて学んだりプロトタイピングをしたりしています。(公式サイトの説明文を適当に意訳)

つまりアートとかプロトタイピングがさっとできてとても楽しく素晴らしい環境ということです。

結論

現状、自分の知識の範囲では、関数を使いたい外部Javaクラスファイルにprocessing.core.PAppletをインポートして、クラス内部でPAppletのインスタンス(ベースクラス/エントリーポイントのクラスのインスタンス)を保有し、そのインスタンスから関数をコールすると良いと思っています。つまり、Test.pdeでプロジェクトを作って、Human.javaというクラスファイルを同じディレクトリに作成したとすると、

Test.pde
void setup() {
  Human Oka = new Human();
}

void draw() { }
Human.java
public class Human {
  public Human() {
    println("ware umaretari"); //これだとprintlnが定義されていないと怒られる
  }
}

を、

Test.pde
void setup() {
  Human Oka = new Human(this);
}

void draw() { }
Human.java
import processing.core.PApplet;

public class Human {
  PApplet parent;

  public Human(PApplet p) {
    this.parent = p;
    this.parent.println("ware umaretari");
  }
}

とすると良いということですね!

まとめ

今後もコアな使い方(?)ができるよう頑張ります。もう少しクレバーなやり方があれば教えていただけると幸いです。ちなみに、もともとベースクラス(今回の例ではTestクラス)からメソッドを呼び出すことができるのはわかっていたのですが、もっと一般的なやり方ができるのでは?というのはControlP5のコンストラクタで自分のインスタンスを渡すことになっているということから気づきました。

参考文献

PAppletのJavadocs
ControlP5のgitリポジトリ

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3