最近在写一个数据库操作的小的桌面程序,想在程序中直接调用*.sql脚本,来连续创建多个数据库,里面用到了将控制台输出重定向到Text控件上。
遇到的问题:
问题一: 重定向是成功了,控制台的信息在Text控件上输出,但是我在创建数据库的时候,创建第一个数据库的时候,信息还能正常显示,但是脚本运行到创建第二个的时候,整个窗口就变成“未响应”的状态,直到后台将所有库都创建完成后,程序窗口才有反应,能有继续使用,并将信息一下在全部显示在Text控件中。很不解这是什么原因?
问题二:如附件中图片所示,我想在创建数据库的前面加上一段提示,如“正在创建系统库...”。但是要怎么在*.sql脚本中写代码?
问题有两个,希望高手给予指点,小弟在这里先行谢谢了。
程序中代码:
下面是一段重定向的类:
import java.io.OutputStream;
import java.io.PrintStream;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;
public class MyPrintStream extends PrintStream {
private Text text;
public MyPrintStream(OutputStream out, Text text) {
super(out);
this.text = text;
}
/**
* 在这里重截,所有的打印方法都要调用的方法
*/
public void write(byte[] buf, int off, int len) {
final String message = new String(buf, off, len);
/* SWT非界面线程访问组件的方式 */
Display.getDefault().syncExec(new Thread(){
public void run(){
/* 在这里把信息添加到组件中 */
text.append(message);
}
});
}
}
在然后在用下面的代码调用:
MyPrintStream mps = new MyPrintStream(System.out, text);
System.setOut(mps);
System.setErr(mps);
这样就完成了控制台重定向到Text控件上。