Fremden Code ins Programm einbinden

Status
Nicht offen für weitere Antworten.

Centai

Mitglied
Ich möchte ein Programm (genauer gesagt ein Spiel) schreiben, für welches der Benutzer seine eigene KI in Java schreiben kann und diese dann ins Programm einbindet (ähnlich wie bei AntMe).

Meine Frage ist: Wie kann man sowas am einfachsten in Java realisieren?

Meine Idee ist folgende:
Ich geb dem Benutzer ein Interface mit einer Methode mit, welche von der Ablauflogik aufgerufen wird. Der Benutzer implmentiert dieses Interface in seine Klasse und compiliert diese.

Die class-Datei vom Benutzer wird im Hauptprogramm über den Class-Loader geladen.
(Ist es irgendwie möglich, dass man sie automatisch erkennen kann?)


Lässt sich das so realisieren oder gibt es evtl. auch einen eleganteren Weg?
 
S

SlaterB

Gast
so macht man das in etwa, ja


Class c = Class.forName("externerKlassenname mit Pfad");
Object o = c.createInstance();
KnownInterface x = (KnownInterface) o;

oder ähnlich, siehe Stichwörter Reflection, Class.forName(), ClassLoader usw.
 

Centai

Mitglied
Danke erstmal.

Funktioniert das auch wenn die Klasse in einem JAR-Archiv steckt und weitere Abhängigkeiten zu anderen Klassen dort hat?
 
S

SlaterB

Gast
in den Worten Dr. Egon Spengler's aus Ghostbusters als Bauarbeiter: jo

mit ClassPath sollte man sich natürlich bisschen auskennen
 
M

maki

Gast
>> Ich muss zugeben, dass ich mich damit nicht auskenne - aber braucht man für die 3 Zeilen Code für den URLClassLoader wirklich ein eigenes Framework zu verwenden?

Gutes Argument, allerdings bekommt man die gewünschte "automatische Erkennung" von Klassen geschenkt und viele viele andere Dinge (zB: "Funktioniert das auch wenn die Klasse in einem JAR-Archiv steckt und weitere Abhängigkeiten zu anderen Klassen dort hat?") die mit einem selbstgeschriebenen 3 Zeiler nicht möglich sind.
 
S

SlaterB

Gast
oh,
Class c = Class.forName("externerKlassenname mit Pfad");
geht bei Jar nicht?

hab nicht getestet ;)

was ist mit den Klassen aus Datenbank-Treiber-Jars, macht die Connection-Klasse mit denen was anderes?
 

Centai

Mitglied
Das OSGi scheint ganz interssant zu sein, aber ist meiner Meinung nach zu viel Overhead für mein kleines Projekt.

Ich hab es jetzt mit dem URLClassLoader realisiert, mit welchem ich auch Klassen aus JARs laden kann, welche wiederum auf andere Klassen im JAR-Archiv zugreifen können.

Hier mal mein Code (falls es jemand mal braucht)
Code:
String dpath = "c:/myjar.jar";
String cpath = "de.mypath.MyClass";
			
File file = new File(dpath);
URL[] urls = { file.toURI().toURL() };
URLClassLoader cl = new URLClassLoader(urls);
			
Class a = Class.forName(cpath, true, cl);
Object o = a.newInstance();
MyInterface p = (MyInterface )o;
p.method();

Was mich noch interessiert:
Kann ich so einer Klasse (wenn ich eine Methode von Ihr aufrufe) verbieten, dass sie I/O-Zugriffe (Dateisystem/Netzwerk ect.) macht also dass die Methode sozusagen wie ein Applet in einer Sandbox abläuft und wenn doch solche Zugriffe gemacht werden tritt eine Exception auf.
 
M

maki

Gast
oh,
Class c = Class.forName("externerKlassenname mit Pfad");
geht bei Jar nicht?
Doch doch ;)

Aber Jar in Jar geht eben bei OSGi, und so hatte ich die Frage des TS verstanden:

>> "Funktioniert das auch wenn die Klasse in einem JAR-Archiv steckt und weitere Abhängigkeiten zu anderen Klassen dort hat?"

Wird wohl aber an meiner Interpretation liegen ;)

Man darf natürlich nicht verheimlichen dass man einen Satz Probleme gegen einen anderen Satz Probleme tauscht wenn man Frameworks einsetzt ;)

Jedenfalls ist die OSGi Plattform weit mehr als man mit 3 Zeilen Eigenbau selber machen könnte, darauf wollte ich hinaus.
 

Centai

Mitglied
So wie ich es verstanden habe, legt der SecurityManager Einstellungen für die ganze Applikation fest.

Ich möchte jedoch nur für bestimmte Methodenaufrufe Einschränkungen haben.

Also praktisch:

Code:
// hier habe ich die vollen Rechte 
public void meineMethode() {

// Dieser Methodenaufruf geschieht mit eingeschränkten Rechten
     fremdeMethode();

}
 

PrincE

