swing与并发【工作线程】

jdk6.0发布后,工作线程被SwingWorker的类处理

//这段代码主要是为读者展示如何处理背景任务,在程序中有六个顶层容器,可以在同一时间内打开,因为它们都处于工作线程
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class test2
{
public static void main(String[] args)
{
try
{
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
new mainframe();
}});

}
catch(Exception e){}
}
}
class mainframe extends Thread
{
static final int WIDTH=700;
static final int HEIGHT=400;
mainframe()
{
JFrame frame=new JFrame("SwingWorker测试程序");
JPanel pane=new JPanel();
frame.setContentPane(pane);
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
int width=screenSize.width;
int height=screenSize.height;
int x=(width-WIDTH)/2;
int y=(height-HEIGHT)/2;
frame.setLocation(x,y);
frame.setVisible(true);
frame.setResizable(true);
JButton button1=new JButton("打开第一个窗口");
JButton button2=new JButton("打开第二个窗口");
JButton button3=new JButton("打开第三个窗口");
JButton button4=new JButton("打开第四个窗口");
JButton button5=new JButton("打开第五个窗口");
JButton button6=new JButton("打开第六个窗口");
pane.setLayout(new GridLayout(2,3));
pane.add(button1);
pane.add(button2);
pane.add(button3);
pane.add(button4);
pane.add(button5);
pane.add(button6);
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
SwingWorker work=new SwingWorker()
{

protected Object doInBackground() throws Exception {
try
{
sleep(10000);
}
catch(Exception e){}
frame1 f=new frame1();
return null;
}

};
work.execute();

}
});
button2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{

SwingWorker work=new SwingWorker()
{

protected Object doInBackground() throws Exception {
try
{
sleep(10000);
}
catch(Exception e){}
frame2 f=new frame2();
return null;
}
};
work.execute();
} });
button3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
SwingWorker work=new SwingWorker()
{

protected Object doInBackground() throws Exception {
try
{
sleep(10000);
}
catch(Exception e){}
frame3 f=new frame3();
return null;
}
};
work.execute();
} });
button4.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
SwingWorker work=new SwingWorker()
{

protected Object doInBackground() throws Exception {
try
{
sleep(10000);
}
catch(Exception e){}
frame4 f=new frame4();
return null;
}
};
work.execute();
} });
button5.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
SwingWorker work=new SwingWorker()
{

protected Object doInBackground() throws Exception {
try
{
sleep(10000);
}
catch(Exception e){}
frame5 f=new frame5();
return null;
}
};
work.execute();
} });
button6.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{

SwingWorker work=new SwingWorker()
{

protected Object doInBackground() throws Exception {
try
{
sleep(10000);
}
catch(Exception e){}
frame6 f=new frame6();
return null;
}
};
work.execute();
} });
}
class frame1
{//创建一个窗口
frame1()
{
JFrame frame=new JFrame("SwingWorker测试程序1");
JPanel pane=new JPanel();
frame.setContentPane(pane);
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
int width=screenSize.width;
int height=screenSize.height;
int x=(width-mainframe.WIDTH)/2;
int y=(height-mainframe.HEIGHT)/2;
frame.setLocation(x,y);
frame.setVisible(true);
frame.setResizable(false);
JButton button1=new JButton("这是第一个窗口的结果");
pane.add(button1,"Center");
}
}
下面将给出第二个按钮组件所打开的第二个窗口的具体代码。
class frame2
{//创建一个窗口
frame2()
{
…………………………..//与第一个窗口中的代码内容相同
}
}
class frame3
{//创建一个窗口
frame3()
{
…………………………..//与第一个窗口中的代码内容相同
}
}
class frame4
{//创建一个窗口
frame4()
{
…………………………..//与第一个窗口中的代码内容相同
}
}
class frame5
{//创建一个窗口
frame5()
{
…………………………..//与第一个窗口中的代码内容相同
}
}
class frame6
{
frame6()
{
…………………………..//与第一个窗口中的代码内容相同
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的Swing框架可以通过多线程实现并发下载。多线程是一种并行执行多个任务的技术,可以提高程序的执行效率和响应速度。 在Swing框架中,可以使用多线程来实现并发下载。首先,需要创建一个继承自Thread类的下载线程类。在这个类中,可以定义下载任务的URL、文件保存路径等属性,并重写run方法,实现具体的下载逻辑。 在Swing的图形界面中,可以在用户点击下载按钮时创建并启动下载线程。点击下载按钮后,程序可以首先检查是否已经存在下载线程,如果不存在则创建一个新的线程,并设置相关的参数和属性。然后,通过调用下载线程的start方法,启动下载线程。 在下载线程的run方法中,可以使用Java的网络编程相关的API来实现文件的下载。例如,使用URL类打开下载任务的URL,使用URLConnection类获取下载文件的大小,然后按照一定的分块大小进行文件的分块下载。每个下载线程可以负责下载一个或多个分块,当所有的线程都下载完成后,可以将分块整合成完整的文件。 在下载过程中,还可以使用进度条来显示下载的进度。下载线程可以通过计算已下载的文件大小和总文件大小的比例来更新进度条的进度。 需要注意的是,在多线程并发下载时,应该避免对同一文件进行写操作,以免造成数据竞争和冲突。可以使用锁机制来确保文件的一致性和完整性。 综上所述,通过Java的Swing框架和多线程技术,可以实现多线程并发下载。这种方式可以提高下载效率,并且保持程序的响应性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值