Jython-Java-Applets

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
abgdf

Dienstag 20. Januar 2009, 17:14

Hallo,

das sollte eigentlich eine Frage werden, aber ich hab' den Fehler schon selbst gefunden (hatte in der html-Datei (s.u.) "archives" geschrieben). Will's aber trotzdem mal posten, dann halt als Tip:

Nach dem Hinweis von numerix

http://www.python-forum.de/topic-17469.html

hab' ich mir mal Jython angesehen. Klappt auch soweit.
Also, ich habe Sun-Java JDK 1.6, Jython 2.2.1, Mozilla 1.7 mit Plugin des JDKs (läuft).
In "../jython/Demo/applet" gibt es eine Demodatei "HelloWorld.py".

Code: Alles auswählen

jython HelloWorld.py
ergibt ein kleines awt-Fenster mit
Hello from Jython 2.2.1!

Code: Alles auswählen

jythonc --core --deep --jar HelloWorld.jar HelloWorld.py
erzeugt eine Datei "HelloWorld.jar" (jythonc hatte bei mir in früheren Versionen noch Probleme, die nun behoben zu sein scheinen).
Nun schreibe ich im aktuellen Verzeichnis eine Datei "HelloWorld.html" mit dem Inhalt:

Code: Alles auswählen

<html>
<body>
<applet code="HelloWorld.class" archive="HelloWorld.jar" width = 500 height = 105>
</applet>
</body>
</html>
schalte im Browser Java an und starte mit

Code: Alles auswählen

mozilla HelloWorld.html
Ergebnis: Klappt (jetzt).

Viele Grüße
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Dienstag 20. Januar 2009, 17:41

Wenn `--deep` macht, was ich vermute, ist das aber nicht gerade eine schlanke Lösung. Suns neue moderne Lösung für Applets wäre JavaFX.

Wenn's Python sein soll: Wäre es nicht toll, wenn es einen Python-Interpreter für Flash gäbe? Ich war mal kurz davor, sowas zu beginnen, doch leider ist das ein etwas größeres Unterfangen. Zwei Ansätze könnte man probieren: a) pyc-Dateien einlesen und mit einem eigenen Interpreter die ~100 Bytecodes auswerten. Verzichtet man auf die __*__-Methoden, ist das ein überschaubares Projekt. b) Man übersetzt Python-Quelltext in ActionScript-Code und kompiliert diesen dann ganz normal. Man könnte auch versuchen, ABC (ActionScript Bytecode) zu erzeugen, wäre aber IMHO mehr Aufwand.

In beiden Fällen müsste man sich noch überlegen, wie man mit Flash-Funktionen interagieren kann und wie man derartige Programme am besten auch ohne Flash-VM ausführen kann. Vielleicht ist flex-pypy einen Blick wehrt. Ansonsten gibt es ein Ruby-Projekt, von dem man abgucken kann.

Sorry für OT,
Stefan
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Mittwoch 21. Januar 2009, 08:47

sma hat geschrieben:Wenn's Python sein soll: Wäre es nicht toll, wenn es einen Python-Interpreter für Flash gäbe?
Wäre ein Interpreter in Javascript vermutlich noch flexibler einsetzbar und dank der Beschleunigung, die in letzter Zeit erreicht wurde, vielleicht sogar sinnvoll nutzbar?
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Mittwoch 21. Januar 2009, 09:11

Das wäre doch auch mal eine gute Aufgabe für das PyPy-Projekt.
Deren Ziel ist doch die automatische Generierung von Interpretern. Sie haben auch schon sowas gemacht: Siehe hier
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Mittwoch 21. Januar 2009, 20:21

Mir ist grad aufgefallen, dass es doch schon mehrere Lösungen für das Problem gibt...
Wäre das nicht auch eine Lösung?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Sonntag 25. Januar 2009, 10:34

mkallas hat geschrieben:
sma hat geschrieben:Wenn's Python sein soll: Wäre es nicht toll, wenn es einen Python-Interpreter für Flash gäbe?
Wäre ein Interpreter in Javascript vermutlich noch flexibler einsetzbar und dank der Beschleunigung, die in letzter Zeit erreicht wurde, vielleicht sogar sinnvoll nutzbar?
Ich hatte das auf der Basis von v8 versucht und die Performance wahr sehr enttäuschend. v8 selbst ist deutlich schneller als Python, wenn man das Standardbeispiel fib() ausprobiert, doch der Aufwand, die Python-Aufrufsemantik nachzuahmen ist so groß, dass es sich leider nicht lohnt.

Entweder man verzichtet auf die __*__-Semantik und hat dann ein JavaScript mit Python-Syntax oder aber man muss die JavaScript-Engine-Implementierung anpassen und dann läuft's natürlich nicht mehr im Browser.

Stefan
Antworten