Java Filedialog正在终止我的线程

Java Filedialog正在终止我的线程,java,multithreading,sockets,thread-safety,Java,Multithreading,Sockets,Thread Safety,我正在用Java编写一个套接字程序。 我在后台运行一个带有套接字服务器的GUI。 套接字服务器正在运行一个线程,该线程每10毫秒检查一次套接字消息。 它们一起运行都很好,但只要我尝试在gui中打开我的文件对话框,gui就会崩溃,但服务器仍在运行。 我认为我用错误的方式运行服务器(或服务器线程)。 如果跳过套接字,文件对话框工作正常 可能是什么问题,可能是我以错误的方式运行线程吗 (这是一节课) (这是我的帖子) (这是我的主要观点) 我只是猜一下,但我认为这与EDT有关 您正在尝试从EDT外部启

我正在用Java编写一个套接字程序。 我在后台运行一个带有套接字服务器的GUI套接字服务器正在运行一个线程,该线程每10毫秒检查一次套接字消息。 它们一起运行都很好,但只要我尝试在gui中打开我的文件对话框,gui就会崩溃,但服务器仍在运行。 我认为我用错误的方式运行服务器(或服务器线程)。 如果跳过套接字,文件对话框工作正常

可能是什么问题,可能是我以错误的方式运行线程吗

(这是一节课)

(这是我的帖子)

(这是我的主要观点)


我只是猜一下,但我认为这与EDT有关

您正在尝试从EDT外部启动对话框吗

如果您认为有可能,请尝试使用SwingUtilities静态方法(特别是isEventDispatchThread和invokeLater)磨练并纠正此问题:

()

)


hth

这里只是猜测,但我认为这与EDT有关

您正在尝试从EDT外部启动对话框吗

如果您认为有可能,请尝试使用SwingUtilities静态方法(特别是isEventDispatchThread和invokeLater)磨练并纠正此问题:

()

)

这个问题现在解决了。 似乎问题在于,我有一个扫描器在线程中每隔10毫秒等待输入(
string=sc.next();
),输入几次后,我的GUI显示出来。 我卸下了扫描仪,现在有了一个可用的应用程序。

问题现在解决了。 似乎问题在于,我有一个扫描器在线程中每隔10毫秒等待输入(
string=sc.next();
),输入几次后,我的GUI显示出来。
我删除了扫描仪,现在有了一个正常工作的应用程序。

您的代码不完整,很难说发生了什么。需要更多关于“gui崩溃”的信息(异常?冻结?)gui冻结,但服务器运行正常,没有异常或错误消息等等,还有哪些代码是有用的?文件对话框做什么?从何处调用?文件对话框从GUI中的JMenu打开,假设它选择一个文件和“getName”+“getAbsolutePath”,进一步考虑,假设通过套接字服务器发送消息中的名称和路径。您的代码不完整,很难说会发生什么。有关“GUI崩溃”的更多信息需要(异常?冻结?)Gui冻结,但服务器运行正常,没有异常或错误消息。那么,还有什么部分代码有用?文件对话框做什么?它从何处调用?文件对话框从GUI中的JMenu打开,假设它选择一个文件和“getName”+“getAbsolutePath”,在进一步思考中,假设通过套接字服务器发送消息中的名称和路径。
public ServerController(){
        ServSocket st = new ServSocket();
    Thread thread1=new Thread(st);
    thread1.start();
    }
public void run(){
    while (true) {
        try { 
            Thread.sleep(10);
        }
        catch (InterruptedException e) {}

        switch (Status) {
        case CONNECTED:
            try {

                socket = new Socket(hostIP, port);
                System.out.println("Connected on: " + hostIP + port);

                out = new PrintWriter(socket.getOutputStream(), true);
                changeStatus(STARTSENDING, true);
            }
            catch (IOException e) {
                System.out.println("disconnected");
            }
            break;
 static ServerController scon;
 static Controller cn;

 public static void main(String[] args) {
     scon = new ServerController();
      cn = new Controller();
     cn.gui();


      }