如果你看一看一些多线程讲的比较多的书,你就会发现,由于swing 不保证线程安全性,swing的大多数的方法是不能被同步的方法。
好在,已经游人提供了对于这种问题打解决方案。(我看的时《java专业变成指南》
好在,已经游人提供了对于这种问题打解决方案。(我看的时《java专业变成指南》
解决方案 »
- Swing布局请教,涉及GridBagLayout
- 编写一个简单程序(代码越简练越好)。
- 画的圆怎么出不来?
- 急迫求现例:按下UI1中的某button可进入UI2,在UI2中按下ESC可返回UI1的例子!
- java + all jar file for classpath
- 关于Java Swing panel中 图片保存(某区域)
- 初来Java版,请大家推荐几本Java经典好书
- 关于NetBeans的问题:有没有介绍NetBeans的中文资料
- java如何实现从不同数据库中查询指定信息
- 自定义JList,每一项里添加一个按钮,这个按钮为什么不能点击
- 为什么我上传文件的时候,如果遇到文件名是中文的,虽然可以上传,但不可以下载,怎么解决?
- 关于数字签名的问题?急!!!
http://www.javaresearch.org/forum/thread.jsp?column=286&thread=2344
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;public class SwingThreadTest
{ public static void main(String[] args)
{ JFrame frame = new SwingThreadFrame();
frame.show();
}
}class SwingThreadFrame extends JFrame
{ public SwingThreadFrame()
{ setTitle("SwingThread");
setSize(400,300);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} );
model = new DefaultListModel(); JList list = new JList(model);
JScrollPane scrollPane = new JScrollPane(list); JPanel p = new JPanel();
p.add(scrollPane);
getContentPane().add(p, "South"); JButton b = new JButton("Good");
b.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent event)
{ new GoodWorkerThread(model).start();
}
});
p = new JPanel();
p.add(b);
b = new JButton("Bad");
b.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent event)
{ new BadWorkerThread(model).start();
}
});
p.add(b); getContentPane().add(p, "North");
} private DefaultListModel model;
}class BadWorkerThread extends Thread
{ public BadWorkerThread(DefaultListModel aModel)
{ model = aModel;
generator = new Random();
} public void run()
{ while (true)
{ Integer i = new Integer(generator.nextInt(10)); if (model.contains(i))
model.removeElement(i);
else
model.addElement(i); yield();
}
} private DefaultListModel model;
private Random generator;
}class GoodWorkerThread extends Thread
{ public GoodWorkerThread(DefaultListModel aModel)
{ model = aModel;
generator = new Random();
} public void run()
{ while (true)
{ final Integer i = new Integer(generator.nextInt(10));
EventQueue.invokeLater(new Runnable()
{ public void run()
{ if (model.contains(i))
model.removeElement(i);
else
model.addElement(i);
}
});
yield();
}
} private DefaultListModel model;
private Random generator;
}