Unbekannte Main-Klasse ausführen um App zu starten

Veröffentlicht von

Hier mal ein Beispiel, wie man nur mit dem Kassen-Namen, eine neue Stage starten kann.

Start Klasse (erstellt die neue Stage)

package main;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Start {

	public static void main(String[] args) {
		try {
            Class<?> clazz = Class.forName("main.HelloWorld");
            for(Method m: clazz.getDeclaredMethods()){
                if(m.getName().equals("main")) {
                	m.invoke(null, new String[1]);
                }
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
	}
	
}
Code-Sprache: JavaScript (javascript)


neue Stage:

package main;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
 
public class HelloWorld extends Application {
    
    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {
 
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
        
        StackPane root = new StackPane();
        root.getChildren().add(btn);

 Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
 public static void main(String[] args) {
        launch(args);
    }
}Code-Sprache: JavaScript (javascript)

Hier noch mal ein Beispiel, wo die neue Stage aus einer „javafx.application.Application“ raus erstellt wird, da in einer Application keine zweiter „launch(args)“ ausgeführt werden darf.

JavaFX – Start Klasse (erstellt die neue Stage)

package app.test.unknowClass;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
 
public class Start extends Application {

    @Override
    public void start(Stage primaryStage) {
        
        Button btn = new Button();
        btn.setText("Start second Stage");
        btn.setOnAction(new EventHandler<ActionEvent>() {
 
            @Override
            public void handle(ActionEvent event) {
					try {
						String className = "app.test.unknowClass.HelloWorld";
						Class<?> clazz = Class.forName(className);
						Constructor<?> constructor = clazz.getConstructor();
						Object helloWorld = constructor.newInstance();
					} catch (ClassNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (NoSuchMethodException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (SecurityException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (InstantiationException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IllegalAccessException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IllegalArgumentException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (InvocationTargetException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
            }
        });
        
        StackPane root = new StackPane();
        root.getChildren().add(btn);
 
        Scene scene = new Scene(root, 300, 250);
 
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
	
	
	public static void main(String[] args) {
		launch(args);
	}
}
Code-Sprache: JavaScript (javascript)

neue Stage:

package app.test.unknowClass;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
 
public class HelloWorld extends Application {
	
	public HelloWorld() {
		System.out.println("HelloWorld()");
		Platform.runLater(() -> {           
		           start(new Stage());		       
		 });
	}
	
    @Override
    public void start(Stage primaryStage) {
    	System.out.println("start()");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {
 
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
        
        StackPane root = new StackPane();
        root.getChildren().add(btn);
 
 Scene scene = new Scene(root, 300, 250);
 
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
 public static void main(String[] args) {
        launch(args);
    }
}
Code-Sprache: JavaScript (javascript)