Aktives Mitglied
ich lass dieses Thema nochmal aufleben weil ich auf die letzte Frage von Centai
keine Antwort gefunden habe
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
Fischkralle Ausführen von fremden Code Allgemeine Java-Themen 14
S Problem mit fremden Code Allgemeine Java-Themen 2
O Gucken, ob bereits Töne (von wild fremden Programmen) ausgegeben werden Allgemeine Java-Themen 5
M Unsicher, ob das Code richtig ist Allgemeine Java-Themen 4
schemil053 Methoden Code-Verbesserung Allgemeine Java-Themen 2
D Webarchive (war): Code verschleiern Allgemeine Java-Themen 7
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
Queenman Interface Mein Microsoft Visual Studio Code zeigt komische Dinge & Menüs an Allgemeine Java-Themen 9
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
berserkerdq2 Versteht jemand, was diese beiden Zahlen bei dem IJVM Code zu bedeuten haben? Allgemeine Java-Themen 10
OnDemand Releaseversion Tag in Code Allgemeine Java-Themen 5
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
F Code auslagern Allgemeine Java-Themen 5
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
V Hilfe mit Java Code Allgemeine Java-Themen 4
S Processing Java Code verstehen Allgemeine Java-Themen 4
A code wird nicht ausgeführt Allgemeine Java-Themen 3
B Bitte um Code Erklärung Allgemeine Java-Themen 5
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
OnDemand Clean Code oder Allgemeine Java-Themen 5
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
J Simple Date Format Alternativen bitte um Code Allgemeine Java-Themen 14
AGW in Java-Code plötzlich ein paar Wörter in Rot Allgemeine Java-Themen 2
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
H Precompilierten code ansehen Allgemeine Java-Themen 3
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
Drachenbauer Wie kann ich die menge an code reduzieren? Allgemeine Java-Themen 28
Thallius Warum ist dieser Code OS abhängig? Allgemeine Java-Themen 10
S Code Erklärung Allgemeine Java-Themen 21
B Pausem im Code Allgemeine Java-Themen 2
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
L Eclipse Java Code ausführen Allgemeine Java-Themen 18
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
F Code in Klassen bringen Allgemeine Java-Themen 4
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
F Klassen Spaghetti Code Vermeidung Allgemeine Java-Themen 16
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
J Code Page characters darstellen Allgemeine Java-Themen 12
J wie sollte man sinnvoll seinen Code aufteilen Allgemeine Java-Themen 6
I Python Code in Java Code Allgemeine Java-Themen 9
M Java (GUI) Code verdoppeln oder anzeige mehrmals anzeigen? Allgemeine Java-Themen 8
N Wie öffne ich einen runtergeladadenen Code in IntelliJ Allgemeine Java-Themen 3
R Fehler im Code Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 3
O Standard library nativer C code Allgemeine Java-Themen 1
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
S Java Editor Bekomme bei der Code-Vervollständigung die Zeichen ​ Allgemeine Java-Themen 3
N Morse Code decoder Allgemeine Java-Themen 9
O Erste Schritte Benzinverbrauch Code Hilfe Allgemeine Java-Themen 3
S Eclipse exit code 805306369 Allgemeine Java-Themen 1
Pataraca Vererbung Code einbinden Allgemeine Java-Themen 3
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
S Code 'innerhalb' des synchronen Bereichs einer BlockingQueue ausfuehren..? Allgemeine Java-Themen 7
F Verständlichkeitsproblem bei Java Code?! Allgemeine Java-Themen 2
G Eclipse Eclipse: Unreachable code Allgemeine Java-Themen 16
P Java Android Code in IOS compilieren? Allgemeine Java-Themen 9
C Code vereinfachen Allgemeine Java-Themen 2
T Hilfe bei Code Allgemeine Java-Themen 3
R Java-Code für folgene Aufgabe? Allgemeine Java-Themen 8
Prafy Best Practice Code Refaktorisierung Allgemeine Java-Themen 7
WetWer Was bedeutet/macht ein Exit-Code Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
perlenfischer1984 HTML Code decodieren Allgemeine Java-Themen 2
C ASCII-Code in Java Allgemeine Java-Themen 1
J Java-Code in DLL packen Allgemeine Java-Themen 5
J LWJGL 3 Error Code 1282 Allgemeine Java-Themen 4
0 Code startet nicht (Keine Warnung/Fehlermeldung) Allgemeine Java-Themen 4
A Frage zu meinem Code Allgemeine Java-Themen 2
B Code generierung Velocity Templates Telosys Allgemeine Java-Themen 1
E Fehlermeldung vor dem Programm code Allgemeine Java-Themen 1
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
wolfgang63 Code snipped Software Allgemeine Java-Themen 1
L Eclipse Editieren des Code templates für Override methods Allgemeine Java-Themen 2
J Java code "plugin" fähig machen Allgemeine Java-Themen 4
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
Thallius Wie verstecke ich meinen private Key am besten im Code? Allgemeine Java-Themen 10
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
N HTTP response code: 403 Allgemeine Java-Themen 3
D Code bitte mit 19 stelligen Zahlen kompatibel machen Allgemeine Java-Themen 5
D Java Compiler code referencen Allgemeine Java-Themen 0
B Fehler im Java-Code Allgemeine Java-Themen 4
A PHP-Code zu Java-Code Allgemeine Java-Themen 5
M Code läuft unter windows aber nicht unter Linux Allgemeine Java-Themen 6
X Was macht folgender Code!? Allgemeine Java-Themen 6
K Code zu einem Projekt entschluesseln Allgemeine Java-Themen 15
H Java Leistungssteigerung durch Code Anpassung Allgemeine Java-Themen 5
Fab1 Best Practice Vorgehensweise bestehenden Code/Programm verschönern Allgemeine Java-Themen 4
M Code optimieren Allgemeine Java-Themen 7
A jEditorPane Html Datei öffnen (code) Allgemeine Java-Themen 3
S EAN-Code Tabelle für CD's Allgemeine Java-Themen 2
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
J Erzeugung von Java-Code Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben