java swing如何能让多个jbutton同时处于被激活状态!

xyz 2013-11-23 09:50:23

如图,我再程序中做了四个按钮,其中获取任务按钮需要访问网络资源很费时间,基本上每个几分钟是完成不了的。
我遇到点击了获取任务之后,画面就属于卡断状态!
我把监听器写在了jframe类的子类构造器里面,
我本以为写四个线程分别监听四个按钮,就可以实现多个按钮能同时触发了,结果还是卡顿
我知道,在jframe里面只有一个EvevtDispathThread,所以在同一时刻,只有一个组建能处于被监听状态,我需要的不是在actionperformed里面实现多线程,一个去更新组建,一个继续去获取任务!而是多个按钮能同时被触发!
求指教!!!!!
...全文
406 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyz 2013-12-30
  • 打赏
  • 举报
回复
引用 8 楼 terry21 的回复:
其中获取任务按钮需要访问网络资源很费时间,基本上每个几分钟是完成不了的。 ========================================= 这个可以考虑多线程实现嘛 我使用了20条线程同时抓取淘宝数据,快得不得了
这个有点卡吧!!!!!!!
xyz 2013-12-30
  • 打赏
  • 举报
回复
[quote=引用 9 楼 huxiweng 的回复:] 写了个列子,直接运行可以看到多个按钮触发自身事件,没有卡顿。 谢谢!我基础太薄弱了,现在在努力学习基础当中!此问题后面我会决解!
teemai 2013-12-04
  • 打赏
  • 举报
回复
注意不要在主线程中启动UI线程
teemai 2013-12-04
  • 打赏
  • 举报
回复
写了个列子,直接运行可以看到多个按钮触发自身事件,没有卡顿。

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Window {
	JFrame aq;
	JButton a1, a2;

	public static void main(String args[]) {
		Window ll = new Window();
	}

	public Window() {
		JFrame aq = new JFrame("ButtonTest");
		aq.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		a1 = new JButton("0");
		a2 = new JButton("1");

		Container af = aq.getContentPane();
		af.setLayout(new GridLayout(2, 1));
		af.add(a1);
		af.add(a2);
		ActionListener ajj = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {

				String rn = e.getActionCommand();
				System.out.println(rn);
				if (rn == "0") {
					System.out.println("0 clicked!");

					Runnable r = new Runnable() {
						@Override
						public void run() {
							int i = 0;
							while (i < 10) {
								i++;
								System.out.println("0 : " + new Date());
								try {
									Thread.sleep(1000);
								} catch (InterruptedException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
							}

						}
					};

					Thread t = new Thread(r);
					t.start();
				} 
				
				if (rn == "1") {
					System.out.println("1 clicked!");
					Runnable r = new Runnable() {
						@Override
						public void run() {
							int i = 0;
							while (i < 10) {
								i++;
								System.out.println("1 : " + new Date());
								try {
									Thread.sleep(1000);
								} catch (InterruptedException e) {
									e.printStackTrace();
								}
							}

						}
					};

					Thread t = new Thread(r);
					t.start();
				}

			}
		};
		
		a1.addActionListener(ajj);
		a2.addActionListener(ajj);

		aq.pack();
		aq.setVisible(true);
	}
};
terry21 2013-12-04
  • 打赏
  • 举报
回复
其中获取任务按钮需要访问网络资源很费时间,基本上每个几分钟是完成不了的。 ========================================= 这个可以考虑多线程实现嘛 我使用了20条线程同时抓取淘宝数据,快得不得了
  • 打赏
  • 举报
回复
建议楼主换一下设计思路,同时让多个按钮被激活是行不通的。
xyz 2013-12-03
  • 打赏
  • 举报
回复
引用 4 楼 peng_hao1988 的回复:
奇怪的设计,为什么要同时出发了,如果要同时运行事件处理业务,就在一个出发里面吊起就好了。用户只能出发一个动作,但是后台你是可以控制的呀,要运行什么业务你在用户出发后设计好相关流程然后调起就行。
我在一个触发器里面让程序去获取订单,另一个触发过程可以在我需要的时候再启动
jdgdf566 2013-12-02
  • 打赏
  • 举报
回复
你应该学习下SwingWorker这个类;使用netbeans而不是Eclipse、Idea。
桃园闲人 2013-12-01
  • 打赏
  • 举报
回复
奇怪的设计,为什么要同时出发了,如果要同时运行事件处理业务,就在一个出发里面吊起就好了。用户只能出发一个动作,但是后台你是可以控制的呀,要运行什么业务你在用户出发后设计好相关流程然后调起就行。
xyz 2013-12-01
  • 打赏
  • 举报
回复
原理忘记这个问题了!
xyz 2013-11-23
  • 打赏
  • 举报
回复
引用 1 楼 vcdemon 的回复:
的确是比较难啊!!!!!
纳兰弦歌 2013-11-23
  • 打赏
  • 举报
回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