Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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 GUI在联网前被挂起_Java_Swing_User Interface_Networking_Event Dispatch Thread - Fatal编程技术网

Java GUI在联网前被挂起

Java GUI在联网前被挂起,java,swing,user-interface,networking,event-dispatch-thread,Java,Swing,User Interface,Networking,Event Dispatch Thread,我正在用Java开发一个游戏。 在服务器端,在将信息发送到客户端之前,我在一个地方更改了gui。 当我在没有网络部分(代码中的标记1)的情况下运行它时,它运行得很好。但是当我运行网络部分时(请注意,它是在gui部分之后完成的,我也编码了一个5秒睡眠线程部分),gui挂起 下面是我们的代码的一小段: public void startgame() { Main.setx=Start.setx; Main.sety=Start.sety; gui1 = new Main();

我正在用Java开发一个游戏。 在服务器端,在将信息发送到客户端之前,我在一个地方更改了gui。 当我在没有网络部分(代码中的标记1)的情况下运行它时,它运行得很好。但是当我运行网络部分时(请注意,它是在gui部分之后完成的,我也编码了一个5秒睡眠线程部分),gui挂起

下面是我们的代码的一小段:

public void startgame()
{
    Main.setx=Start.setx;
    Main.sety=Start.sety;
    gui1 = new Main(); //  Bind it
    gui1.setOpaque(true);
    container.add(gui1);
    container.remove(hostpanel);
    container.setSize(Start.setx,Start.sety);
    container.setPreferredSize(new Dimension(Start.setx,Start.sety));
    container.setVisible(true);
    container.repaint();
    gui=(Main)gui1;                   // 1
try {
        System.out.println("Thread sleeping");
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("Thread awake");
    if(vector.get(0)!=null)
    {
        pl1=new Human_player(vector.get(0));
        pl1.send(1);
    }
    else
    {

    }
    if(vector.get(1)!=null)
    {
        pl2=new Human_player(vector.get(1));
        pl2.send(2);
    }
    else
    {

    }
    if(vector.get(2)!=null)
    {
        pl3=new Human_player(vector.get(2));
        pl3.send(3);
    }
    else
    {

    }
    ArrayList<Integer> cards=new ArrayList<Integer>();
    int i;
    for(i=0;i<=51;i++)
    {
        cards.add(i,i);
    }
    Collections.shuffle(cards);
    table=new Table(cards.get(0),cards.get(1),cards.get(2),cards.get(3),4);
    Vector<Integer> temp=new Vector<Integer>();
    for(i=4;i<16;i++)
    {
        temp.add(cards.get(i));
    }
    pl1.set_cards(temp);
    if(pl1.type=="human")
    {
        pl1.send(temp);
        pl1.send(table.heaps.get(0).get(0));
        pl1.send(table.heaps.get(1).get(0));
        pl1.send(table.heaps.get(2).get(0));
        pl1.send(table.heaps.get(3).get(0));
    }
    temp.clear();
    for(i=16;i<28;i++)
    {
        temp.add(cards.get(i));
    }
    pl2.set_cards(temp);
    if(pl2.type=="human")
    {   
        pl2.send(temp);
        pl2.send(table.heaps.get(0).get(0));
        pl2.send(table.heaps.get(1).get(0));
        pl2.send(table.heaps.get(2).get(0));
        pl2.send(table.heaps.get(3).get(0));
    }
    System.out.println("Making Initial arrangements");
    temp.clear();
    for(i=28;i<40;i++)
    {
        temp.add(cards.get(i));
    }
    System.out.println("Making Initial arrangements");
    pl3.set_cards(temp);
    if(pl3.type=="human")
    {
        System.out.println("Making Initial arrangements");
        pl3.send(temp);
        pl3.send(table.heaps.get(0).get(0));
        pl3.send(table.heaps.get(1).get(0));
        pl3.send(table.heaps.get(2).get(0));
        pl3.send(table.heaps.get(3).get(0));
        System.out.println("Initial arrangement made");
    }
    for(i=40;i<52;i++)
    {
        mycards.add(cards.get(i));
    }
    playgame();
}
public void startgame()
{
Main.setx=Start.setx;
Main.sety=Start.sety;
gui1=newmain();//绑定它
gui1.setOpaque(true);
container.add(gui1);
容器。移除(主机面板);
container.setSize(Start.setx,Start.sety);
container.setPreferredSize(新维度(Start.setx,Start.sety));
container.setVisible(true);
container.repaint();
gui=(Main)gui1;//1
试一试{
System.out.println(“线程休眠”);
睡眠(10000);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
System.out.println(“线程唤醒”);
if(vector.get(0)!=null)
{
pl1=新的人类_播放器(vector.get(0));
pl1.发送(1);
}
其他的
{
}
if(vector.get(1)!=null)
{
pl2=新的人类_播放器(vector.get(1));
pl2.发送(2);
}
其他的
{
}
if(vector.get(2)!=null)
{
pl3=新的人类_播放器(vector.get(2));
pl3.发送(3);
}
其他的
{
}
ArrayList cards=新的ArrayList();
int i;

对于(i=0;iGUI在睡眠时挂起或在事件线程上执行阻塞操作。因此不要这样做。使用单独的线程。

GUI在睡眠时挂起或在事件线程上执行阻塞操作。因此不要这样做。使用单独的线程。

将长时间运行的操作转移到另一个线程的一种方法是使用
SwingWorker
。有关更多详细信息,请参阅。事实上,问题的标题具有误导性。此处的代码显示,在网络部分或阻止操作开始运行之前,已删除上一个面板,并附加了一个新面板。因此,gui在挂断前必须已更改,但它不会更改。但是,如果我将代码运行到标记1(不包括所有网络部分(顺便说一句,在gui更改代码之后))它工作得很快,我不明白这一点behaviour@nav好吧,这是你的标题。这取决于你把你的问题弄清楚。目前你只是在增加混乱。我建议你彻底编辑它,包括标题和正文,以反映你实际提出的问题,或者删除它,然后再试一次。一种将长时间运行的操作转移到另一个thr的方法ead将使用
SwingWorker
。有关更多详细信息,请参阅。实际上,问题的标题具有误导性。在这里,正如代码所示,在网络部分或阻止操作开始之前,删除了上一个面板,并附加了一个新面板。因此,gui在挂断之前必须已更改,但它不会更改。但是,如果我运行标记1之前的代码(不包括所有网络部分(顺便说一下,在gui更改代码之后))它工作得很快,我不明白这一点behaviour@nav好吧,这是你的标题。这取决于你把问题弄清楚。现在你只是在增加混乱。我建议你彻底编辑它,包括标题和正文,以反映你实际提出的问题,或者删除它,然后再试一次。