Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исключение NullPointerException 
:(
    Опции темы
freeKODE
Дата 18.11.2011, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



Вот такой код. Сразу после подключения клиента вылетает исключение NullPointerException ругаясь на 23 строку. Убираем первый блок try-finally (комментируем строки 23-32). Все ок никакого исключения не вылетает. Как его избежать-то? Если мне нужен первый блок try-finally
Код

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

class IncomingClients extends Thread { //треды для присоединенных клиентов
    private Socket socket;
    private BufferedReader in;
    private PrintWriter out;
    
    public IncomingClients(Socket s) throws IOException {
        socket = s;
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
        //StrIn = in.readLine(); //входящий поток в строковую, тк требует у класса обработки исключения IOException

        InetAddress socketAddress = socket.getInetAddress(); //будет вариант в одну строку, пиши
        String hostIncoming = socketAddress.getHostName();

        System.out.println("Client host: " + hostIncoming);
        start();
    }
    public void run() { //цикл приема сообщений, на данный момент будет отвечать зеркально клиенту
        try {
            while (true) {
                String strIn = in.readLine();
                System.out.println(strIn);
            }
        }
        catch (IOException e) {
            System.out.println("IO Exception");
        }
        finally {
            try {
                socket.close();
            }
            catch (IOException e) {
                System.err.println("error close");
            }
        }
        //String strIn = in.readLine();
        //System.out.println(strIn);
    }
}

public class Srv {
    public static final int PORT = 8383;
    
    public static void main (String[] args) throws IOException {
        ServerSocket srvSocket = new ServerSocket(PORT);
        System.out.println("Start " + srvSocket);
        try {
            while (true) { //бесконечно ждем клиентов
                Socket cltSocket = srvSocket.accept();
                System.out.println("connect " + cltSocket);
                new IncomingClients(cltSocket);
            }
        }
        finally {
            System.out.println("close");
            srvSocket.close();
        }
    }
}


Это сообщение отредактировал(а) freeKODE - 21.11.2011, 12:40
PM MAIL Jabber   Вверх
AlexeyVorotnikov
Дата 21.11.2011, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Строчки 11 и 12 должны выглядеть вот так:
Код

        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);



--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
freeKODE
Дата 21.11.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



Спасибо! Работает.
Если не лень, можно рассказать почему так?

Это сообщение отредактировал(а) freeKODE - 21.11.2011, 12:40
PM MAIL Jabber   Вверх
Stolzen
Дата 21.11.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Потому вы объявляете переменные in и out во второй раз и именно им присваиваете значения. Поля вашего класса при этом остаются нетронутыми и поэтому содержат в себе null.


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Skipy
Дата 21.11.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 6
Всего: 16



Потому что Вы инициализировали локальные переменные, а переменные класса так и имеют значение null.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0711 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.