public class ListExample {
public static void main(String[] args) {
final List l=new List();
l.init();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
l.list.updateUI();
System.out.println("Asim");
}
});
}
}
public class List extends JFrame{
public DefaultListModel DLM=new DefaultListModel();
public JList list=new JList(DLM);
private JPanel jp=new JPanel();
private JScrollPane sp=new JScrollPane(list);
public void init(){
jp.add(sp);
super.add(jp);
super.setVisible(true);
super.setLayout(new FlowLayout());
super.setSize(400,500);
UL p=new UL();
p.UL_1();
}
public void Update_list(String[] n){
list.setListData(n);
list.updateUI();
}
}
public class UL extends List{
public void UL_1(){
t.start();
}
Thread t=new Thread(new Runnable() {
@Override
public void run() {
//To change body of implemented methods use File | Settings | File Templates.
String[] n={"Asim", "saif","Khan"};
List l=new List();
l.list.setListData(n);
list.updateUI();
}
});
}
最佳答案
Swing 是一个单线程框架,这意味着您只能在事件调度线程的上下文中修改 UI 元素。同样,任何长时间运行的任务或其他阻塞进程都会阻止 EDT 处理新事件。
虽然有多种方法可以实现此目的,但最简单的可能是使用 SwingWorker
例如...
看看Concurrency in Swing了解更多详情
关于java - 如何从另一个线程更新 JList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20943327/