GraphicsApp API
Eine überarbeitete und angepasste Variante der originalen GraphicsApp-Umgebung
GraphicsAppLauncher.java
gehe zur Dokumentation dieser Datei
1package de.ur.mi.oop.launcher;
2
3import de.ur.mi.oop.app.AppManager;
4import de.ur.mi.oop.app.GraphicsApp;
5import de.ur.mi.oop.app.Config;
6
7import java.lang.reflect.InvocationTargetException;
8
9/**
10 * Der GraphicsAppLauncher startet eine GraphicsApp-Anwendung
11 */
12public class GraphicsAppLauncher {
13
14 public static final String PACKAGE_DELIMITER = ".";
15
16 public static void launch() {
17 // TODO Find way to move stack tracing to getGraphicsAppInstance() to reduce load time
18 StackTraceElement[] stackTraceElements = new Exception().getStackTrace();
19 String launcherName = stackTraceElements[stackTraceElements.length - 1].getClassName();
20 if(launcherName.contains(PACKAGE_DELIMITER)) {
21 launcherName = launcherName.substring(launcherName.lastIndexOf(PACKAGE_DELIMITER)+1);
22 }
23 launch(launcherName);
24 }
25
26 public static void launch(String appName) {
27 Config config = new Config();
28 launch(appName, config);
29 }
30
31 public static void launch(String appName, Config config) {
32 // Try to enable GPU rendering
33 System.setProperty("sun.java2d.opengl", "true");
34 try {
35 config.setTitle(appName);
36 GraphicsApp app = getGraphicsAppInstance(appName);
37 AppManager appManager = new AppManager(app, config);
38 config.setListener(appManager);
39 app.setConfig(config);
40 app.initialize(); // calls GraphicsApp.init once
41 appManager.start(); // starts loop to call GraphicsApp.draw repeatedly
42 } catch (Exception e) {
43 e.printStackTrace();
44 }
45 }
46
47 private static GraphicsApp getGraphicsAppInstance(String appName) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
48 StackTraceElement[] stackTraceElements = new Exception().getStackTrace();
49 String launcherName = stackTraceElements[stackTraceElements.length - 1].getClassName();
50 String className;
51 int packageNameCutOffIndex = launcherName.lastIndexOf(PACKAGE_DELIMITER);
52 // If Launcher was called from GraphicsApp
53 if(packageNameCutOffIndex == -1) {
54 className = appName;
55 // If Launcher was called from outside GraphicsApp
56 } else {
57 String packageName = launcherName.substring(0, launcherName.lastIndexOf(PACKAGE_DELIMITER));
58 className = packageName + PACKAGE_DELIMITER + appName;
59 }
60 Class<?> appClass = Class.forName(className);
61 return (GraphicsApp) appClass.getConstructor().newInstance();
62 }
63}
void setTitle(String title)
Definition: Config.java:90
void setListener(ConfigChangeListener listener)
Definition: Config.java:35
abstract void initialize()
static void launch(String appName, Config config)