Eine Schnittstelle implementieren
Das folgende Beispiel zeigt, wie eine Schnittstelle namens IPerson von einer Ruby-Klasse implementiert wird. Zunächst wird die Schnittstellendefinition gezeigt:
package com.railsexperts.jruby.call2java;public interface IPerson {public String getName();public String getEmailAddress();}
IPerson kennt zwei Methoden: getName und getEmailAddress. Diese müssen von der Ruby-Klasse implementiert werden (Listing 2).
Listing 2
include Javainclude_class "java.util.ArrayList"include_class "com.railsexperts.jruby.call2java.IPerson"class CallingJavainclude IPersondef getName"Michael"enddef getEmailAddress"mjohann@rails-experts.com"enddef initializesuper@msgList = ArrayList.new@message = "Hallo aus JRuby."enddef say_helloputs @messageenddef add_message(msg)@msgList.add(msg)enddef output_messagesputs "Anzahl der Nachrichten = #{@msgList.size}"@msgList.each do |msg|puts msgendendendp = CallingJava.newputs p.classputs "Diese Klasse implementiert IPerson" if p.is_a? IPersonputs p.getNameputs p.getEmailAddressp.say_hellop.add_message "Hallo zusammen"p.add_message "Tach auch"p.add_message "Moin, moin"puts p.output_messages
Der Schlüssel ist die include-Anweisung innerhalb der Klassendefinition. Eine Schnittstelle aus Java wird so als Module-Mixin implementiert und eingebunden. Damit muss die Ruby-Klasse die beiden Methoden getName und getEmailAddress implementieren. Dies wird auch prompt im weiteren Verlauf des Beispiels erledigt. Konkret werden im Beispiel einfach passende Strings zurückgegeben. Im Konstruktor der Ruby-Klasse legt man eine Instanz von java.util.ArrayList an und weist der Instanzvariablen @message ein String-Objekt zu, das von der Methode say_hello ausgegeben wird. Die Methode add_message fügt Textnachrichten in die ArrayList-Instanz ein. Beim Aufruf der Methode output_messages sorgt dann eine Iteration für die Ausgabe aller Objekte in der ArrayList. Das Skript am Ende des Listings zeigt dann die Anwendung und erzeugt folgende Ausgabe:
CallingJava Diese Klasse implementiert IPerson Michael mjohann@rails-experts.com Hallo aus JRuby. Anzahl der Nachrichten = 3 Hallo zusammen Tach auch Moin, moin nil
Mit dieser einfachen Demonstration haben wir die wichtigsten Informationen für die Integration vorhandener Java-Klassen in ein Ruby-Programm unter JRuby dargestellt. Der nächste Abschnitt zeigt, wie man mit einfachen Mitteln eine Swing-Anwendung in Ruby schreibt.
Eine Swing-Anwendung mit JRuby
Das folgende Beispiel zeigt Ihnen, wie Sie eine Swing-Anwendung mit JRuby erstellen. Hierzu dient eine einfache To-Do-Liste, die das Hinzufügen und Löschen von Einträgen erlaubt (Abb. 1).
Zunächst wird eine Klasse namens RubySwingTodo erstellt, die in die Datei ruby_swing_todo.rb geschrieben wird:
include Java class RubySwingTodo end
Damit wird wie üblich die Java-Funktionalität in unseren Scope geholt. Dann benötigen wir ein kleines Script, das eine Instanz von RubySwingTodo erstellt und eine Methode, die ich hier run genannt habe, um die Anwendung zu starten:
todo = RubySwingTodo.new todo.run














