更新文本字段时出现无效线程访问异常
Invalid thread access exception while updating textfield
我正在尝试使用可运行的线程更新属于另一个 class 的文本字段,但出现 'invalid thread access' 异常。
我的代码是:
Thread t2 = new Thread () {
public void run () {
System.out.println("t2 thread içindeyim.");
try {
String sql = " RESTORE DATABASE Genius3"+
" FROM DISK = '"+collected.getdbpath()+"'"+
" WITH MOVE 'GeniusIII_Data' TO 'C:\SQLDATA\Genius3.mdf',"+
" MOVE 'GeniusIII_Log' TO 'C:\SQLDATA\Genius3_1.ldf'";
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url);
stmt = con.prepareStatement(sql);
rs = stmt.executeQuery();}
catch (Exception ef) {ef.printStackTrace();}
finally {
ekran5.text_1.setText("done");
}
}
};
和另一个 class 里面有那个文本框;
public class ekran5 {
public static Label islemlabel;
public static Composite composite_1 ;
public static Label detail;
public static Text text_1;
public static void start(){
composite_1 = new Composite(Loader.composite, SWT.BORDER | SWT.EMBEDDED);
composite_1.setBackground(SWTResourceManager.getColor(192,192,192));
composite_1.setBounds(362, 83, 668, 536);
islemlabel = new Label(composite_1, SWT.NONE);
islemlabel.setFont(SWTResourceManager.getFont("Arial CYR", 10, SWT.NORMAL));
islemlabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_GRAY));
islemlabel.setBounds(10, 448, 84, 15);
islemlabel.setText("\u0130\u015Flem Detay\u0131");
text_1 = new Text(composite_1, SWT.BORDER);
text_1.setBounds(10, 469, 628, 37);
}
}
在 finally 块中,我正在更新文本字段,但它因此给了我一个无效的线程访问异常。
在 SWT 中,只允许 UI 线程更新小部件尝试使用 Display.syncExec 执行所有 UI 更新。 (或者,可以使用 UI 作业。)
阅读 SWT 常见问题解答也是明智之举,这对我来说听起来像是常见问题解答。
我正在尝试使用可运行的线程更新属于另一个 class 的文本字段,但出现 'invalid thread access' 异常。
我的代码是:
Thread t2 = new Thread () {
public void run () {
System.out.println("t2 thread içindeyim.");
try {
String sql = " RESTORE DATABASE Genius3"+
" FROM DISK = '"+collected.getdbpath()+"'"+
" WITH MOVE 'GeniusIII_Data' TO 'C:\SQLDATA\Genius3.mdf',"+
" MOVE 'GeniusIII_Log' TO 'C:\SQLDATA\Genius3_1.ldf'";
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url);
stmt = con.prepareStatement(sql);
rs = stmt.executeQuery();}
catch (Exception ef) {ef.printStackTrace();}
finally {
ekran5.text_1.setText("done");
}
}
};
和另一个 class 里面有那个文本框;
public class ekran5 {
public static Label islemlabel;
public static Composite composite_1 ;
public static Label detail;
public static Text text_1;
public static void start(){
composite_1 = new Composite(Loader.composite, SWT.BORDER | SWT.EMBEDDED);
composite_1.setBackground(SWTResourceManager.getColor(192,192,192));
composite_1.setBounds(362, 83, 668, 536);
islemlabel = new Label(composite_1, SWT.NONE);
islemlabel.setFont(SWTResourceManager.getFont("Arial CYR", 10, SWT.NORMAL));
islemlabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_GRAY));
islemlabel.setBounds(10, 448, 84, 15);
islemlabel.setText("\u0130\u015Flem Detay\u0131");
text_1 = new Text(composite_1, SWT.BORDER);
text_1.setBounds(10, 469, 628, 37);
}
}
在 finally 块中,我正在更新文本字段,但它因此给了我一个无效的线程访问异常。
在 SWT 中,只允许 UI 线程更新小部件尝试使用 Display.syncExec 执行所有 UI 更新。 (或者,可以使用 UI 作业。)
阅读 SWT 常见问题解答也是明智之举,这对我来说听起来像是常见问题解答。