Implementieren Sie die Java-Schnittstelle in der JRuby-Klasse und rufen Sie sie von Java aus auf

Ich wollte eine grafische Benutzeroberfläche in Java schreiben und in Ruby verarbeiten, daher musste ich Ruby- und Java-Klassen gegenseitig behandeln

$ tree
.
├── out
│   └── production
│       └── JRubyTest
│           └── JrubyTest
│               ├── Main.class
│               └── TestInterface.class
├── ruby
│   ├── TestInterface.jar
│   └── test_class.rb
└── src
    └── JrubyTest
        ├── Main.java
        └── TestInterface.java

TestInterface.java


package JrubyTest;

public interface TestInterface {
    java.lang.String hello();
}

TestClass.rb


java_import 'JrubyTest.TestInterface'

class TestClass
  include TestInterface
  def initialize name
    @name = name
  end

  def hello
    "hello #{@name}"
  end
end

Main.java


package JrubyTest;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptContext;
import javax.script.ScriptException;

public class Main {
    public static void main(String[] args) {
        ScriptEngineManager m = new ScriptEngineManager();
        ScriptEngine rubyEngine = m.getEngineByName("jruby");
        ScriptContext context = rubyEngine.getContext();
        try {
            File file = new File("ruby/test_class.rb");
            try {
                FileReader reader = new FileReader(file);
                rubyEngine.eval(reader);
                String name = "'Taro'";
                Object testClass = rubyEngine.eval("TestClass.new " + name, context);
                if (testClass instanceof TestInterface){
                    TestInterface test = (TestInterface) testClass;
                    System.out.println(test.hello());
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}

Recommended Posts

Implementieren Sie die Java-Schnittstelle in der JRuby-Klasse und rufen Sie sie von Java aus auf
Schreiben Sie eine Klasse in Kotlin und nennen Sie sie in Java
Rufen Sie Java von JRuby aus auf
Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
Verwendung von Abstract Class und Interface in Java richtig
Rufen Sie Kotlins versiegelte Klasse von Java aus an
StringBuffer- und StringBuilder-Klasse in Java
[Kotlin] Holen Sie sich Java Constructor / Method von KFunction und rufen Sie es auf
Rufen Sie Java-Methoden aus JavaScript auf, das in Java ausgeführt wird
Gradle generiert automatisch eine Versionsnummer aus git und verwendet diese in Java
GetInstance () aus einer @ Singleton-Klasse in Groovy aus Java
So erhalten Sie eine Klasse von Element in Java
Erfassen und speichern Sie die Selen-Installation in Java
Generieren Sie OffsetDateTime aus Clock und LocalDateTime in Java
Aufrufbare Schnittstelle in Java
abstrakt (abstrakte Klasse) und Schnittstelle (Schnittstelle)
Subtrahieren Sie Enum-Konstanten von Zeichenfolgen und Werten in Java zurück
Rufen Sie ein in Swift geschriebenes Programm von Processing (Java) auf.
[Android-Entwicklung] Holen Sie sich mit Java Bilder vom Server und legen Sie sie in ImageView fest! !!
[Java] Vorsichtsmaßnahmen beim Referenzieren in einer übergeordneten Klasse und beim Instanziieren in einer untergeordneten Klasse
Suchen Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java
JSON in Java und Jackson Teil 1 Gibt JSON vom Server zurück
Implementierung der zweistufigen Authentifizierung in Java
Definition und Instanziierung von Java-Klassen
Implementieren Sie die Standardauthentifizierung in Java
Aufrufen und Verwenden der API in Java (Spring Boot)
Implementieren Sie eine Kombination aus Mathematik in Java
2 Implementieren Sie eine einfache Syntaxanalyse in Java
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
Implementieren Sie das Senden von E-Mails in Java
Ruft Attribute und Werte aus einer XML-Datei in Java ab
Implementieren Sie eine funktionsähnliche schnelle Sortierung in Java
Implementieren Sie rm -rf in Java.
Implementieren Sie die XML-Signatur in Java
Installieren Sie das memcached Plugin unter MySQL und greifen Sie von Java aus zu
Mechanismus und Merkmale der in Java häufig verwendeten Collection-Implementierungsklasse
Implementieren Sie einen tabellengesteuerten Test in Java 14
Unterschied zwischen Schnittstelle und abstrakter Klasse
Rufen Sie Chain from Chain in Spring Integration auf
Holen Sie sich TypeElement und TypeMirror von Class
3 Implementieren Sie einen einfachen Interpreter in Java
Beispiel für Codierung und Decodierung in Java
[Java-Anfänger] Über Abstraktion und Schnittstelle
Implementieren Sie reCAPTCHA v3 in Java / Spring
Implementieren Sie die PHP-Implodierungsfunktion in Java
[JAVA] Unterschied zwischen Abstract und Interface
Java, Schnittstelle für Anfänger
Verstehe gleich und hashCode in Java
Versuchen Sie, Yuma in Java zu implementieren
1 Implementieren Sie eine einfache Phrasenanalyse in Java
Rufen Sie die Java-API von TensorFlow von Scala aus auf
Hallo Welt in Java und Gradle
Rufen Sie die Super-Methode in Java auf
[Java] Json von der URL mit der Standard-API (javax.script) abrufen und verarbeiten
Fügen Sie Android eine vorgefertigte JAR-Bibliothek hinzu und rufen Sie sie im Framework auf
Ich habe eine Lambda-Funktion in Java geschrieben und mit SAM bereitgestellt
Ich habe eine Klasse erstellt, die JUMAN und KNP aus Java verwenden kann
Beim Aufrufen von println usw. aus einer externen Java-Klassendatei in Processing
Java - Führen Sie das CheckStyle-Plug-In in IntelliJ IDEA ein und spiegeln Sie es im Formatierer wider
[Java] Implementieren Sie eine Funktion, die eine im Builder-Muster implementierte Klasse verwendet
Lernen Sie Deep Learning von Grund auf in Java.