Ich werde versuchen, dies so gut wie möglich zu formulieren. Ich habe ein Programm, das eine API-ähnliche Funktionalität hat - es verwendet Reflektion, um Methoden innerhalb einer Klasse dynamisch aufzurufen. In diesem Fall:Java-Programm mit einer Klasse aus einer JAR-Datei
Server.java
public static void main(String[] args) {
Class<?> clazz = Class.forName("DiHandler");
StHandler out = (StHandler) clazz.newInstance();
out.read();
}
DiHandler.java
// implements StHandler
import edu.ds.*;
public void read() {
Ds aType = new Ds();
aType = "134";
}
So hat DiHandler eine Methode read(), die alles enthalten kann, spielt es keine Rolle zu Server.java nach der Kompilierzeit.
Mein Problem ist: DiHandler.java verwendet die Klasse Ds aus einer JAR-Datei. Wenn ich an DiHandler.java in Eclipse arbeite (in einem separaten Projekt von dem Projekt Server.java ist in) kann ich diese JAR ohne ein Problem hinzufügen. Aber wenn ich DiHandler.class verschiebe, nachdem es kompiliert wurde, um von Server.class verwendet zu werden, wie kann es noch die JAR-Datei benutzen?
Ich hoffe, dass dies einen Sinn ergibt, ich nehme an, eine andere Möglichkeit wäre, wie kann ich DiHandler erlauben, eine Klasse aus der JAR aufzurufen, ohne den Klassenpfad zu bearbeiten?
Vielen Dank im Voraus und Entschuldigung für jede Verwirrung oder schlechte Phrasierung, ich kann nur Dank und das übliche Angebot eines Pint für jegliche Hilfe anbieten.
M
'STHandler out = (StHandler) clazz;' - Ich hoffe, dass Sie nicht versuchen, einen 'StHandler' zu instanziieren. –
Sie könnten den zusätzlichen Klassenpfad entweder in der Befehlszeile oder der JAR-Manifest-Datei angeben – dvhh
Entschuldigung, ich habe einen Teil verpasst, der jetzt korrigiert werden sollte. :) – Myn