Java Methode von JavaScript aufrufen?
Ich muss eine Client-Side Javamethode von Client-Side JavaScript aufrufen. Stellt es euch einfach vor wie eine Desktop App mit HTML/CSS/JS für das Frontend und Java als Backend, ist sehr schwer zu erklären. Wie ist das möglich?
4 Antworten
Das du dafür Ultralight verwendest, ist eine leicht übermittelbare und wesentliche Information.
Diese Bibliothek integriert bereits eine Schnittstelle, über die Java-Methoden im JavaScript-Kontext aufgerufen werden können. Im example-Ordner findest du ein Beispiel dafür.
In der ExampleMain.java werden die Ultralight-Ressourcen zunächst entpackt und geladen. Die JSInteraction-Klasse dient zur Demonstration einer Klasse, die später im JavaScript-Code (siehe example.js) instanziert wird.
Stellt es euch einfach vor wie eine Desktop App mit HTML/CSS/JS für das Frontend und Java als Backend, ist sehr schwer zu erklären. Wie ist das möglich?
Die Schnittstelle ist in diesem Fall üblicherweise in HTTP formuliert. Und dafür ist es völlig egal, in welcher Sprache Client oder Server geschrieben sind.
Frontend-Methoden via Backend aufrufen: Mit Server-Sent Events oder Web-Sockets.
Backend-Methoden via Frontend aufrufen: Ganz normal per HTTP.
Sollte doch trotzdem normale HTTP-Anfragen senden können, nicht?
Naja, es existiert doch in dem Fall garkein Server, oder? Wenn das ganze einfach nur gerendert wird
Du baust eine HTTP-Schnittstelle (API) in die Java-Anwendung ein, sodass der JavaScript-Code durch einen HTTP-Request besagte Methode auslösen kann.
Ich hatte vergessen zu sagen: Es ist nicht ganz so einfach….denn ich speichere den HTML/CSS Content über Ultralight in einem Framebuffer und rendere das ganze dann mit OpenGL…..das bedeutet, es gibt eigentlich keinen Server
Das ist dann eine völlig andere Situation.
Aber mit einer Google-Suche und 3 weiteren Klicks bin ich hier gelandet:
Das ist auch was ich nutze. Einige Anpassungen waren nötig, vor allem wegen Rendering usw. aber im Großen und Ganzen ist das, was ich nutze. Nur ist das mit den JS Bindings etwas komplizierter zu coden
Das ist dann aber weder eine Java-, noch eine JavaScript-Frage, sondern eher eine Ultralight-Frage, und an der Stelle kann ich leider nicht weiterhelfen. Aber im git wird ein Discord verlinkt, da hast du vermutlich bessere Chancen, Hilfe zu bekommen.
Ich dachte, vielleicht könnte man mit JavaScript irgendwie Javamethoden aufrufen….
Ein Programm kann nicht ohne weiteres mit einem anderen Programm kommunizieren. Selbst, wenn man zwei Programme in der gleichen Programmiersprache hätte, die aber ansonsten voneinander unabhängig sind, könnte das eine Programm nicht auf Methoden des anderen Programmes zugreifen.
Wenn man zwei Programme miteinander interagieren lassen möchte, braucht man eben eine API. Die fällt allerdings nicht vom Himmel, sondern muss auf beiden Seiten implementiert werden. Das eine Programm muss in der Lage sein, Daten durch eine API zu senden, und das andere Programm muss in der Lage sein, Daten über die API zu empfangen. So ein System von Grund auf selbst zu bauen, kann ziemlich komplex und anspruchsvoll sein. Gerade deshalb wird eben wie initial angesprochen im Internet gerne auf HTTP gesetzt, da hat man eben ein fertiges System, das man benutzen kann.
Wie gesagt kenne ich Ultralight nicht, aber wenn es dazu dient, ein Web-Frontend auf eine Java-Applikation aufzusetzen, würde ich erwarten, dass das Framework irgendeine Art von API bietet, mit der zwischen JavaScript Frontend und der Applikation dahinter kommuniziert werden kann. Ansonsten würde ich auch den Sinn hinter einem solchen Framework nicht ganz verstehen.
Nachtrag: Auf der Webseite von Ultralight steht explizit:
"...integrate JavaScript directly with native code"
was genau das ist, was du tun möchtest. Also bietet Ultralight diese Möglichkeit auf jeden Fall. Du musst nur herausfinden, wie das geht.
Es ist nicht ganz so einfach….denn ich speichere den HTML/CSS Content über Ultralight in einem Framebuffer und rendere das ganze dann mit OpenGL…..