首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

SWT 关于 在一个类中调用另一个类的方法解决办法

2012-01-05 
SWT 关于 在一个类中调用另一个类的方法要做一个管理系统,目前只有两个类:Logon.java(登录界面)和Opboard.

SWT 关于 在一个类中调用另一个类的方法
要做一个管理系统,目前只有两个类:Logon.java(登录界面)和Opboard.java(操作界面).
/*-------------------------Logon.java-----------------------------*/
public   class   Logon   {
.
.
.
    public   Logon()   {

        final   Button   okButton   =   new   Button(shell,   SWT.NONE);
okButton.setText( "确定 ");
okButton.setBounds(105,   120,   44,   23);


        okButton.addSelectionListener(new   SelectionListener(){public   void   widgetSelected(SelectionEvent   e){
      if(e.getSource()==okButton){
if((text.getText().equals( "root "))&&(text2.getText().equals( "admin "))){
    System.out.println( "mark1 ");         //mark1
    //   实例化Opboard
    Opboard   app=new   Opboard();
    System.out.println( "mark2 ");         //mark2
                                        //调用start()方法
    app.start();
}
                                                     

}

}
public   void   widgetDefaultSelected(SelectionEvent   e){
}
          });
                                                             
       
    }
    public     void   start()   {
    shell.open();
    while   (!shell.isDisposed())   {
if   (!display.readAndDispatch())
    display.sleep();
}
display.dispose();
    }

    public   static   void   main(String[]   args)   {
        Logon   log   =   new   Logon(10,2);
        log.start();
    }
}

/*-----------------------------Opboard.java-----------------------------*/

public   class   Opboard   {
//一些定义
    public   Opboard(){
        //一些定义
    }
    public   void   start(){
        shell.open();
        while   (!shell.isDisposed())   {
            if   (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
    public   static   void   main(String   args[]){
        Opboard   app=new   Opboard();
        app.start();
    }
}


运行之后   mark1出现,mark2没出现
pams是包名

报错:
Exception   in   thread   "main "   org.eclipse.swt.SWTException:   Invalid   thread   access


at   org.eclipse.swt.SWT.error(SWT.java:3374)
at   org.eclipse.swt.SWT.error(SWT.java:3297)
at   org.eclipse.swt.SWT.error(SWT.java:3268)
at   org.eclipse.swt.widgets.Display.checkDisplay(Display.java:646)
at   org.eclipse.swt.widgets.Display.create(Display.java:707)
at   org.eclipse.swt.graphics.Device. <init> (Device.java:129)
at   org.eclipse.swt.widgets.Display. <init> (Display.java:402)
at   org.eclipse.swt.widgets.Display. <init> (Display.java:393)
at   pams.Opboard. <init> (Opboard.java:32)
at   pams.Logon$2.widgetSelected(Logon.java:71)
at   org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:90)
at   org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at   org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
at   org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348)
at   org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968)
at   pams.Logon.start(Logon.java:105)
at   pams.Logon.main(Logon.java:114)



[解决办法]
swt控件要在UI线程中调用
[解决办法]
顶一下
[解决办法]
可以换个思路:
关闭登录界面,打开操作界面。
1、将登录界面shell重构为login,将操作界面shell重构为main;
2、在login中开一线程,打开main;
Opboard app=new Opboard();
app.open();
3、关闭登录界面:
login.close();
[解决办法]
换成下面的方式?
Display display = Display.getDefault();
Shell shell = new Shell(display);
boolean isLogin = new LoginShell(shell).open();//登錄介面
if (isLogin)
{
ApplicationWindow w = new ApplicationWindow(shell);
w.setBlockOnOpen(true);
w.open();
Display.getCurrent().dispose();
shell.dispose();
display.dispose();
}
else
{
shell.dispose();
display.dispose();
}
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}

热点排行