日期:2014-05-20  浏览次数:20727 次

读取文件到swt界面,界面拖拽不动,卡死的问题
写了一个简单的读取.sql文件内容到TEXT组件的小程序,文件内容能够读取到界面,但是SWT窗口不能拖动,一动就死掉了,哪位高手帮忙看一下:
package com.dba.ui;

import java.io.BufferedReader;
import java.io.FileReader;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;

public class Main extends Shell {
private Text text;

/**
* Launch the application.
* @param args
*/
public static void main(String args[]) {
try {
Display display = Display.getDefault();
Main shell = new Main(display);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* Create the shell.
* @param display
*/
public Main(Display display) {
super(display, SWT.SHELL_TRIM);

text = new Text(this, SWT.BORDER);
text.setBounds(10, 31, 422, 210);

Button button = new Button(this, SWT.NONE);
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
String lineMessage;
try {
BufferedReader bf = new BufferedReader(new FileReader("./script/Oracle.sql"));
while ((lineMessage = bf.readLine()) != null) {
text.append(lineMessage + "\n");
Thread.sleep(1000);
}

} catch (Exception e1) {
e1.printStackTrace();
}
}
});
button.setBounds(10, 3, 72, 22);
button.setText("\u8BFB\u53D6");
createContents();

}

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

}

@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}


------解决方案--------------------
探讨

谢谢magong,这样的话可以解决界面卡的问题,但是关闭SWT窗口,JAVA进程是关不上的