当前位置:编程学习 > JAVA >>

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


如图,我再程序中做了四个按钮,其中获取任务按钮需要访问网络资源很费时间,基本上每个几分钟是完成不了的。
我遇到点击了获取任务之后,画面就属于卡断状态!
我把监听器写在了jframe类的子类构造器里面,
我本以为写四个线程分别监听四个按钮,就可以实现多个按钮能同时触发了,结果还是卡顿
我知道,在jframe里面只有一个EvevtDispathThread,所以在同一时刻,只有一个组建能处于被监听状态,我需要的不是在actionperformed里面实现多线程,一个去更新组建,一个继续去获取任务!而是多个按钮能同时被触发!
求指教!!!!! swing多线程 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 1 楼 vcdemon 的回复:

的确是比较难啊!!!!! --------------------编程问答-------------------- 原理忘记这个问题了! --------------------编程问答-------------------- 奇怪的设计,为什么要同时出发了,如果要同时运行事件处理业务,就在一个出发里面吊起就好了。用户只能出发一个动作,但是后台你是可以控制的呀,要运行什么业务你在用户出发后设计好相关流程然后调起就行。 --------------------编程问答-------------------- 你应该学习下SwingWorker这个类;使用netbeans而不是Eclipse、Idea。 --------------------编程问答--------------------
引用 4 楼 peng_hao1988 的回复:
奇怪的设计,为什么要同时出发了,如果要同时运行事件处理业务,就在一个出发里面吊起就好了。用户只能出发一个动作,但是后台你是可以控制的呀,要运行什么业务你在用户出发后设计好相关流程然后调起就行。


我在一个触发器里面让程序去获取订单,另一个触发过程可以在我需要的时候再启动 --------------------编程问答-------------------- 建议楼主换一下设计思路,同时让多个按钮被激活是行不通的。 --------------------编程问答-------------------- 其中获取任务按钮需要访问网络资源很费时间,基本上每个几分钟是完成不了的。
=========================================
这个可以考虑多线程实现嘛
我使用了20条线程同时抓取淘宝数据,快得不得了 --------------------编程问答-------------------- 写了个列子,直接运行可以看到多个按钮触发自身事件,没有卡顿。


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);
}
};
--------------------编程问答-------------------- 注意不要在主线程中启动UI线程
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,