我是Stackoverflow的新手。我在项目到学校的java / swing中遇到了问题。
该项目是一项测试服务。我想在运行检查与服务器连接的主程序之前运行一个额外的窗口。检查连接后,它应该启动程序的主窗口并消失。如果我手动点击startProgramButton
它就可以了。但是,如果程序在启动时连接到服务器,则程序的主窗口将启动,但此窗口不会消失。
public class PreForm extends javax.swing.JFrame {
/**
* Creates new form PreForm
*/
MainForm form1;
Settings form2;
public PreForm() {
initComponents();
checkConnection();
}
private void settingsButtonActionPerformed(java.awt.event.ActionEvent evt) {
errorLabel.setText("");
form2 = new Settings();
form2.setVisible(true);
}
private void runProgramButtonActionPerformed(java.awt.event.ActionEvent evt) {
checkConnection();
}
private void checkConnection() {
if (hostAvailabilityCheck()) {
runMainProgram();
} else
errorLabel.setText("<html>Error connect to server!<br>"
+ "Check connect settings and try again!</html>");
}
private boolean hostAvailabilityCheck() {
try (Socket s = new Socket(SettingsFile.getAddress(), Integer.parseInt(SettingsFile.getPort()))) {
return true;
} catch (IOException ex) {
/* ignore */
}
return false;
}
private void runMainProgram() {
this.setVisible(false);
form1 = new MainForm();
form1.setVisible(true);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new PreForm().setVisible(true);
}
});
}
因此,在运行程序后,执行checkConnection
方法。然后执行runMainProgram
方法。这就是this.setVisible (false)
代码进来的地方,它应该隐藏窗口,但它会保留。但只有在构造函数中启动checkConnection
方法时。如果您通过startProgramButton
手动运行,则会隐藏此窗口。