java - 谁能帮我解释为什么我的 GUI 在循环运行时不可点击?

标签 java swing awt freeze event-dispatch-thread

循环完成后,所有按钮和文本字段都可用,但循环运行时无法单击任何内容。 我尝试了很多不同的事情,查看了很多不同的网站,但没有什么可以帮助我。我不知道出了什么问题!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

 public class J extends JFrame implements ActionListener{    
    JButton start = new JButton("Start (F12)");
    JButton stop = new JButton("Stop");

    int i;
    JLabel delay = new JLabel("Delay: ");
    JTextField delayJTF = new JTextField(4);
    int delayS = 0;
    GridLayout bl = new GridLayout(10, 10);
    public J() 
    {      

    super("Auto Clicker");
    start.addActionListener(this);
    stop.addActionListener(this);
    setSize(300, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(bl);
    add(delay, BorderLayout.NORTH);
    add(delayJTF, BorderLayout.NORTH);
    add(start);
    add(stop);
    setVisible(true);




     }

      boolean run = false;



          public static void main(String[] args) {
         J j = new J();

       }
        public void robott() {
         try {

      Robot robot = new Robot();

       Thread.sleep(delayS);
    robot.mousePress(InputEvent.BUTTON1_MASK);    
     robot.mouseRelease(InputEvent.BUTTON1_MASK);
   // robot.delay(delayS);

   } catch(Exception exc) {
      System.out.println(exc);

  }
      }

    public void actionPerformed(ActionEvent e) {
    String delaySt = delayJTF.getText();
    delayS = Integer.parseInt(delaySt);
    System.out.println(delayS);

    while(i < 100) {
        i++;          
      robott();
      System.out.println(i);
    }


   }

 }


     any suggestions?

最佳答案

您正在事件调度线程中循环 - 该线程处理 GUI 绘制和用户输入。所有操作事件都在该线程上处理。如果您需要执行长时间运行的任务(以及其他阻塞操作,如 I/O),您应该考虑将这些任务卸载到工作线程。看看this tutorial了解更多信息。

关于java - 谁能帮我解释为什么我的 GUI 在循环运行时不可点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11624443/

相关文章:

java - 升级到 Java 8 导致单元测试中的 Orika 映射器 java.io.IOException : invalid constant type: 15 at 142

java - JTable 按键事件未触发

java - 单击按钮时如何生成事件

java - 覆盖 JTextArea.getDocument.remove()?

java - 如何将 Java Swing 中的键盘输入映射到另一个字符或字符串?

java - 当鼠标事件定位到具有鼠标监听器的 JComponent 时,如何将鼠标事件定位到更深的 JComponent

java - 我如何在我的 JTextArea 中设置行号?

java - 如何使用现有的 Java 类运行服务器来接受来自另一个应用程序的 API 调用?

java - 如何使用tomcat将类设置为守护进程?

java - PHP 中方法重写的用例