2013-12-12 1 views
0

Я пытался создать чат-клиент/серверную сеть, и я думаю, что он отлично работает для сервера, но у клиента возникли проблемы, поскольку у него есть устаревшее предупреждение, и тогда программа сказала мне использовать флаг - Xlint и я побежал JAVAC -Xlint: осуждается ChatClient, но я не знаю, что нужно сделать, чтобы исправить это предупреждение о:Как разрешить устаревшее предупреждение readLine() в ChatClient.java?

ChatClient.java:47: предупреждение: [устаревания] ReadLine() в DataInputStream было устаревшее streamOut .writeUTF (Console.ReadLine());

Это мой ChatClient.java файл

import java.net.*; 
import java.io.*; 


public class ChatClient implements Runnable 
{ 
    private Socket socket    = null; 
    private Thread thread    = null; 
    private DataInputStream console = null; 
    private DataOutputStream streamOut = null; 
    private ChatClientThread client = null; 

public ChatClient(String serverName, int serverPort) 
{ 
    System.out.println("Establishing connection to server..."); 

    try 
    { 
     // Establishes connection with server (name and port) 
     socket = new Socket(serverName, serverPort); 
     System.out.println("Connected to server: " + socket); 
     start(); 
    } 

    catch(UnknownHostException uhe) 
    { 
     // Host unkwnown 
     System.out.println("Error establishing connection - host unknown: " + uhe.getMessage()); 
    } 

    catch(IOException ioexception) 
    { 
     // Other error establishing connection 
     System.out.println("Error establishing connection - unexpected exception: " + ioexception.getMessage()); 
    } 

} 

public void run() 
{ 
    while (thread != null){ 
     try 
     { 
      // Sends message from console to server 
      streamOut.writeUTF(console.readLine()); 
      streamOut.flush(); 
     } 

     catch(IOException ioexception) 
     { 
      System.out.println("Error sending string to server: " + ioexception.getMessage()); 
      stop(); 
     } 
    } 
} 


public void handle(String msg) 
{ 
    // Receives message from server 
    if (msg.equals(".quit")) 
    { 
     // Leaving, quit command 
     System.out.println("Exiting...Please press RETURN to exit ..."); 
     stop(); 
    } 
    else 
     // else, writes message received from server to console 
     System.out.println(msg); 
} 

// Inits new client thread 
public void start() throws IOException 
{ 
    console = new DataInputStream(System.in); 
    streamOut = new DataOutputStream(socket.getOutputStream()); 
    if (thread == null) 
    { 
     client = new ChatClientThread(this, socket); 
     thread = new Thread(this);     
     thread.start(); 
    } 
} 

// Stops client thread 
public void stop() 
{ 
    if (thread != null) 
    { 
     thread.stop(); 
     thread = null; 
    } 
    try 
    { 
     if (console != null) console.close(); 
     if (streamOut != null) streamOut.close(); 
     if (socket != null) socket.close(); 
    } 

    catch(IOException ioe) 
    { 
     System.out.println("Error closing thread..."); } 
     client.close(); 
     client.stop(); 
    } 


public static void main(String args[]) 
{ 
    ChatClient client = null; 
    if (args.length != 2) 
     // Displays correct usage syntax on stdout 
     System.out.println("Usage: java ChatClient host port"); 
    else 
     // Calls new client 
     client = new ChatClient(args[0], Integer.parseInt(args[1])); 
} 

} 

class ChatClientThread extends Thread 
{ 
    private Socket   socket = null; 
    private ChatClient  client = null; 
    private DataInputStream streamIn = null; 

public ChatClientThread(ChatClient _client, Socket _socket) 
{ 
    client = _client; 
    socket = _socket; 
    open(); 
    start(); 
} 

public void open() 
{ 
    try 
    { 
     streamIn = new DataInputStream(socket.getInputStream()); 
    } 
    catch(IOException ioe) 
    { 
     System.out.println("Error getting input stream: " + ioe); 
     client.stop(); 
    } 
} 

public void close() 
{ 
    try 
    { 
     if (streamIn != null) streamIn.close(); 
    } 

    catch(IOException ioe) 
    { 
     System.out.println("Error closing input stream: " + ioe); 
    } 
} 

public void run() 
{ 
    while (true) 
    { try 
     { 
      client.handle(streamIn.readUTF()); 
     } 
     catch(IOException ioe) 
     { 
      System.out.println("Listening error: " + ioe.getMessage()); 
      client.stop(); 
     } 
    } 
} 
} 

Я думаю, что проблема заключается в использовании .readline(), но мне нужна помощь, чтобы решить эту проблему.

+0

Err, используйте метод, упомянутый в заявлении об отмене Javadoc? – EJP

ответ

0

Вы можете добавить аннотацию @SuppressWarnings("deprecation") к вашему классу или методу для подавления предупреждения. Устаревание обычно означает, что метод или класс будут удалены в следующей крупной версии, но сохранены в текущей версии для обратной совместимости. Обычно, если что-то аннотируется как @Deprecated, это потому, что был написан новый метод или класс, который выполняет одну и ту же задачу более чистым способом, поэтому я бы не стал предлагать просто добавить аннотацию @SuppressWarnings, но изучив правильный способ чтения строки в версию Java, которую вы используете.

+0

Для остановки() устаревшего предупреждения я использовал прерывание(), и он работал (я думаю ...), но что-то говорит мне, что я сделал что-то, чего я не должен был делать. Для этого предупреждения (readLine()) есть ли способ узнать правильный способ чтения строки в java? – user3097315

+0

Вот сообщение об альтернативных методах чтения строки теперь, когда метод, который вы используете, устарел http://stackoverflow.com/questions/5611387/datainputstream-deprecated-readline-method – drembert

+0

Я все еще не мог заставить его работать с этими методами, но, возможно, это на правильном пути ... я буду продолжать пытаться. – user3097315

0

Концептуальная проблема заключается в том, что DataInputStream не является API, который предназначен для обработки текста. Метод readLine имеет твердое предположение о том, что схема кодирования символов потоков.

Лучший способ ввода строки из System.in - обернуть его как BufferedReader и использовать BufferedReader.readLine().

Если вы проигнорируете проблему (например, с помощью @SuppressWarning), вы обнаружите, что ваше приложение управляет символами, если консоль настроена на использование некоторых кодировок символов. Я подозреваю, что UTF-8 сломается, например.

+0

Я думал об этой проблеме, SuppressWarning, похоже, не подходит, потому что он будет игнорировать проблему, как вы сказали, и программа не передает информацию на сервер. Я попытался BufferedReader.readLine(), я не знаю, правильно ли я использовал его, но он все еще не работает. – user3097315

+0

Если вы показали нам код, кто-то другой сможет помочь. Возможно, ваша проблема не связана с readLine. –

+0

У меня нормальный клиентский код в верхнем разделе, я просто добавил его до streamOut.writeUTF (console.readLine()); переменная строка = BufferedReader.readLine (консоль); а затем я вставил streamOut.writeUTF (строка). Он будет выглядеть так: (...) line = BufferedReader.readLine (console); streamOut.writeUTF (строка); (...) – user3097315