Processing bietet mit seiner integrierten Entwicklungsumgebung einen guten Ausgangspunkt, um die Software Entwicklung mit Java zu lernen. Doch hat man die ersten Projekte erfolgreich gemeistert kommt die Frage auf, ob man nun bis ans Ende daran gebunden ist, die IDE von Processing zu verwenden.

Glücklicherweise lautet die Antwort: “Nein”

Bei Processing handelt es sich um eine Bibliothek, welche sich ohne größere Probleme in die bevorzugte Entwicklungsumgebung einbinden lässt. 
Für diesen Beitrag, entscheiden wir uns für Eclipse als das Werkzeug unserer Wahl.

Nachdem Eclipse erfolgreich installiert wurde, können wir auch loslegen und unser erstes Processing Projekt überführen. Für dieses Beispiel wird das Spiel Tetris Schritt für Schritt in Eclipse eingebunden.
Wir beginnen damit, ein neues Java Projekt zu erstellen. Über File -> New -> Java Project lässt sich dies bewältigen. Die Einstellungen müssen nicht weiter angepasst werden, lediglich beim Namen entscheiden wir uns für etwas aussagekräftiges wie “Tetris-Processing”.

Als nächstes öffnen wir mit einem Rechtsklick auf den Projektordner das Menü und wählen “Import” aus. Zwar ist in dem Projektordner bereits die JRE (Java Runtime Environment) enthalten, allerdings noch nicht die Processing Bibliothek und dies wollen wir hiermit ändern.

Gewählt wird General -> File System und mit next bestätigt.

Die Processing Bibliothek findet wir unter:

  • Mac: /Applications/Processing.app/Contents/Java/core/library/
  • Windows: /Pfad_zu_Processing/core/library/

Von den vielen Dateien, die uns nun angezeigt werden, interessiert uns lediglich die core.jar

Sobald diese nun in unserem Java Projekt verfügbar ist, müssen wir diese nur noch zugänglich für das Projekt machen. Dafür einen Rechtsklick auf die Datei und unter Build Path -> Add to Build Path

Damit wäre die Processing Bibliothek eingebunden und bereit zur Verwendung!

Im folgenden erstellen wir nun drei Pakete und fügen diesen unsere in Processing erstellten Dateien hinzu. Der src Ordner sollte bei Erfolg folgende Struktur aufweisen:

  • src
    • game
    • tetris
    • tetromino

Wir beginnen damit, die Klassenrümpfe in die jeweiligen Pakete einzupflegen. Inhalte brauchen die Klassen noch keine, sie sollen zu Anfang nur strukturell richtig liegen. Folgendermaßen soll der src Ordner nach dem Einfügen aussehen:

  • src
    • game
      • Gamearea.java
      • Information.java
    • tetris
      • Tetris.java
    • tetromino
      • Square.java
      • Tetromino.java
      • Token.java

Da die Struktur nun steht, können wir mit den Inhalten fortfahren. In diesem Fall wäre es die Tetris.java, welche als erste mit Inhalt gefüllt wird. Sie war die Processing Hauptklasse, welche das grundlegende Zeichnen mittels draw() für uns übernommen hat.
Wenn wir die Klasse öffnen, haben wir folgende Struktur vor uns:

package tetris;

public class Tetris{

}

Diese wird automatisch beim erstellen einer Klasse von Eclipse erzeugt. Damit Processing arbeiten kann, fügen wir direkt unter das package ein import hinzu. Über dieses vermitteln wir, dass der Klasse erweiterte Funktionen zur Verfügung stehen.

package tetris;

import processing.core.*;

public class Tetris{

}

Außerdem erbt unsere Klasse von Processing Applet:

package tetris;

import processing.core.*;

public class Tetris extend PApplet{

}

Sofern unser Projekt nur aus einer Klasse besteht, wären wir jetzt schon fertig. Innerhalb der Klasse können wir nun alle uns aus Processing bekannten Funktionen wie gewohnt verwenden!
Da Programmieren mit nur einer Klasse aber etwas langweilig wäre, ist unsere Arbeit hier zum Glück noch nicht getan.

Nun müssen wir überprüfen, welche der anderen Klassen ebenfalls auf Fähigkeiten der Processing Bibliothek zurückgreifen. Dies wären Gamearea, Information und Token.
Diese Klassen erhalten ebenfalls einen import, dieses Mal allerdings nicht den kompletten core, sondern nur das PApplet.

Folgendes wird hinzugefügt: import processing.core.PApplet;

Außerdem erhalten diese Klasse eine Hilfsvariable vom Typ PApplet. In der Processing IDE war dies nicht nötig, da alle Klassen frei auf alle Funktionen der Bibliothek zugreifen konnten. Nun müssen wir den Klassen diese Möglichkeit explizit eingestehen.

Gesetzt werden muss diese Variable direkt im Konstruktor der jeweiligen Klassen.

Für Information.java wäre dies:

package game;

import processing.core.PApplet;

public class Information {

	private PApplet parent;

	public Information(…, PApplet parent){
		this.parent = parent;
		...
	}
	...
}

Dieses parent gibt uns den Zugriff den wir benötigen, um die Funktionen der Processing Bibliothek ausführen zu können. Sollten Konstanten verwendet werden wie: LEFT, UP, RIGHT, DOWN muss die Klasse PConstants eingebunden werden:

import processing.core.PConstants;

Über PConstants.UP können wir nun auch wieder auf solche Werte zugreifen.

Wir dürfen natürlich nicht vergessen, vor jedem Aufruf einer Funktion der Processing-Bibliothek nun "parent.” davor zu schreiben. Ein Aufruf könnte folgendermaßen aussehen:

parent.fill(255);

Dies gilt für alle Klassen, welche NICHT unsere Hauptklasse (Tetris.java) sind.

Mit diesem Wissen im Hinterkopf, können wir nun per Copy&Past die Inhalte aus den Processing PDEs überführen. Mit etwas Anpassung unsererseits und den Anmerkungen von Eclipse, sollte es keine größeren Probleme geben.

Wer das Bedürfnis verspürt das der eingefügte Code nun schrecklich formatiert sei, der sollte die automatische Code Formatierung von Eclipse Nutzen. Für Mac Nutzer geschieht dies mit der Tastenkombination ⌘ + ⇧ + F und unter Windows mit STRG + SHIFT + F

Da wir unser Processing Projekt als Java Application exportieren können wollen, fügen wir dem Packet tetris eine Klasse mit dem Namen Main hinzu.

Diese erhält folgenden Inhalt:

package tetris;

import processing.core.PApplet;

class Main{
	public static void main(String args[]) {
		PApplet.main(new String[] {"tetris.Tetris"});
	}
}

Damit lässt sich unser Projekt aus der Tetris.java heraus als Applet und aus der Main.java als Application starten und exportieren.

Weitere Informationen und hilfreiche Tipps findet man im Processing-Wiki.

Im Download befinden sich die angepassten Dateien. Es handelt sich hierbei um keine ausführbare JAR Datei, sondern dient lediglich dazu in Eclipse importiert zu werden. Nachdem die core.js wie oben beschrieben hinzugefügt wurde, läuft das Programm ohne Probleme.