Externe Java-Programme ausführen

blaiso

Grünschnabel
Hallo,

Ich möchte die Main-Methode eines anderen Programms aufrufen.
Wie kann ich das machen?

Ich habe zum Beispiel zwei Möglichkeiten:

1 Alternative) Mit Paket java.lang.Reflect.*;

import java.lang.reflect.*;
public class InvokeMain
{
public static void main( String args[] ) throws Exception
{
String nargs[ ] = new String[ ] { "-option", "Parameter" };

Method methode = Class.forName( "HashMain" ).getMethod( "main" ,
new Class[ ] {nargs.getClass()}) ;

methode.invoke( null, new Object[]{nargs} );
}
}
class HasMain
{
public static void main( String args[ ] )
{
System.out.println( "Hier bin ich." );
}
}

1.1) Was solll ich als Parameter geben:

String nargs[ ] = new String[ ] { "-option", "Parameter" };.

1.2) Wenn die Klasse in einem anderen Verzeichnis oder Paket ist, was soll ich als Path geben?

2 Alternative) Mit der ClassLoader und die invoke-Methode

import java.io.*;
import java.lang.reflect.*;
import java.net.*;
import com.sun.tools.javac.Main;

public static void main(String [] args)
{
int result = Main.compiler(new String[]{"HashMain.java"});
try
{
URLClassLoader ucl = new URLClassLoader(new URL[]{new File"c:/".toURL()});
Class clazz = ucl.loadClass("HashMain");
Object o = class.newInstance();
Method m = clazz.getMethod("methodename",new Class[0]);
m.invoke(o,new Object[o]);
}
catch ..........
catch............
}

2.1 Das funktioniert für Objektmethoden, aber ich möchte die Main-Methode aufrufen.
Dann geht das nicht mehr.


Gruß
Blaise

Mein Mail: tchatoblaise@yahoo.fr
 
Zuletzt bearbeitet:
Hallo!

Wenn du static Methoden aufrufen willst kannst du bei der invoke Methode "null" als ersten
Parameter übergeben.

Code:
 package de.tutorials;
 
 import java.util.Arrays;
 
 public class Main {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		System.out.println("Foo args:" +  Arrays.asList(args));
 	}
 
 }

Code:
 package de.tutorials;
 
 import java.io.File;
 import java.net.URL;
 import java.net.URLClassLoader;
 
 public class MainExecutionExample {
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		// 1
 		Main.main(new String[] { "a=1", "foo=bar" });
 
 		// 2
 		try {
 			Main.class.getMethod("main", new Class[] { String[].class })
 					.invoke(null,
 		    		    	new Object[] { new String[] { "a=1", "foo=bar" } });
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 
 		//3 (de.tutorials.Main liegt in foo.jar auf C:/ )
 		try {
 			new URLClassLoader(new URL[] { new File("c:/foo.jar").toURL() })
 		    	    .loadClass("de.tutorials.Main").getMethod("main",
 		    		    	new Class[] { String[].class }).invoke(null,
 		    		    	new Object[] { new String[] { "a=1", "foo=bar" } });
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 		
 		//...
 	}
 }

gruß Tom
 
Hallo Thomas,

ich möchte mich bei dir für deine Hilfe bedanken.
Es hat geklappt, wie ich mir das gewünscht hatte.
Nochmals Vielen Dank.

Gruß
Blaise
 

Neue Beiträge

Zurück