我有一个构建我的UI的父类(目前基本上只是一个文本框)。我创建了一个创建新线程的辅助类,我需要能够从新线程更新父类的文本框。我尝试的一切都会引发错误。我假设我需要创建某种调度程序,但我的背景是C#,而且我不是100%熟悉如何在Java中执行此操作。
我的最新迭代将父类的对象传递给辅助中的静态方法,该方法最终通过实例化辅助类(其中包含run()方法)的对象来创建新线程。我在辅助对象中有一个构造函数,它期望来自父类的传入对象,当传入时,它设置我在父类的成员部分中已经decalred的属性。当我尝试在run()方法中访问该成员以更新父类的文本框时,我收到错误。
基本上,二级类看起来像这样:
public class SecondaryClass extends Thread {
private ParentClass pc = null;
public SecondaryClass(ParentClass PC){
pc = PC;
}
public static void StartThread(ParentClass pC){
Thread thread = new SecondaryClass(pC);
thread.start();
}
public void run() {
pc.myTextBox.append("something");
}
}
我也尝试在父类上创建一个公共方法,它接受一个字符串作为唯一的参数,并从辅助类的run()中调用该方法并在那里传递“somethign”。父类的方法更新了同一个文本框,但也存在问题。
任何人都可以提供一些见解,了解我需要做些什么来跨这些线程访问UI元素?
答案 0 :(得分:0)
您需要使用SwingWorker
在J2ME的stackoverflow上回答了类似的问题:
Interacting with UI threads in Java/J2ME
另请阅读以下内容:
http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html
http://java.sun.com/products/jfc/tsc/articles/threads/threads2.html
在这里查看简单示例:
http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
希望这有帮助。