fuin.org
Small Open Source Java Tools and Libraries
AppStarter
The "AppStarter" is a small application that starts any application or applet by injecting the necessary jars, directories with jars or classpath directories into the classpath.Screenshot:
Try it with Webstart:
Example source:
package org.fuin.utils4swing.appstarter;
import javax.swing.SwingUtilities;
import org.fuin.utils4swing.common.Utils4Swing;
/**
* Shows the different start options for the "AppStarter".
*/
public final class Examples {
/**
* Private constructor.
*/
private Examples() {
throw new UnsupportedOperationException(
"Creating an instance is not allowed (utility class!)!");
}
/**
* Create a pre-populated configuration for the Sun "password store" swing
* example.
*
* @return New config instance.
*/
private static AppStarterConfig createExampleConfig() {
// Create a configuration and set title for the "AppStarter" frame
final AppStarterConfig config = new AppStarterConfig();
config.setFrameTitle("MyAppStarter");
// We want to start a "standalone" Java app
config.setStartType(StartType.APPLICATION);
// Add a single jar, a directory with libraries and a binary directory
// to the CP
config.addClasspathEntry(new ClasspathJarFileEntry(
"C:\\swing-examples\\password-store-example.jar"));
config.addClasspathEntry(new ClasspathJarsDirEntry(
"C:\\swing-examples\\lib"));
config.addClasspathEntry(new ClasspathBinDirEntry(
"C:\\swing-examples\\classes"));
// Set the name of the main class
config.setMainClass("passwordstore.ui.PasswordStoreApplication");
// Add some (in case of the "PasswordStoreApplication" never used)
// command line arguments
config.addArgument("useless");
config.addArgument("dummy");
config.addArgument("arguments");
return config;
}
/**
* Start the "AppStarter" with a pre-populated config screen.
*/
private static void prepopulateConfigScreen() {
// Create a configuration and set title for the "AppStarter" frame
final AppStarterConfig config = createExampleConfig();
// Create a listener to be informed when the target application was
// started
final AppStarterListener listener = new AppStarterListener() {
public void appStarted() {
System.out
.println("The 3rd Party application has just started!");
}
};
// Start the configuration screen pre-populated with above config
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Utils4Swing.initSystemLookAndFeel();
(new AppStarter(config, listener)).execute();
}
});
}
/**
* Start the "AppStarter" with an empty config screen.
*/
private static void startEmptyConfigScreen() {
// Create a configuration and set title for the "AppStarter" frame
final AppStarterConfig config = new AppStarterConfig();
config.setFrameTitle("MyAppStarter");
// Create a listener to be informed when the target application was
// started
final AppStarterListener listener = new AppStarterListener() {
public void appStarted() {
System.out
.println("The 3rd Party application has just started!");
}
};
// Start the configuration screen
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Utils4Swing.initSystemLookAndFeel();
(new AppStarter(config, listener)).execute();
}
});
}
/**
* Use the "AppStarter" without config screen to start the target
* application.
*/
private static void startWithoutConfigScreen() {
// Create a configuration and set title for the "AppStarter" frame
final AppStarterConfig config = createExampleConfig();
// Create a listener to be informed when the target application was
// started
final AppStarterListener listener = new AppStarterListener() {
public void appStarted() {
System.out
.println("The 3rd Party application has just started!");
}
};
// Start the target application
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Utils4Swing.initSystemLookAndFeel();
try {
AppStarter.start(config.getStartType(), config
.getClassPath(), config.getMainClass(), config
.getArguments(), listener);
} catch (StartApplicationException e) {
throw new RuntimeException(
"Sorry, starting the target app failed!", e);
}
}
});
}
/**
* Main method to start the "AppStarter" with different modes.
*
* @param args
* Command line arguments. Only argument is the mode:
* "prepopulate", "start" or NULL.
*/
public static void main(final String[] args) {
if ((args == null) || (args.length == 0)) {
startEmptyConfigScreen();
} else {
if (args[0].equalsIgnoreCase("prepopulate")) {
prepopulateConfigScreen();
} else if (args[0].equalsIgnoreCase("start")) {
startWithoutConfigScreen();
} else {
startEmptyConfigScreen();
}
}
}
}