Files
i2p.i2p/apps/desktopgui/src/desktopgui/Main.java
mathiasdm 495558a949 New application for I2P: desktopgui. Should eventually replace systray, and have more functionality.
To use the application, you need to (by default) add the following to clients.config :
# desktopgui
clientApp.6.args=
clientApp.6.delay=5
clientApp.6.main=desktopgui.Main
clientApp.6.name=desktopgui
clientApp.6.startOnLoad=true
2009-04-06 17:53:32 +00:00

110 lines
3.5 KiB
Java

package desktopgui;
/*
* Main.java
*/
import gui.Tray;
import gui.SpeedSelector;
import java.awt.SystemTray;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;
import persistence.PropertyManager;
/**
* The main class of the application.
*/
public class Main extends SingleFrameApplication {
/**
* At startup create and show the main frame of the application.
*/
@Override protected void startup() {
Properties props = PropertyManager.loadProps();
//First load: present screen with information (to help choose I2P settings)
if(props.getProperty(FIRSTLOAD).equals("true")) {
props.setProperty(FIRSTLOAD, "false");
PropertyManager.saveProps(props);
new SpeedSelector(); //Start speed selector GUI
}
if(SystemTray.isSupported()) {
tray = new Tray();
}
else { //Alternative if SystemTray is not supported on the platform
}
}
/**
* This method is to initialize the specified window by injecting resources.
* Windows shown in our application come fully initialized from the GUI
* builder, so this additional configuration is not needed.
*/
@Override protected void configureWindow(java.awt.Window root) {
}
/**
* A convenient static getter for the application instance.
* @return the instance of Main
*/
public static Main getApplication() {
return Application.getInstance(Main.class);
}
/**
* Main method launching the application.
*/
public static void main(String[] args) {
System.setProperty("java.awt.headless", "false"); //Make sure I2P is running in GUI mode for our application
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
Main main = getApplication();
main.launchForeverLoop();
main.startup();
}
/**
* Avoids the app terminating because no Window is opened anymore.
* More info: http://java.sun.com/javase/6/docs/api/java/awt/doc-files/AWTThreadIssues.html#Autoshutdown
*/
public void launchForeverLoop() {
Runnable r = new Runnable() {
public void run() {
try {
Object o = new Object();
synchronized (o) {
o.wait();
}
} catch (InterruptedException ie) {
}
}
};
Thread t = new Thread(r);
t.setDaemon(false);
t.start();
}
private Tray tray = null;
///Indicates if this is the first time the application loads
///(is only true at the very start of loading the first time!)
private static final String FIRSTLOAD = "firstLoad";
}