Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 如何使用2个按钮使多线程swing gui应用程序启动/停止线程_Java_Multithreading_Swing - Fatal编程技术网

Java 如何使用2个按钮使多线程swing gui应用程序启动/停止线程

Java 如何使用2个按钮使多线程swing gui应用程序启动/停止线程,java,multithreading,swing,Java,Multithreading,Swing,我有一个单独的类实现runnable,但是每当我启动线程时,我都不能按下GUI上的stop按钮。我不确定我是否做得正确,因为我以前在这种规模的Java项目中从未做过多线程。我已经深入这个项目,直到现在我还没有测试停止线程功能 我研究过如何实现这样的事情,但我不确定如何实现: 这些是启动和停止线程的代码位 Runnable r; Thread t1; String token,proxies,sID,msgC; 这就是我在另一个线程中初始化的类的样子 public class BotFunc i

我有一个单独的类实现runnable,但是每当我启动线程时,我都不能按下GUI上的stop按钮。我不确定我是否做得正确,因为我以前在这种规模的Java项目中从未做过多线程。我已经深入这个项目,直到现在我还没有测试停止线程功能

我研究过如何实现这样的事情,但我不确定如何实现:

这些是启动和停止线程的代码位

Runnable r;
Thread t1;
String token,proxies,sID,msgC;
这就是我在另一个线程中初始化的类的样子

public class BotFunc implements Runnable {
    private String token1,proxies1,sID1,msgC1;
    
    public BotFunc(String token,String proxies,String sID,String msgC) {
           token1=token;proxies1=proxies;sID1=sID;msgC1=msgC;
           run();
       }
    
    public void run()
    {
        {
            {
                System.out.println("t1 running");
                //there were about 1000 lines here that I deleted in which I start 2 other threads
            }
        }
    }
}

你也可以看到我在哪里写“/”我在这里删除了大约1000行,其中我启动了另外两个线程。“初始化的类与BotFunc类非常相似,我想知道如何中断这些线程。

我想问题在于调用
run()
来自
BotFunc
的构造函数:

public BotFunc(String token,String proxies,String sID,String msgC) {
       token1=token;proxies1=proxies;sID1=sID;msgC1=msgC;
       run();  // <---- DON'T DO THIS!!
   }

从ctor调用
run()
会导致GUI线程运行
Runnable
,因为调用ctor的是GUI线程,而ctor的主体只是在GUI线程上执行。

我无法按下GUI上的停止按钮。
GUI是否仍在运行?通常这意味着您已经阻止了主GUI线程。上面的方法调用在任何时间段内都执行吗?我不确定。GUI并没有完全冻结,但我不能按任何按钮。我可以移动它,不像我以前使用的C++应用程序完全冻结。移动主窗口是由OS处理的,我不认为java被牵涉进来。只是处理GUI和事件的另一种方式,Java让操作系统处理一些窗口函数。我可以做什么呢?只是不要调用
run()
。你为什么要这么做?当您调用
Thread.start()
时,代码将被执行,无需在ctor中运行此命令。
public class BotFunc implements Runnable {
    private String token1,proxies1,sID1,msgC1;
    
    public BotFunc(String token,String proxies,String sID,String msgC) {
           token1=token;proxies1=proxies;sID1=sID;msgC1=msgC;
           run();
       }
    
    public void run()
    {
        {
            {
                System.out.println("t1 running");
                //there were about 1000 lines here that I deleted in which I start 2 other threads
            }
        }
    }
}
public BotFunc(String token,String proxies,String sID,String msgC) {
       token1=token;proxies1=proxies;sID1=sID;msgC1=msgC;
       run();  // <---- DON'T DO THIS!!
   }
/* Fake Thread implementation */
public class Thread {
   public void start() {
     /* starts a new thread, then... */
     run(); // just calls run()
   }
}