2016-03-21 24 views
1

Ich habe einen Jar-Namen MyJar.jar, der MyFinder.class enthält. Diese Klasse enthält eine nicht statische Funktion namens myFind(). Ich möchte myFind() von einem Shell-Skript aufrufen.Aufruf einer Funktion in einer JAR-Datei aus einer Skriptdatei

weiß ich schon, wie mit einem statischen main() in einer JAR-Datei mit einer bestimmten Klasse nennen:

java -jar MyJar.jar MyFinder.class

ich einen Befehl benötigen, wie oben denen

eine nicht statische Funktion aufrufen können

Hauptmotiv:

Ich habe eine Skriptdatei und nur ein Glas. In dem Skript möchte ich Funktionsaufrufe auf bestimmte Zeit basieren. Ich kann das im Inneren des Glases selbst programmieren. Aber wenn sich die Anforderung später ändert, muss ich das Jar bearbeiten. Ich möchte nicht dies geschehen kann und ich möchte nur die Skriptdatei bearbeiten dann

+1

Aufruf einer nicht statischen Funktion wäre nicht sinnvoll, weil sie zu einer Instanz einer Klasse gehören, die Sie nicht haben, wenn Sie eine Funktion in einer Klasse als Startpunkt zu starten versuchen , – SomeJavaGuy

+0

1) ist es möglich 2) wenn nicht möglich: sollte ich die Funktion auf statisch ändern und annehmen, dass es geändert wird, kann ich zwei statische Methoden in einer Klasse haben, die unabhängig aufgerufen werden kann – sujit

+0

Die Lösung von Nfechner ist die einzig sinnvolle meine Augen. Vielleicht möchten Sie überprüfen, was das Schlüsselwort [statisch] (http://stackoverflow.com/questions/413898/what-does-the-static-keyword-do-in-a-class) tut, weil es wie Sie scheint Ich weiß es nicht. – SomeJavaGuy

Antwort

1

Der einzige Weg, das zu tun, ist ein Hauptverfahren in der Klasse gehören, die die gewünschte Methode aufruft:

public static void main(String[] args) { 
    MyFinder myFinder = new MyFinder(); 
    myFinder.myFind(); 
} 

edit: eigentlich ist es nicht der einzige Weg, sondern wirklich die einzige praktische ..

edit 2: Wenn Sie mehr als eine Methode haben zu nennen, von Hand ein Parameter in die Methode:

public static void main(String[] args) { 
    MyFinder myFinder = new MyFinder(); 
    if (args.length > 0) { 
    switch (args[0]) { 
     case "myFind": 
     myFinder.myFind(); 
     break; 
     case "methodB": 
     myFinder.methodB(); 
     break; 
     default: 
     System.err.println("Unkown target"); 
     break; 
    } 
    } 
} 

Rufen Sie es so: java -jar MyJar.jar MyFinder.class myFind

Verwandte Themen