当前位置: 代码迷 >> J2SE >> 发现JAVA图形化编程的一个有关问题:不能有死循环
  详细解决方案

发现JAVA图形化编程的一个有关问题:不能有死循环

热度:41   发布时间:2016-04-23 20:05:55.0
发现JAVA图形化编程的一个问题:不能有死循环!
假如我做了一个简单的界面,里面只有两个控件:一个按钮和一个JTextField。
程序很简单:按下那个按钮,则在JTextField中无穷地输出字母ABC,我写的是:

getstart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
while(true) {
textfca.append("ABC");
}
}

});

结果是什么也出不来。
事实上我之前做过类似的一个程序,只不过不是死循环,而是循环100次,每1秒一次。则结果居然是在100秒之后一起出现!!
请问这个是JAVA有意这样设计的还是我没有用对方法呢?
------解决思路----------------------

package com.util;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class WhileLoop extends JDialog{
WhileLoop(){
final int start = 0 ;
this.setSize(400, 300);
final JTextField text = new JTextField();
JButton button = new JButton("提交");
this.add(text, BorderLayout.NORTH);
this.add(button, BorderLayout.SOUTH);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.setVisible(true);
button.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
if (null != text.getText()) {
// TODO Auto-generated method stub
for (int i = 0; i <= start + 1; i++) {
System.out.println(text.getText());
i=0;
}
}else{
JOptionPane.showMessageDialog(null, "text不能为空!");
return;
}
}
});
}
public static void main(String[] args) {
new WhileLoop();
}
}


------解决思路----------------------
button点击事件的响应应该用线程(Thread)处理
public void actionPerformed(ActionEvent e) {
new Runnable( new Thread(){
       public void run() {
           textfca.setText( textfca.getText()+"ABC");
       }
   }).start();
}
------解决思路----------------------
引用:
3楼的朋友可能没明白我的意思。
我不是让它在控制台无限输出。我是让它在JTextArea里无限输出。

这个是因为UI的绘制都是单线程的,无论什么开发语言都一样,一般会新起线程去处理耗时的操作,然后通过事件通知进行回调绘制UI。
  相关解决方案