Java SWT文件对话框打开问题

Java SWT文件对话框打开问题,java,swt,filedialog,Java,Swt,Filedialog,我需要打开一个文件对话框,在Windows7 Home上使用Java7使用SWT打开一个文件。我需要在按下BrowseBtn1按钮(SWT)时打开此文件对话框。我正在为此使用addSelectionListener。这是正确的方法吗?如果是,为什么我的对话框在没有遇到任何运行时错误时无法打开。我根本不使用AWT,只使用SWT import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; import org.eclipse.swt.wid

我需要打开一个文件对话框,在Windows7 Home上使用Java7使用SWT打开一个文件。我需要在按下BrowseBtn1按钮(SWT)时打开此文件对话框。我正在为此使用addSelectionListener。这是正确的方法吗?如果是,为什么我的对话框在没有遇到任何运行时错误时无法打开。我根本不使用AWT,只使用SWT

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.*;

public class MySwtApp {
    public static Display display;
    public static Shell shell;

    public static void main(String[] args) {

        display = new Display ();
        shell = new Shell (display);
        shell.setText("MY TITLE");
        GridLayout gridLayout = new GridLayout (3, false);
        shell.setLayout (gridLayout);

        Label Label1 = new Label (shell, SWT.NONE);
        Label1.setText ("Select Message ");
        GridData data = new GridData (200, SWT.DEFAULT);
        Label1.setLayoutData (data);

        Combo Combo1 = new Combo (shell, SWT.NONE);
        Combo1.setItems (new String [] {"Option A", 
                "Option B"});
        // CaseStudyCombo.setText ("CaseStudyCombo");
        data = new GridData (200, SWT.DEFAULT);
        Combo1.setLayoutData (data);
        Combo1.addListener (SWT.DefaultSelection, new Listener () {
            public void handleEvent (Event e) {
                System.out.println (e.widget + " - Default Selection");
            }
        });

        Label emptyLabel = new Label (shell, SWT.NONE);
        emptyLabel.setText ("");
        data = new GridData (50, SWT.DEFAULT);
        emptyLabel.setLayoutData (data);

        Label Label2 = new Label (shell, SWT.NONE);
        Label2.setText ("Next Message: ");
        data = new GridData (200, SWT.DEFAULT);
        Label2.setLayoutData (data);

        final Text text4 = new Text (shell, SWT.BORDER);
        text4.setText ("");
        data = new GridData (215, SWT.DEFAULT);
        text4.setLayoutData (data);

        Button BrowseBtn1 = new Button (shell, SWT.PUSH);
        BrowseBtn1.setText ("Browse");
        data = new GridData (80, SWT.DEFAULT);
        BrowseBtn1.setLayoutData (data);
        BrowseBtn1.addSelectionListener(new SelectionAdapter() {
            String result = "";
            public void WidgetSelected(SelectionEvent e) {
                FileDialog dialog = new FileDialog (shell, SWT.OPEN);
                dialog.setFilterExtensions(new String [] {"*.html"});
                //dialog.setFilterPath("c:\\temp");
                result = dialog.open();
                text4.setText(result);
            }
        });

        Label Label3 = new Label (shell, SWT.NONE);
        Label3.setText ("Message Label 3: ");
        data = new GridData (200, SWT.DEFAULT);
        Label3.setLayoutData (data);

        Text text5 = new Text (shell, SWT.BORDER);
        text5.setText ("");
        data = new GridData (215, SWT.DEFAULT);
        text5.setLayoutData (data);

        Button BrowseBtn2 = new Button (shell, SWT.PUSH);
        BrowseBtn2.setText ("Browse");
        data = new GridData (80, SWT.DEFAULT);
        BrowseBtn2.setLayoutData (data);

        Label Label4 = new Label (shell, SWT.NONE);
        Label4.setText ("Message Label 4: ");
        data = new GridData (200, SWT.DEFAULT);
        Label4.setLayoutData (data);

        Combo Combo2 = new Combo (shell, SWT.NONE);
        Combo2.setText ("Options");
        data = new GridData (200, SWT.DEFAULT);
        Combo2.setLayoutData (data);

        Button searchBtn1 = new Button (shell, SWT.PUSH);
        searchBtn1.setText ("Search");
        data = new GridData (80, SWT.DEFAULT);
        searchBtn1.setLayoutData (data);

        Combo Combo3 = new Combo (shell, SWT.NONE);
        // CaseStudyCombo.setItems (new String [] {"Item 1", "Item 2", "Item 2"});
        Combo3.setText ("Options:");
        data = new GridData (200, SWT.DEFAULT);
        Combo3.setLayoutData (data);

        Combo Combo4 = new Combo (shell, SWT.NONE);
        Combo4.setText ("Options:");
        data = new GridData (200, SWT.DEFAULT);
        Combo4.setLayoutData (data);

        Button showDetailsBtn = new Button (shell, SWT.PUSH);
        showDetailsBtn.setText ("Show Details");
        data = new GridData (80, SWT.DEFAULT);
        showDetailsBtn.setLayoutData (data);

        shell.pack ();
        shell.open ();

        while (!shell.isDisposed ()) {
            if (!display.readAndDispatch ())
                display.sleep ();
        }
        display.dispose ();
    }
}

请帮助解决此问题。

有问题的行是:

public void WidgetSelected(SelectionEvent e)
注意大写字母“W”。您当前正在该匿名类中定义一个新方法(而不是重写现有的widgetSelected(…)方法)。如果您像这样将其更改为小写字母“w”,它将工作:

public void widgetSelected(SelectionEvent e)

使用@Override注释是一个很好的实践(实际上比推荐的要多)。如果您使用了该注释,编译器会将您标记为错误(例如,请参阅Joshua Bloch Effective Java第二版第36项:始终使用覆盖注释)

问题在于:

public void WidgetSelected(SelectionEvent e)
注意大写字母“W”。您当前正在该匿名类中定义一个新方法(而不是重写现有的widgetSelected(…)方法)。如果您像这样将其更改为小写字母“w”,它将工作:

public void widgetSelected(SelectionEvent e)
使用@Override注释是一个很好的实践(实际上比推荐的要多)。如果您使用了该注释,编译器会将您标记为错误(请参阅Joshua Bloch Effective Java第二版第36项:始终使用覆盖注释)

提示:请坚持。提示:请坚持。