【发布时间】:2012-12-15 20:06:29
【问题描述】:
我有两个基本问题。
-
我有一个带有 Java Swing 的 GUI 项目。当我将按钮放在框架上并双击它们时,我有
actionPerformed的代码,但它被阻止了。我怎样才能放一个按钮然后在
actionListener上使用它? -
我的项目是关于服务器-客户端(多线程和套接字)
我调用一种方法来接收一个我们可以在 JtextField 上写入的字符串,然后它会在 PrintWriter 和 getOutputStream 上停留一段时间。
类似:
do{
...
}while(thisstring!=null || thisstring!="exit")
所以.. 当我写东西并按下按钮发送它时,它停留在 cicle 和按钮块上。如何解锁按钮以编写其他内容?
编辑:
我了解 EDT 问题,但我无法解决。
我尝试使用 Timer 但没有成功,类似这样:
int delay = 1000; //milliseconds
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
//My action calling the Thread class with the while cicle that has the PrintWriter
}
};
new Timer(delay, listener).start();
当我按下按钮时如何处理这个来做计时器?
每当一个用户在文本字段中输入内容时,我如何才能留在那个 cicle(阅读评论行)以通过 OutputStream 发送信息? 我知道,例如对于控制台应用程序,我使用 BufferedReader,然后使用 ReadLine() 等待从控制台发送的任何内容,但使用 GUI 界面时,它会一直冻结..
【问题讨论】:
-
“被阻止”和“阻止”是什么意思?没有光学反馈,您按下它并“挂起”?这可能有几个问题,例如通过在 EDT(Event-Dispatcher-Thread)中处理大数据。我们可能需要看一些代码。
-
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { } 所以..如果我想将它更改为公共,例如,我不能编辑它...在这段代码之后生成了如何将按钮与 actionlister 一起使用?第2题,界面被锁定,因为等待跳出cicle。
-
1) do/while 似乎阻塞了 EDT。不要阻塞 EDT(事件调度线程)——当这种情况发生时,GUI 将“冻结”。而是实现一个 Swing
Timer用于重复任务或一个SwingWorker用于长时间运行的任务。有关详细信息,请参阅Concurrency in Swing。 2) 为了尽快获得更好的帮助,请发布SSCCE。 3) 请停止将代码放入 cmets。这是不可读的。而是将其编辑到问题中。 -
最后一个添加解决了你的问题还是……离开了吗?