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

时间:2015-07-06 02:01:41

标签: java applet try-catch

我正在填充我的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();

  } 


}

}

1 个答案:

答案 0 :(得分:3)

Socket socket = server.accept();是一种阻止方法,这意味着在建立某个连接之前,它会等待,因此start永远不会返回,因此用户界面无法更新

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

请注意,根据本地计算机的安全设置,可能无法在小程序内建立此类连接。

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