Java Swing GUI控件在后台执行和操作时停止

Java Swing GUI控件在后台执行和操作时停止,java,swing,user-interface,Java,Swing,User Interface,现在,当我点击导入按钮时,一个操作在后端执行。因此,当GUI停止控制时,我不能按下任何按钮,但我希望可以按下cancel按钮,以便用户可以取消正在进行的操作。 我需要一些关于如何做的想法 JButton importButton = new JButton("Import"); importButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { fo

现在,当我点击导入按钮时,一个操作在后端执行。因此,当GUI停止控制时,我不能按下任何按钮,但我希望可以按下cancel按钮,以便用户可以取消正在进行的操作。 我需要一些关于如何做的想法

JButton importButton = new JButton("Import");
importButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {


    for(ResourceListObject currentImage : imagesToBeImported){

        String ImOid = String.valueOf(currentImage.getOID());


            String image_content = restEngine.getimageContent(ImOid);

            String str[]=new String[3];

            str[0] = "aix";
            str[1] = image_content;
            str[2] = selectedRepository.concat("_").concat(currentImage.getName());

            PowerVC_Image_Deployer imgDeployer= new PowerVC_Image_Deployer(str);



             }

        }

您的问题是GUI正在调用该操作并阻塞,即它等待该操作完成,并且由于它正在等待,因此不可能有用户交互。要解决这个问题,您必须在应用程序中使用多个线程

谨慎地使用并发性对Swing尤其重要 程序员编写良好的Swing程序使用并发创建 永不“冻结”的用户界面-程序始终响应 与用户交互,无论它在做什么。创建一个响应 编程时,程序员必须了解Swing框架如何使用 线程


您可以在此处找到更多信息:

您的问题是GUI正在调用该操作并阻塞,即它等待该操作完成,并且由于它正在等待,因此无法进行用户交互。要解决这个问题,您必须在应用程序中使用多个线程

谨慎地使用并发性对Swing尤其重要 程序员编写良好的Swing程序使用并发创建 永不“冻结”的用户界面-程序始终响应 与用户交互,无论它在做什么。创建一个响应 编程时,程序员必须了解Swing框架如何使用 线程


您可以在这里找到更多信息:

如果您可以发布代码或生成异常,我想我们可以提供帮助。@Papa\u Jay:没有生成异常。我就是不能点击取消按钮。我正在发布导入按钮代码。我已经添加了“导入”按钮的代码。PowerVC_Image_部署器是一个与服务器建立连接并执行操作的类。当Power_VC_Image_Deployer在后端执行其操作时,我无法按下取消按钮。与Papa_Jay的评论相反,这不是由于异常或错误,而是单线程程序的典型行为。请查看我发布的链接。如果您可以发布代码或生成异常,我想我们可以提供帮助。@Papa\u Jay:没有生成异常。我就是不能点击取消按钮。我正在发布导入按钮代码。我已经添加了“导入”按钮的代码。PowerVC_Image_部署器是一个与服务器建立连接并执行操作的类。当Power_VC_Image_Deployer在后端执行其操作时,我无法按下取消按钮。与Papa_Jay的评论相反,这不是由于异常或错误,而是单线程程序的典型行为。请查看我发布的链接。好的,如果我得到了正确的链接,这意味着我必须将GUI作为一个线程,在后端执行操作的类作为一个单独的线程??引用链接:
程序员不需要提供显式创建这些线程的代码:它们由运行时或Swing框架提供。程序员的工作是利用这些线程创建一个响应迅速、可维护的Swing程序。
请在重构代码和可能引入错误之前通读这篇简短的教程,它会让您更清楚。Thanx。这真的很有帮助。好吧,如果我理解正确,这意味着我必须将GUI作为一个线程,在后端执行操作的类作为一个单独的线程??引用链接:
程序员不需要提供显式创建这些线程的代码:它们由运行时或Swing框架提供。程序员的工作是利用这些线程创建一个响应迅速、可维护的Swing程序。
请在重构代码和可能引入错误之前通读这篇简短的教程,它会让您更清楚。Thanx。这真的很有帮助。