我正在编写一个线程代码,它打开一个服务器套接字,当连接到达时要求用户选择一个目录。我已经尝试使用 InvokeLater() 并且它可以工作,但是我无法控制何时检索所选文件目录,因此 InvokeAndWait 看起来是正确的选择。除了它实际上没有做任何事情,我什至尝试给它一个 println 并且它似乎根本没有执行任何事情。我如何解决它?我的想法不多了。谢谢!
public class FileTransfListener implements Runnable {
protected JFileChooser dirChooser;
public FileTransfListener(JFileChooser f){
dirChooser=f;
}
@Override
public void run() {
ServerSocket serverSocket = null;
Socket socket = null;
BufferedReader in = null;
BufferedWriter out = null;
try {
serverSocket = new ServerSocket(60905);
} catch (IOException e1) {
return;
}
while(true){
try {
socket = serverSocket.accept();
String dir=null;
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
dirChooser.showOpenDialog(null);
}
});
try{
dir= dirChooser.getSelectedFile().getAbsolutePath();
}
catch(NullPointerException e){
dir=null;
}
System.out.println(dir);
}
catch (IOException ex) {
ex.printStackTrace();
try {
serverSocket.close();
}
catch (IOException e) {
e.printStackTrace();
}
} catch (InvocationTargetException |InterruptedException e1) {
e1.printStackTrace();
}
}
}
}