2013-12-12 63 views
0

我試圖創建一個聊天客戶端/服務器網絡,我認爲它對服務器來說工作正常,但客戶端有一些問題,因爲它有一個棄用的警告,然後我程序告訴我使用該標誌 - Xlint,我跑的javac -Xlint:棄用ChatClient,但我不知道怎樣做才能修復這個警告聲明:如何解決ChatClient.java中的readLine()棄用警告?

ChatClient.java:47:警告:[折舊]的readLine()在DataInputStream所已棄用 流輸出.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

錯誤,請使用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(console);然後我插入streamOut.writeUTF(行)。它看起來像這樣: (...) line = BufferedReader.readLine(console); streamOut.writeUTF(line); (...) – user3097315