Hallo,
für mein Java-Programm habe ich für Mac OS X spezielle Methoden, um das Apple-Menü nutzen zu können. Allerdings kommt offensichtlich auf nicht-OS-X-Systemen eine Fehlermeldung:
Im Konstruktor meiner Main-Klasse frage ich die OS-Version folgendermaßen ab und initialisiere bei Bedarf einen Application-Listener für Mac OS X:
Den Source für die Methode setupMacOSX... habe ich in einem Blog-Eintrag gefunden und nach eigenen Bedürfnissen angepasst:
Wie kann ich diese Fehlermeldung "umgehen" bzw. an welcher Stelle mit try/catch abfangen?
für mein Java-Programm habe ich für Mac OS X spezielle Methoden, um das Apple-Menü nutzen zu können. Allerdings kommt offensichtlich auf nicht-OS-X-Systemen eine Fehlermeldung:
~$ Zettelkasten
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError:
com/apple/eawt/ApplicationListener
at zettelkasten.ZettelkastenApp.startup(ZettelkastenApp.java:39)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException:
com.apple.eawt.ApplicationListener
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 10 more
Im Konstruktor meiner Main-Klasse frage ich die OS-Version folgendermaßen ab und initialisiere bei Bedarf einen Application-Listener für Mac OS X:
Code:
IS_MAC = System.getProperty("os.name").toLowerCase().startsWith("mac os");
IS_MAC_AQUA = IS_MAC & settings.getLookAndFeel().contains("Aqua");
...
// when we have a mac, we need an extra quit-hanlder...
if (IS_MAC) setupMacOSXApplicationListener();
Den Source für die Methode setupMacOSX... habe ich in einem Blog-Eintrag gefunden und nach eigenen Bedürfnissen angepasst:
Code:
/**
* This is an application listener that is initialised when running the program
* on mac os x. by using this appListener, we can use the typical apple-menu bar
* which provides own about, preferences and quit-menu-items.
*/
private void setupMacOSXApplicationListener() {
try {
final com.apple.eawt.Application application = com.apple.eawt.Application.getApplication();
// damit ein about-Menü erscheint
application.setEnabledAboutMenu(true);
// preference pane
application.addPreferencesMenuItem();
application.setEnabledPreferencesMenu(true);
application.addApplicationListener(new com.apple.eawt.ApplicationListener() {
// about dialog
@Override
public void handleAbout(com.apple.eawt.ApplicationEvent ae) {
showAboutBox();
ae.setHandled(true);
}
@Override
public void handleOpenApplication(com.apple.eawt.ApplicationEvent ae) {
}
@Override
public void handlePreferences(com.apple.eawt.ApplicationEvent ae) {
settingsWindow();
}
@Override
public void handlePrintFile(com.apple.eawt.ApplicationEvent ae) {
}
@Override
public void handleQuit(com.apple.eawt.ApplicationEvent ae) {
ZettelkastenApp.getApplication().exit();
}
@Override
public void handleReOpenApplication(com.apple.eawt.ApplicationEvent ae) {
}
@Override
public void handleOpenFile(com.apple.eawt.ApplicationEvent ae) {
}
});
} catch (Throwable e) {}
}
Wie kann ich diese Fehlermeldung "umgehen" bzw. an welcher Stelle mit try/catch abfangen?