为什么 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 更容易,因为有更多基于社区的支持
我正在填充我的 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 更容易,因为有更多基于社区的支持