Java - Устаревший API - DataInputStream.readLine - PullRequest
0 голосов
/ 18 июля 2010

Мой проф. дал мне этот пример TCP / UDP, и он сказал, что это работает для него. Однако, когда я иду на компиляцию, я получаю устаревшую ошибку API, говоря, что readLine больше не используется ...

Как мне справиться с этим?

Код:

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

public class Server{

    static  Socket clientSocket = null;
    static  ServerSocket serverSocket = null;

    // This chat server can accept up to 10 clients' connections

    static  clientThread t[] = new clientThread[10];

    public static void main(String args[]) {

    // The default port

    int port_number=2222;

    if (args.length < 1)
        {
        System.out.println("Usage: java MultiThreadChatServer \n"+
                   "Now using port number="+port_number);
        } else {
        port_number=Integer.valueOf(args[0]).intValue();
        }

        try {
        serverSocket = new ServerSocket(port_number);
        }
        catch (IOException e)
        {System.out.println(e);}

    while(true){
        try {
        clientSocket = serverSocket.accept();
        for(int i=0; i<=9; i++){
            if(t[i]==null)
            {
                (t[i] = new clientThread(clientSocket,t)).start();
                break;
            }
        }
        }
        catch (IOException e) {
        System.out.println(e);}
    }
    }
}

class clientThread extends Thread{

    DataInputStream is = null;
    PrintStream os = null;
    Socket clientSocket = null;
    clientThread t[];

    public clientThread(Socket clientSocket, clientThread[] t){
    this.clientSocket=clientSocket;
        this.t=t;
    }

    public void run()
    {
    String line;
        String name;
    try{
        is = new DataInputStream(clientSocket.getInputStream());
        os = new PrintStream(clientSocket.getOutputStream());
        os.println("Enter your name.");
        name = is.readLine();
        os.println("Hello "+name+" to our chat room.\nTo leave enter /quit in a new line");
        for(int i=0; i<=9; i++)
        if (t[i]!=null && t[i]!=this)
            t[i].os.println("*** A new user "+name+" entered the chat room !!! ***" );
        while (true) {
        line = is.readLine();
                if(line.startsWith("/quit")) break;
        for(int i=0; i<=9; i++)
            if (t[i]!=null)  t[i].os.println("<"+name+"> "+line);
        }
        for(int i=0; i<=9; i++)
        if (t[i]!=null && t[i]!=this)
            t[i].os.println("*** The user "+name+" is leaving the chat room !!! ***" );

        os.println("*** Bye "+name+" ***");

        for(int i=0; i<=9; i++)
        if (t[i]==this) t[i]=null;

        is.close();
        os.close();
        clientSocket.close();
    }
    catch(IOException e){};
    }
}

То же самое происходит в классе Client.

Ответы [ 3 ]

6 голосов
/ 18 июля 2010

Я предполагаю, что вы хотели бы знать, что вы должны использовать вместо этого? Документ Java API гласит, что вы должны использовать BufferedReader, а они даже дают вам код!

5 голосов
/ 18 июля 2010
  1. Чтение Javadoc .Это объясняет , почему метод устарел и как его заменить.

  2. Очевидно, вам нужно использовать свой интеллект , когда вы делаетеизменение предусмотрено в Javadoc.Если вы объявляете BufferedReader, то вам нужно импортировать класс и убедиться, что код использует его.И вам нужно убедиться, что ни один код не пытается использовать завернутый поток.(Не должно быть проблемой в этом примере.)

  3. Вы можете использовать метод, несмотря на то, что он устарел.Вам просто нужно настроить компилятор Java (например, через настройки компилятора вашей IDE) для обработки устаревших методов как предупреждений, а не ошибок.(Я не рекомендовал бы это в этом случае, хотя. Было бы лучше исправить ваш код, согласно предложениям в javadoc.)

  4. Ваш профессор должен знать лучше.Этот конкретный метод был, по-видимому, впервые отмечен как устаревший в JDK 1.1.(Или, возможно, он или она проверял вашу способность самостоятельно решать проблемы!)

0 голосов
/ 19 июля 2010

Я получаю устаревшую ошибку API, говорящую, что readLine больше не используется

Нет, вы этого не делаете.Вы получаете предупреждение [об устаревании] о том, что метод устарел.Вы все еще можете использовать его, если вы понимаете предупреждение в Javadoc.

Однако я согласен, что код должен быть обновлен.Он должен использовать BufferedReader и BufferedWriter.(a) DataInputStream.readline () устарела, и (b) вы не должны использовать PrintWriter или PrintStream по сети, поскольку они поглощают исключения, о которых вам нужно знать.

...