Sto usando la versione corrente di SWT per creare le mie applicazioni e voglio eseguirle con Mac OS X (Yosemite).
Il mio problema ora è che non sono in grado di acquisire i clic sugli elementi "Informazioni", "Preferenze" e "Esci" che sono stati aggiunti automaticamente alla mia applicazione.
Ho già cercato molto e ho trovato la seguente classe che mi sembra molto utile per me http://www.transparentech.com/files/CocoaUIEnhancer.java.Cattura about, preferences ed esci dal menu
E questo è il mio codice per inizializzarlo:
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
public class Test {
private Display display;
private Shell shell;
public Test(Display display) {
this.display = display;
initUI();
}
public void open() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
private void initUI() {
shell = new Shell(display);
shell.setSize(808, 599);
shell.setText("Test");
AboutHandler aboutHandler = new AboutHandler();
PreferencesHandler preferencesHandler = new PreferencesHandler();
QuitHandler quitHandler = new QuitHandler();
CocoaUIEnhancer uienhancer = new CocoaUIEnhancer("Test");
uienhancer.hookApplicationMenu(display, quitHandler, aboutHandler, preferencesHandler);
}
private class AboutHandler implements Listener {
public void handleEvent(Event e) {
}
}
private class PreferencesHandler implements Listener {
public void handleEvent(Event e) {
}
}
private class QuitHandler implements Listener {
public void handleEvent(Event e) {
}
}
}
posso compilarlo senza errori, ma se comincio il programma, allora mi metterò la seguente eccezione:
Exception in thread "main" java.lang.NoSuchMethodError: actionProc
at org.eclipse.swt.internal.Callback.bind(Native Method)
at org.eclipse.swt.internal.Callback.<init>(Unknown Source)
at org.eclipse.swt.internal.Callback.<init>(Unknown Source)
at org.eclipse.swt.internal.Callback.<init>(Unknown Source)
at CocoaUIEnhancer.initialize(CocoaUIEnhancer.java:124)
at CocoaUIEnhancer.hookApplicationMenu(CocoaUIEnhancer.java:92)
at Test.initUI(Test.java:50)
at Test.<init>(Test.java:18)
E 'probabilmente un errore nelle librerie native ma non riesco a capirlo!
Una soluzione perfetta: semplice e immediata! Anche le voci del menu possono essere rinominate. Ma per quanto riguarda l'elemento "SWT"? Come cambiare il suo testo? Display.setAppName non funziona per me a causa di un motivo sconosciuto. Ci sono altri modi per farlo? –
Il mio errore. Display.setAppName() funziona correttamente. Non avrei dovuto fare nulla con il display prima di chiamare setAppName(). Doveva essere la prima riga del mio codice. –
@ m.vokhm Sì, stavo per pubblicarlo. Sono contento che stia lavorando per te ora. – Baz