为什么 try-catch 不允许 java 小程序中的其他元素出现?

why is try-catch not allowing other elements in java applet to appear?

我正在填充我的 java 小程序。我正在尝试让 serverSocket 与我的 java applet 一起工作。一旦我添加了 try-catch,applet 中的所有其他元素都不会显示在 applet 中。当我注释掉 try-catch 块时,其他元素又回来了。为什么会这样? 这是代码:

import java.applet.Applet;
import java.awt.Button;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;


public class App extends Applet {

TextField input;
TextField output;

public void init()
{

    setSize(500,500);

}

public void start ()
{

    this.input = new TextField(40);
    this.output = new TextField(40);
    this.output.setEditable(false);
    Button b = new Button("send");

    this.add(b);
    this.add(input);
    this.add(output);

  try{

        ServerSocket server = new ServerSocket(8000);
        Socket socket = server.accept();
        DataInputStream inputFromClient = new DataInputStream(socket.getInputStream());
        final DataOutputStream outputToClient = new DataOutputStream(socket.getOutputStream());

        b.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent arg0) 
            {



            }


        });



  }catch(IOException e){

      e.printStackTrace();

  } 


}

}

Socket socket = server.accept(); 是一种阻塞方法,意味着在建立某些连接之前,它将等待,所以 start 永远不会 return,因此 UI 不会'待更新

将套接字连接代码卸载到单独的线程。

请注意,根据本地计算机的安全设置,可能无法从小程序中建立这种连接。

此外,AWT 在 15 多年前被 Swing 取代,您可能会发现使用 Swing API 或 JavaFX 更容易,因为有更多基于社区的支持