Java SWT Arm事件不工作

Java SWT Arm事件不工作,java,events,swt,listener,Java,Events,Swt,Listener,我正在开发一个程序,需要知道菜单何时展开,以便更新其内容(它列出了当前可用的串行端口)。我正在使用SWT并为Arm事件的父菜单项设置侦听器 我创建了一个演示程序来展示我想要的东西 package test.window; import org.eclipse.swt.SWT; public class Test { protected Shell shell; /** * Launch the application. * @param args */ public static

我正在开发一个程序,需要知道菜单何时展开,以便更新其内容(它列出了当前可用的串行端口)。我正在使用SWT并为Arm事件的父菜单项设置侦听器

我创建了一个演示程序来展示我想要的东西

package test.window;

import org.eclipse.swt.SWT;

public class Test {

protected Shell shell;

/**
 * Launch the application.
 * @param args
 */
public static void main(String[] args) {
    try {
        Test window = new Test();
        window.open();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Open the window.
 */
public void open() {
    Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

/**
 * Create contents of the window.
 */
protected void createContents() {
    shell = new Shell();
    shell.setSize(450, 300);
    shell.setText("SWT Application");

    Menu menu = new Menu(shell, SWT.BAR);
    shell.setMenuBar(menu);

    MenuItem mntmNewSubmenu = new MenuItem(menu, SWT.CASCADE);
    mntmNewSubmenu.setText("New SubMenu");

    Menu menu_1 = new Menu(mntmNewSubmenu);
    mntmNewSubmenu.setMenu(menu_1);

    MenuItem mntmItem = new MenuItem(menu_1, SWT.NONE);
    mntmItem.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            System.out.println("Item 1 selected");
        }
    });
    mntmItem.setText("Item 1");

    MenuItem mntmPorts = new MenuItem(menu_1, SWT.CASCADE);
    mntmPorts.addArmListener(new ArmListener() {
        public void widgetArmed(ArmEvent arg0) {
            System.out.println("Ports armed");
        }
    });
    mntmPorts.setText("Ports");

    Menu menu_2 = new Menu(mntmPorts);
    mntmPorts.setMenu(menu_2);

    MenuItem mntmPort = new MenuItem(menu_2, SWT.NONE);
    mntmPort.addArmListener(new ArmListener() {
        public void widgetArmed(ArmEvent arg0) {
            System.out.println("Port 1 armed");
        }
    });
    mntmPort.setText("Port 1");
    mntmPort.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            System.out.println("Port 1 selected");
        }
    });

    MenuItem mntmPort_1 = new MenuItem(menu_2, SWT.NONE);
    mntmPort_1.setText("Port 2");
    mntmPort_1.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            System.out.println("Port 2 selected");
        }
    });

    MenuItem mntmItem_1 = new MenuItem(menu_1, SWT.NONE);
    mntmItem_1.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            System.out.println("Item 2 selected");
        }
    });
    mntmItem_1.setText("Item 2");

}
}
我希望在显示菜单项“Port 1”和“Port 2”之前打印“Ports armed”。这将使我的程序有机会改变“端口1”和“端口2”实际上是什么

对我来说,“端口已启用”从来都不是打印机(也不是“端口1已启用”),但单击项目时会触发选择事件


我正在Ubuntu 13.04上测试这一点。

虽然我从未启动过Arm事件,但对我来说,这场表演活动已经足够好了


在这里可以找到Show、Hide和Arm侦听器的示例。奇怪的是,我在Ubuntu 13.04上使用了
org.eclipse.swt.gtk.linux-3.3.0-v3346
。我从4.3开始,试了3.7和3.3罐,但都没有用。我从下载了SWT二进制文件,并在eclipse中将JAR添加到我的构建路径中。还有什么需要做的吗?不知道,可以使用4.3版本,也可能是Java版本吗?我使用的是1.7OpenJDK。我尝试了OpenJDK1.7,效果良好