2010-01-11 4 views
0

У меня есть два приложения: один - сервер, а другой - клиент. Сначала я запускаю свое серверное приложение. Затем я запустил клиентское приложение. При запуске клиентского приложения появится окно с запросом на имя пользователя и пароль, и если они будут правильными, будет показано другое окно. Когда я нажимаю кнопку «Вход», ничего не происходит. Что не так?Кнопка входа не имеет видимого эффекта в приложении Java

Основной класс приложения сервера:

public static void main(String[] args) { 
    System.out.println("Server is starting..."); 

    ServerSocket server = null; 
    try { 
     server = new ServerSocket(5000); 
    } catch (IOException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    System.out.println("Server is listening..."); 
    while (true) { 
     try { 
      Socket socket = server.accept(); 
     } catch (IOException ex) { 
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     System.out.println("Client Connected..."); 

    } 
} 

класс-клиент, который имеет разъем в нем:

private static InformationClass info = new InformationClass(); 
private static Socket c; 
static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 

/** 
* @param args the command line arguments 
*/ 
public static void runAClient() { 
    try { 
     c = new Socket("localhost", 5000); 
    } catch (UnknownHostException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 
public static void clienT(){ 
    try { 
     BufferedReader read = new BufferedReader(new InputStreamReader(c.getInputStream())); 
     BufferedWriter write = new BufferedWriter(new OutputStreamWriter(c.getOutputStream())); 
     while (true) { 
      String string = reader.readLine(); 
      write.write(string, 0, string.length()); 
      write.newLine(); 

      write.flush(); 
      System.out.println(read.readLine()); 
     } 

    } catch (Exception e) { 
     System.err.println(e); 
    } 
} 

public static boolean connected() { 
    boolean bool = false; 
    if (c.isConnected()) { 
     info.setSituation("Connected"); 
     bool = true; 
    } else { 
     info.setSituation("disconnected"); 
     bool = false; 
    } 
    return bool; 
} 

Главное окно клиентского приложения, которые я начала после того, когда я запускаю сервер заявление. Часть этого для кнопки «Вход».

private void submit() { 
    String id = idField.getText(); 
    char[] pass1 = passField.getPassword(); 
    String pass = new String(pass1); 
    if (id.equals("") || pass.equals("")) { 
     ErrorFrame frame = new ErrorFrame(); 
     frame.setVisible(true); 
    } else { 
     boolean b = Manager.Test(id, pass); 
     if (b == true) { 
      Main.runAClient(); 
      boolean boOl = Main.connected(); 
      if(boOl==true){ 
       this.setVisible(false); 
       ListFrame fRAme = new ListFrame(client); 
       fRAme.setVisible(true); 
      } 
      else{ 
       JOptionPane.showConfirmDialog(this, "You couldn't connect successfully,please try again!","sign_In Problem",JOptionPane.ERROR_MESSAGE); 
       return; 
      } 
     } else { 
      JOptionPane.showConfirmDialog(this, "You have entered wrong datas,try it again"); 
      return; 
     } 
    } 
} 
+5

Я посмотрел на заголовок, увидел «восклицательные знаки!» И сказал себе: «Это, должно быть, Йоханна! ;) –

+0

- это «это», используемое в JOptionPane, видимое? – extraneon

+0

@ extraneon: да, и «это» это тот кадр, который имеет знак в button.but, я нажимаю на кнопку, но это не работает хорошо! – Johanna

ответ

4

Вы пытались выполнить свой код с помощью отладчика, чтобы точно определить, какая строка кода работает некорректно? Просто заявив, что «ничего не происходит», когда вы нажимаете на кнопку входа, не дает нам многого для продолжения.

+0

Я отлаживал, все идет хорошо. Когда я запускаю сервер, а затем клиентское приложение: кнопка входа в систему не работает.BUT, когда я не запускаю сервер (я просто запускаю клиентское приложение): кнопка входа в систему будет но исключение connectException будет выбрано. – Johanna

+0

Попробуйте добавить точку останова в методе ActionListener ActionPerformed (ActionEvent) и перейти оттуда. Какую строку кода у клиента вы тоже получаете? Каким путем вы следуете методу submit()? – Adamski

+0

Я очистил эти строки: if (boOl == true) {this.setVisible (false) ListFrame fRAme = новый ListFrame (клиент); fRAme.setVisible (true);} else { JOptionPane.showConfirmDialog (это, «Вы не смогли соединиться успешно, попробуйте еще раз!», «Sign_In Problem», JOptionPane.ERROR_MESSAGE); возвращение; } и я написал эти строки вместо: ListFrame fRAme = новый ListFrame (клиент); fRAme.setVisible (true); и кнопка входа работает хорошо.BUT, я много искал, как я могу обработать исключение connectException, но я не нашел ничего полезного. – Johanna

0

Вы уверены, что ваш метод submit() вызывается при нажатии кнопки «Войти»? Другое дело, Main.RunAClient() никогда не возвращается, постоянно спрашивая пользователя о вводе строки в системную консоль.

Смежные вопросы