Dynamisches Manipulieren/Laden von Klassen

Skalar

Mitglied
Hallo,

folgendes Szenario: Auf einem Frame ist unter anderem ein Panel. Dieses Panel soll nun zur Laufzeit ausgetauscht werden. Allerdings nicht mit einer zur Compilezeit bekannten Klasse, sondern dynamisch.

Der Kontext ist Modelgetriebene Softwareentwicklung. Wir haben eine GUI-Beschreibungssprache entwickelt. Aus diesen Modellen generieren wir Java Source Code. Leider müssen wir jetzt für jede Vorschau der GUI immer wieder generieren, compilieren und die VM neu anstarten. Das dauert. Und alles nur für ein Panel, das sich geändert hat. Es geht also um Performance.

Also: wie kann ich Klassen (neue Panels) dynamisch laden bzw. bestehende Klassen manipulieren (eine Methode (setLayout()) des Panels)?

Ich habe bereits einige Lösungsansätze erfolgreich ausprobiert:
1) Mit Runtime.exec("javac bla.java") selbst eine neues java-file kompiliert und in die VM laden. Funzt, ist aber ätzend langsam
2) Javaassist Framework: Dieses (eigentlich Bytecodemanipulations-) Framework bietet einen eingebauten Compiler mit dem man nur kleine Snippets (einen Methodenrumpf) compilieren kann. Ich nehme mir das bestehende Panel, tausche die Methoden aus und lade die neue Klasse in die VM. funtz, ist auch schon 3x so schnell wie 1)
3) Bytecode-Engineering mit ASM Framework: Ich manipuliere den Bytecode des bestehenden Panels und schreibe die Methode neu. Wahnsinnig schnell (da keine Compilation), jedoch aufgrund der bytecodenähe sehr anspruchsvoll und fehleranfällig.

Hab ihr noch weitere Idee, Anregungen oder Gedanken dazu? Ich probiere gerne neue Sachen aus.
Können andere Sprachen (wie Scala) hier vlt. weiter helfen? Kann man lebende Objekte manipulieren (vlt. mit irgendwelchen Frameworks)?

mfg
Skalar
 

Michael...

Top Contributor
Nur für mein Verständnis:
Ihr habt ein Programm/JFrame das läuft, während dieses Programm läuft programmiert Ihr eine neue Klasse und kompliert diese. Diese soll dann im noch laufenden Programm verwendet werden?
Woher weiss das Programm wie die Klasse heisst?
 

xerberuz

Bekanntes Mitglied
Ich würd dir für solche Dinge OSGi empfehlen. Das kann einzelne Bundles(so heißen die Komponenten im OSGi Kontext) zur Laufzeit austauschen. Sprich du erstellst ein Bundle das deine Klasse enthält und kannst dieses zur Laufzeit durch ein anderes ersetzen, das eben die neue Klasse enthält.

Das Framework nimmt dir fast die ganze arbeit ab.
 

karatekid

Mitglied
OSGi bringt in dem Fall nix. Das ist ja nur eine weitere, noch langsamere Variante als die bereits getestete Variante 1.

Andere Ideen hätte ich nicht. Variante 2 scheint schon ein guter Kompromis aus Laufzeit und Stabilität zu sein.
 

Skalar

Mitglied
Nur für mein Verständnis:
Ihr habt ein Programm/JFrame das läuft, während dieses Programm läuft programmiert Ihr eine neue Klasse und kompliert diese. Diese soll dann im noch laufenden Programm verwendet werden?
Woher weiss das Programm wie die Klasse heisst?

