swing与多线程的结合
swing与多线程的结合
这篇博客记录java中多线程的学习内容,通过与swing结合加深理解
我之前写过一篇PyQt中的多线程实现方法,感觉与之类似,因此只做简单记录。
雪花向前滚动的实例
代码
package Number;import javax.swing.*;import java.awt.*;import java.net.URL;public class SwingAndThread extends JFrame implements Runnable{private JLabel jl = new JLabel();private static Thread t;private Container container = getContentPane();private int count = 0;public SwingAndThread(){setBounds(300, 200, 250, 100);container.setLayout(null);URL url = SwingAndThread.class.getResource("/1.gif");Icon icon = new ImageIcon(url);jl.setIcon(icon);jl.setHorizontalAlignment(SwingConstants.LEFT);jl.setBounds(10,10,200,50);jl.setOpaque(true);container.add(jl);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String[] args) {SwingAndThread frame = new SwingAndThread();Thread t = new Thread(frame);t.start();}@Overridepublic void run() {while(true){jl.setBounds(count, 10, 250, 50);count += 5;try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}if(count == 200){count = 10;}}}}
看看实现效果
QQ录屏20211129092929
线程中添加线程
使用join方法,实现在一个进度条线程A中加入另一个进度条线程B,并在20%时让B先执行,然后继续执行A
直接上代码
package Number;import javax.swing.*;import java.awt.*;public class JoinThread extends JFrame {private Thread A;private Thread B;final JProgressBar progressBarA = new JProgressBar();final JProgressBar progressBarB = new JProgressBar();int count = 0;private Container c = getContentPane();public JoinThread() {super();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);setLayout(new BorderLayout());setSize(400, 100);c.add(progressBarA, BorderLayout.NORTH);c.add(progressBarB, BorderLayout.SOUTH);progressBarA.setStringPainted(true);progressBarB.setStringPainted(true);A = new Thread(new Runnable() {@Overridepublic void run() {int count = 0;while (true) {progressBarA.setValue(++count);try {Thread.sleep(100);if(count == 20){B.join();}} catch (InterruptedException e) {e.printStackTrace();}if (count == 100) {break;}}}});A.start();B = new Thread(new Runnable() {@Overridepublic void run() {int count = 0;while (true) {progressBarB.setValue(++count);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}if (count == 100) {break;}}}});B.start();}public static void main(String[] args) {new JoinThread();}}
主要知识点:
- 进度条的设置,
JProgressBar
是swing中的控件; - Runnable接口的实现;
- 线程B的加入,使用join方法;
- 线程B完成后,需要使用break,使线程结束,然后继续进行A线程。
- 另一个需要特殊说明的是,我上一个雪花滚动的线程示例中,在创建类的时候,用implement来实现了Runnable接口,而下面这个并没有这么写,这是因为在前面写implement Runnable后,程序中必须要重写run方法,而这个run方法只有一个,但是我有两个线程都需要重写这个run方法,这个run方法无法区分是A线程还是B线程,因此下面这个实力是在创建线程的时候,直接new的Runnable接口,new的时候,就无需在前面写implement了。
看看实现效果
QQ录屏20211129093035
作者:栀椩
来源链接:https://blog.csdn.net/u012848304/article/details/121602929
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。