Ich bin Neuling in der Java Welt und möchte gern ein Steuerprogramm schreiben das eine Art Container für einen Steuerrechner bereitstellt.
Ich komme eigentlich aus der C++ Welt ( Windows und Linux) und suche eine Möglichkeit eine externe Java Funktion aus einer Art "DLL" aufzurufen. Ich möchte eine Library laden und der Funktion Parameter übergeben die die Kontrollfunktion dann auch verändern können muss. In C C++ würde ich also eine DLL Funktion auifrufen und der Funktion Pointer auf die Variablen übergeben. Geht das auch in Java ?
Wenn damit gemeint ist aus Java auf Java Methode (nicht aus C++ eine Java Funktion nutzen) zu zugreifen:
In Java kann man fremde Klasse (.class) bzw. ganze Archive (.jar) beliebig einbinden. Die Klassen bzw. Archive müssen nur über den CLASSPATH zu finden sein.
Ich möchte eine Library laden und der Funktion Parameter übergeben die die Kontrollfunktion dann auch verändern können muss. In C C++ würde ich also eine DLL Funktion auifrufen und der Funktion Pointer auf die Variablen übergeben. Geht das auch in Java ?
Ich brauche einfach eine "Methode" die in meiner Applikation per Textfeld und Funktionsname eingetragen wird und dann von meiner Software aufgerufen werden kann. Die Variablenfrage kann ich auch global lösen . Ich frage mich nur ob es möglich ist eine Funktion extern zu überladen (ohne das der Benutzer Java programmieren muss) Ich stelle mir eine von Programmierern in Jave zu schreibende Bibliothek vor die ein "Nicht Porgrammierer einfach per (Libray Name, Funtionsname ) aufrufen kann
Ich brauche einfach eine "Methode" die in meiner Applikation per Textfeld und Funktionsname eingetragen wird und dann von meiner Software aufgerufen werden kann.
Was meinst Du mit "überladen"? Eine bestehende Methode von "aussen" - ohne von der Klasse zu erben und die Methode darin zu überschreiben - zu überladen wird schwierig.
Ich schreibe eine Software die Grundfunktionen bereitstellt. Es sollte so etwas wie ein "Plugin" möglich sein die Standard Regelfunktion zu überschreiben ( Bitte nicht im Klassensinne verstehen ) . Es sollte also die Möglichkeit bestehen gezielt eine bestehende Funktion zu ändern .
Ein Programmierer schreibt also eine Bibliothek mit der zu überschreibenden Methode. Meine Software sollte dann die möglichkeit haben die von mir geschriebene Grundroutine durch die Java Routine zu ersetzen indem die Blibliothek durch den Namen und die Funktion angegeben wird. Der Sinn ist es meine Software extern erweitern zu können ohne das der Anwender Java programmieren muss , jedoch einem Programmierer die Mglichkeit dazu gegeben wird.
In C++ würde ich das durch LoadLibrary und einen Functon Call auf den Funktionspointer machen
Vielleicht bin ich zusehr in der C Welt verhaftet habe aber eben mangels Erfahrung noch nicht die Begrifflichkeit von Java
Du suchst definitiv Relection. Mit Reflection kannst du dir u. a. sämtliche Methoden einer Klasse (auch die privaten) holen und diese nach diversen Parametern (Name, Parameter) durchsuchen und aufrufen. Problematisch werden könnte es erst bei der Übergabe der Parameter, da diese im entsprechenden Typ vorliegen müssen.
Fragen wir mal anders: wozu brauchst du das, was soll das werden?
Edit: Da letzteres ja bereits beantwortet wurde: du scheinst eher ein Plugin-System zu suchen. OSGi ist mittlerweile ein Quasi-Standard und ziemlich mächtig - dafür aber auch dementsprechend komplex. Das "Verstecken" von OSGi vor dem Benutzer liegt allerdings in deinem Aufgabenbereich. Machst du es richtig (siehe z. B. Eclipse), sollte es für Nutzer kein Problem sein, zusätzliche Funktionen über Plugins hinzufügen zu können, ohne über Programmierkenntnisse zu verfügen.
Ansonsten könntest du ein - sehr einfaches - Plugin-System auch selbst schreiben. Wir hatten dazu schon mehrere Threads. Prinzipiell stellst du einfach ein entsprechendes Interface bereit, welches Clients erweitern. Geladen werden die Plugins in aller Regel dann mit einem eigenen ClassLoader bzw. einem URLClassLoader.
Hintergrund ist ein Android Projekt das über ein externes Board per USB Sensoren und Aktoren anfragen und beeinflussen kann. Sollte jemanden die Standardfunktion nicht so wollen wie ich es entwickelt habe möchte ich den Sourcecode eben dieser Funktion offen legen um den externen Programmierern zwar die Gurndfunktion meiner Software zu ermöglichen die Details aber im Notfall selbst regeln zu können . Damit halte ich die Software offen .
Wer jedoch die Sofware nur "nutzen" will könnte sich dann extern Hilfe holen die gewünschte Funktion gemäß seiner Wünsche und Bedürfnisse zu ändern . In diesem Fall würde also die Regelungsfunktion"überladen".