Mein Frame arbeitet gegen die Schnittstelle eines Panels, nicht gegen eine konkrete Implementierung. Damit kann ich die Implementierung beliebig zur Laufzeit austauschen. Es geht nur so, weil die dynamisch geladenen Klassen zur Compilezeit ja nicht bekannt ist.
Java:
//...
//newPanelClass vorher mittels Classloader geladen
APanel newPanel = (APanel) newPanelClass.newInstance(); //mit Reflection instanziieren
Und schon kann ich das newPanel verwenden, egal was für eine Klasse es tatsächlich ist, hauptsache es implementiert die Schnittstelle APanel.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Unterschied: Polymorphie und Dynamisches Binden Allgemeine Java-Themen 8
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
N Eclipse Dynamisches-Web-Project auf anderen Rechner transportieren Allgemeine Java-Themen 5
looparda Dynamisches Konsolenprogramm Allgemeine Java-Themen 3
T Dynamisches p:graphicimage im Datagrid Allgemeine Java-Themen 7
C Dynamisches und sortiertes Auslesen von Properties Allgemeine Java-Themen 2
P Dynamisches Binden Allgemeine Java-Themen 7
X Dynamisches hinzufügen von Panles Allgemeine Java-Themen 4
A Dynamisches Enum? Allgemeine Java-Themen 2
S dynamisches Array für Primfaktorzerlegung Allgemeine Java-Themen 13
Z Dynamisches JPanel Allgemeine Java-Themen 10
hdi Dynamisches Instantiieren (Reflections) Allgemeine Java-Themen 4
H2SO3- dynamisches anlegen der dimensionaltität eines arrays Allgemeine Java-Themen 6
reibi Klassenpfad mal anders - dynamisches Laden einer Klasse Allgemeine Java-Themen 7
lumo "Exzessiv" dynamisches generieren Allgemeine Java-Themen 6
P dynamisches Array / Vector Allgemeine Java-Themen 2
R Dynamisches Laden von JNI-Bibliotheken Allgemeine Java-Themen 4
N Mehrdimensionales dynamisches Array Allgemeine Java-Themen 3
T Dynamisches laden von java Klassen Allgemeine Java-Themen 2
B Dynamisches Linken Allgemeine Java-Themen 15
M Dynamisches ausführen von methoden unbekannter klassen Allgemeine Java-Themen 6
V dynamisches laden von klassen Allgemeine Java-Themen 8
C Dynamisches Nachladen von JARs (Plugin) Allgemeine Java-Themen 3
S Dynamisches Casten Allgemeine Java-Themen 5
M Statisches und dynamisches Binden? Allgemeine Java-Themen 2
S Dynamisches Feld generieren. Allgemeine Java-Themen 10
E Dynamisches Instanziieren Allgemeine Java-Themen 2
B dynamisches Laden aller Klassen in einem Ordner ?? Allgemeine Java-Themen 5
N svg(xml) parsen und manipulieren? Allgemeine Java-Themen 3
P iTunes Datenbank manipulieren Allgemeine Java-Themen 2
R Problem beim vCard Manipulieren Allgemeine Java-Themen 2
Z 2D-Grafik Webcam-Bilder analysieren und manipulieren Allgemeine Java-Themen 8
C Bilder automatisch bearbeiten/manipulieren Allgemeine Java-Themen 2
H Pixel im BufferedImage Manipulieren ? Allgemeine Java-Themen 17
K Elegante Lösung zum Manipulieren von Collections gesucht Allgemeine Java-Themen 16
D mausbewegungungen manipulieren Allgemeine Java-Themen 2
R Einzelne Zeile manipulieren Allgemeine Java-Themen 4
M Array per Reflection manipulieren Allgemeine Java-Themen 5
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
F Laden von bestimmten Daten aus TAR Archiv Allgemeine Java-Themen 23
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
Tobero .jar Dateine aus einem Ordner laden (Java 16) Allgemeine Java-Themen 5
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
C Wav-Datei aus Jar laden? Allgemeine Java-Themen 11
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
L Seite einer Partner Website neu laden Allgemeine Java-Themen 1
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15
S Maven Jars dynamisch laden / Plugin-Struktur erstellen Allgemeine Java-Themen 14
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
L Mapdaten laden Allgemeine Java-Themen 10
B Aktuellen Sourcecode aus Browser laden Allgemeine Java-Themen 43
HoloYoitsu Kann .dll nur aus Eclipse heraus laden Allgemeine Java-Themen 7
F Teil eines Bildes laden Allgemeine Java-Themen 1
L JavaFX JavafX externe FXML laden? Allgemeine Java-Themen 4
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Allgemeine Java-Themen 3
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
V Input/Output Gif Bilder Animiert aus einer Jar laden Allgemeine Java-Themen 4
V Input/Output Swing Icons in Jar Archiv laden Allgemeine Java-Themen 10
C BufferedImages in Jar laden. Allgemeine Java-Themen 1
G StackoverflowError beim laden einer FXMML Datei Allgemeine Java-Themen 1
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
J Arraylist speichern und laden? Allgemeine Java-Themen 5
S Applet in html laden; InvocationTargetException,.. nur warum ? Allgemeine Java-Themen 0
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
A Anderes Fenster neu laden Allgemeine Java-Themen 16
N Daten aus Jar laden Allgemeine Java-Themen 10
N Klasse via ClassLoader laden Allgemeine Java-Themen 2
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
A mit getClassLoader Bild laden Allgemeine Java-Themen 8
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
G Native Library / Fehler beim Laden der .so/.dll Datei Allgemeine Java-Themen 17
antonbracke Klassen Klassen gegenseitig laden Allgemeine Java-Themen 4
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
P Textdatei aus Ressourcen laden. Allgemeine Java-Themen 8
R Java Array speichern & laden Allgemeine Java-Themen 23
N Input/Output Bild von WebSite laden? Allgemeine Java-Themen 3
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
Z Bilder aus JAR laden Allgemeine Java-Themen 2
D Ressourcen(config) laden Allgemeine Java-Themen 11
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
S IMAGE ARRAY laden Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben