Frage

Ich habe einige Skripte in Javascript unter Rhino geschrieben 1.7, einer von ihnen beginnt einen minimalen HTTP-Server und übernimmt JS-Befehle in der Eingabe.

Nun, wenn ich rufe (aus Rhino):

engine = ScriptEngineManager().getEngineByName("JavaScript");

Ich habe das builtin JS Motor (ab Java 1.6), dass eine ältere Version von Rhino ist, und fehlen einige Funktionen (wie Javaadapter für mehrere Schnittstellen).

Wie erhalte ich die Rhino-Engine statt das? Brauche ich ScriptEngineManager.getEngineFactories () oder was sonst?

War es hilfreich?

Lösung 2

Ich fand es heraus selbst (Versuch und Irrtum). Wie oben erwähnt, ist Rhino keine Motorenfabrik registrieren. Sie können den aktuellen Motor (als Kontext und ein skriptfähiges Objekt) erhalten:

cx = Context.getCurrentContext();
scope = new ImporterTopLevel(cx);

Mit diesen Objekten kann ich meine Skripte oder Befehlszeilen mit evalString / evalReader ausgeführt werden.

Andere Tipps

Was Sie wollen, zu erreichen, ist eine bestimmte Version einer Script-Engine auszuwählen, die „JavaScript“ implementiert. Der richtige Weg, das zu tun ist ScriptEngineManager.getEngineFactories() zu rufen und dann überprüfen Sie die Ergebnisse der getLanguageName() und getEngineVersion().

Vor der ersten Skript aufgerufen wird, warum Sie nicht den Motor setzen Sie sich als Kontextvariable im Skript verwenden? Auf diese Weise innerhalb des Skript erhalten Sie Zugriff auf den Motor haben, der es ausgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top