Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 JFrame中的内容不';从特定方法调用时不显示_Java_Swing_Concurrency_Serversocket_Event Dispatch Thread - Fatal编程技术网

Java JFrame中的内容不';从特定方法调用时不显示

Java JFrame中的内容不';从特定方法调用时不显示,java,swing,concurrency,serversocket,event-dispatch-thread,Java,Swing,Concurrency,Serversocket,Event Dispatch Thread,JFrame WaitingFrame中的内容未按预期显示。这本质上就是我要做的: package org.brbcoffee.missinggui; import java.net.*; import java.io.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Main { public static KeynoteServer server; publi

JFrame WaitingFrame中的内容未按预期显示。这本质上就是我要做的:

package org.brbcoffee.missinggui;

import java.net.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main {
    public static KeynoteServer server;
    public static void main(String[] args){
        JFrame frame = new JFrame("SSCCE");
        JButton btn = new JButton("Test");
        btn.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent arg0) {
                connectToPhone();
            }
        });
        frame.add(btn);
        frame.pack();
        frame.setVisible(true);
    }
    public static void connectToPhone(){
        WaitingFrame wf = new WaitingFrame();
        wf.setVisible(true);
        server = new KeynoteServer();
        if (server.setup()){
            System.out.println("Server set up and connected");
        } else {
            System.out.println("Couldn't connect");
        }
        wf.dispose();
    }
}   

@SuppressWarnings("serial")
class WaitingFrame extends JFrame {
    public WaitingFrame(){
        setTitle("Waiting");
        this.setLocationByPlatform(true);

        JLabel label = new JLabel("Waiting for client..."); // This will never show
        JPanel content = new JPanel();          
        content.add(label);

        this.add(content);
        pack();
    }
}
class KeynoteServer{
    private int port = 55555;
    private ServerSocket server;
    private Socket clientSocket;

    public boolean setup() {
        try {
            server = new ServerSocket(55555);
            server.setSoTimeout(10000);
            clientSocket = server.accept();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

调用setup()时,确实会显示WaitingFrame,但缺少内容。我尝试过不同的图像格式,但它确实可以从其他方法和类中使用,所以这不重要。有人知道这里发生了什么吗?

使用
SwingUtilities.invokeLater()/invokeAndWait()
来显示您的框架,因为所有GUI都应该从EDT更新。

1)要更快地获得更好的帮助,请发布一个。2) 请参见3)不要阻止EDT(事件调度线程)-发生这种情况时,GUI将“冻结”。为长时间运行的任务实施
SwingWorker
。请参阅以了解更多详细信息。谢谢安德鲁,我将努力使其成为SSCE并更新我的问题。我也会将我所有的项目从使用多个JFrame中移开,特别是在我的任务栏中有几个图标的部分实际上一直困扰着我,所以我无法理解为什么我一直这么做。编辑不错(但仍然希望看到SSCCE)。这是我在不破坏它的情况下所能得到的SSCCE。现在我知道我做错了什么,我就要放弃了!非常感谢。正确地使用它(至少我希望我正确地使用它)解决了我的问题。我整晚都在为这件事挠着头,扯着头发,多亏了你,现在我终于可以睡觉了。如果我有足够的声望投票支持你。。。