Tôi đang sử dụng phiên bản SWT hiện tại để xây dựng các ứng dụng của mình và tôi muốn chạy nó dưới Mac OS X (Yosemite).
Vấn đề của tôi hiện tại là tôi không thể chụp được các nhấp chuột vào các mục menu "Giới thiệu", "Tùy chọn" và "Thoát" được tự động thêm vào ứng dụng của tôi.
Tôi đã tìm kiếm rất nhiều và tìm thấy lớp học sau có vẻ rất hữu ích đối với tôi http://www.transparentech.com/files/CocoaUIEnhancer.java.Chụp, tùy chọn và thoát các mục menu
Và đó là mã của tôi để khởi tạo nó:
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) {
}
}
}
tôi có thể biên dịch nó mà không có bất kỳ lỗi nào nhưng nếu tôi bắt đầu chương trình sau đó tôi sẽ nhận được ngoại lệ sau đây:
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)
Đây có thể là một lỗi trong các thư viện gốc nhưng tôi không thể tìm ra!
Một giải pháp hoàn hảo - đơn giản và dễ hiểu! Các mục menu cũng có thể được đổi tên. Nhưng những gì về mục "SWT"? Làm thế nào để thay đổi văn bản của nó? Display.setAppName không hoạt động đối với tôi do một số lý do không xác định. Có cách nào khác để làm điều đó không? –
Sai lầm của tôi. Display.setAppName() hoạt động tốt. Tôi chỉ không nên làm bất cứ điều gì với màn hình trước khi tôi gọi setAppName(). Nó phải là dòng đầu tiên trong mã của tôi. –
@ m.vokhm Yeah, tôi vừa mới đăng bài đó. Vui mừng nó làm việc cho bạn bây giờ. – Baz