Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程运行时为什么JButton不工作?_Java_Swing - Fatal编程技术网

Java 线程运行时为什么JButton不工作?

Java 线程运行时为什么JButton不工作?,java,swing,Java,Swing,我的应用程序中有两个按钮。当按下“开始”按钮时,我创建了一个线程来更新JTextArea。当按下“停止”按钮时,我想停止线程。但当按下“开始”时,“停止”直到线程完成才起作用。有人能帮我吗 public class JTextAreaDemo implements ActionListener { JFrame frame; JPanel jp; JTextArea jta; JButton jb1, jb2; volatile boolean stop

我的应用程序中有两个按钮。当按下“开始”按钮时,我创建了一个线程来更新JTextArea。当按下“停止”按钮时,我想停止线程。但当按下“开始”时,“停止”直到线程完成才起作用。有人能帮我吗

public class JTextAreaDemo implements ActionListener {

    JFrame frame;
    JPanel jp;
    JTextArea jta;
    JButton jb1, jb2;
    volatile boolean stop = true;

    void init() {
        frame=new JFrame("Test"); 
        jp=new JPanel(); 
        jta=new JTextArea(7,30);
        jb1 = new JButton("Start");
        jb1.addActionListener(this);
        jb2 = new JButton("Stop");
        jb2.addActionListener(this);
        jta.setEditable(false);
        jta.setLineWrap(true); 
        jta.setWrapStyleWord(true); 
        JScrollPane jsp=new JScrollPane(jta);   
        Dimension size=jta.getPreferredSize();   
        jsp.setBounds(110,90,size.width,size.height);
        jp.add(jsp);   
        jp.add(jb1);
        jp.add(jb2);
        frame.add(jp);  
        frame.setSize(400,200);   
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    }

    public static void main(String[] agrs){
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new JTextAreaDemo().init();
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jb1) {
            new Thread(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                for(int i=0; i<100000 && stop; ++i) {
                    final String str = "hello:"+i+"\n";
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            jta.append(str);
                            jta.setCaretPosition(jta.getDocument().getLength());

                        });
                    }
                }   
            }).start();
            System.out.println("begin");
        } else if (e.getSource() == jb2) {
            System.out.println("stop");
            stop = false;
        }
    }
}
公共类JTextAreaDemo实现ActionListener{
JFrame框架;
JPanel jp,;
jta区;
按钮jb1,jb2;
volatile boolean stop=true;
void init(){
框架=新的JFrame(“测试”);
jp=新的JPanel();
jta=新的JTextArea(7,30);
jb1=新的JButton(“开始”);
jb1.addActionListener(这个);
jb2=新的JButton(“停止”);
jb2.addActionListener(这个);
jta.setEditable(假);
jta.setLineWrap(真);
jta.setWrapStyleWord(真);
JScrollPane jsp=新的JScrollPane(jta);
维度大小=jta.getPreferredSize();
setBounds(110,90,size.width,size.height);
jp.add(jsp);
jp.add(jb1);
jp.add(jb2);
帧。添加(jp);
框架。设置尺寸(400200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
公共静态void main(字符串[]agrs){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
新的JTextAreaDemo().init();
}
});
}
@凌驾
已执行的公共无效操作(操作事件e){
如果(如getSource()==jb1){
新线程(newrunnable()){
@凌驾
公开募捐{
//TODO自动生成的方法存根

for(int i=0;i这是因为
SwingUtilities.invokeLater
将一个操作放在队列上以供以后执行。您的循环
for(int i=0;i这是因为
SwingUtilities.invokeLater
将一个操作放在队列上以供以后执行。您的循环
for(int i=0;i>