创建一个如下图所示GUI包含4个相同的部分,每个部分有一个独立的worker thread实现计数功能,从TextField输入从1~100,000,000中任意一个数,每间隔一段时间,Label表示当前worker thread所统计的数值。Start Button首先是否有正在计数的work thread运行,如果有正在运行的work thread, 中断该thread的运行,从零开始计数。Stop Button将会中断worker threads的运行。
实现细节:创建一个继承于JPanel的子类JCount,可以选用BoxLayout布局。提示采用SwingUtilities.invokeLater在Swing Thread里创建GUI。
```java
public class JCount extends JPanel {
private static void createAndShowGUI() {
// create your GUI HERE
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
每个JCount包括TextField,Label,Button以及其他保留计数的变量。Panel之间隔开可以在每个JCount中添加例如下面语句:
add(Box.createRigidArea(new Dimension(0,40)));
一旦Worker Thread创建,立即从0开始计数到Text Field中输入的数,每数到10,000,Worker Thread会睡眠100 milliseconds,并更新Label数值到当前数到的数值,更新Label的操作仅能在Swing Thread里完成,因此需要用到SwingUtilities.invokeLater。确保Worker Thread在被中断或者完成计数时结束运行。
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/138387835556160.png "#left")