我正在填充我的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();
}
}
}
答案 0 :(得分:3)
Socket socket = server.accept();
是一种阻止方法,这意味着在建立某个连接之前,它会等待,因此start
永远不会返回,因此用户界面无法更新
将套接字连接代码卸载到单独的线程。
请注意,根据本地计算机的安全设置,可能无法在小程序内建立此类连接。
此外,AWT在15年前被Swing取代,您可能会发现使用Swing API或JavaFX更容易,因为有更多基于社区的支持