Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 13.12.2009
Сообщений: 39
1

Ошибка: Cannot make a static reference to the non-static method

27.09.2016, 20:08. Показов 3401. Ответов 2
Метки нет (Все метки)

решил учить андроид.
решил написать чат, но при создании сервера на Java по примеру на сайте у меня возникла ошибка:
Cannot make a static reference to the non-static method SampleServer(int, Socket) from the type ServerSockClass
нельзя создать статическую ссылку на не статический метод.

в примере я так понял создается поток в котором есть класс Socket и переменная num.
в главном статическом методе main вызывается не статическая функция SampleServer(i, server.accept()); со статическими параметрами i и Socket, которая ждет клиента. вот тут и происходит ошибка.

почему я не могу её вызвать мне не понятно. я начинающий разработчик и тут ошибка даже не в сетях а в статических данных которая мне не понятна.

или дайте ссылку на рабочий пример java сокет сервера.


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.io.*;
import java.net.*;
 
class ServerSockClass extends Thread
{
    Socket s;
    int num;
 
    public static void main(String args[])
    {
        try
        {
            int i = 0; // счётчик подключений
 
            // привинтить сокет на локалхост, порт 3128
            ServerSocket server = new ServerSocket(3128, 0,
                    InetAddress.getByName("localhost"));
 
            System.out.println("server is started");
 
            // слушаем порт
            while(true)
            {
                // ждём нового подключения, после чего запускаем обработку клиента
                // в новый вычислительный поток и увеличиваем счётчик на единичку
                SampleServer(i, server.accept()); // - тут ошибка
                i++;
            }
        }
        catch(Exception e)
        {System.out.println("init error: "+e);} // вывод исключений
    }
 
    public void SampleServer(int num, Socket s)
    {
        // копируем данные
        this.num = num;
        this.s = s;
 
        // и запускаем новый вычислительный поток (см. ф-ю run())
       setDaemon(true);
       setPriority(NORM_PRIORITY);
       start();
    }
 
    public void run()
    {
        try
        {
            // из сокета клиента берём поток входящих данных
            InputStream is = s.getInputStream();
            // и оттуда же - поток данных от сервера к клиенту
            OutputStream os = s.getOutputStream();
 
            // буффер данных в 64 килобайта
            byte buf[] = new byte[64*1024];
            // читаем 64кб от клиента, результат - кол-во реально принятых данных
            int r = is.read(buf);
 
            // создаём строку, содержащую полученную от клиента информацию
            String data = new String(buf, 0, r);
 
            // добавляем данные об адресе сокета:
            data = ""+num+": "+"\n"+data;
 
            // выводим данные:
            os.write(data.getBytes());
 
            // завершаем соединение
            s.close();
        }
        catch(Exception e)
        {System.out.println("init error: "+e);} // вывод исключений
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2016, 20:08
Ответы с готовыми решениями:

Ошибка “non-static method cannot be referenced from a static context”
Проблема в том, что в одном классе он просто сделать методы static, а в другом - требует обратного...

Возникает ошибка "An object reference is required for the non-static field, method, or property"
Есть два класса. Один наследуется от другого. В унаследованном класе пытаюсь перадать в конструктор...

Non-Static method cannot be referenced from a static context
Всем привет! Не могу никак разобраться со статическими и нестатическими классами в Java. Создал 2...

Ошибка "A field initializer cannot reference the non-static field, method, or property"
Здравствуйте,объясните пожалуйста,почему возникает ошибка:"A field initializer cannot reference the...

2
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
27.09.2016, 21:10 2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.io.*;
import java.net.*;
 
class ServerSockClass extends Thread
{
    Socket s;
    int num;
 
    public static void main(String args[])
    {
        try
        {
            int i = 0; // счётчик подключений
 
            // привинтить сокет на локалхост, порт 3128
            ServerSocket server = new ServerSocket(3128, 0,
                    InetAddress.getByName("localhost"));
 
            System.out.println("server is started");
 
            // слушаем порт
            while(true)
            {
                // ждём нового подключения, после чего запускаем обработку клиента
                // в новый вычислительный поток и увеличиваем счётчик на единичку
                new ServerSockClass(i, server.accept()); // - тут ошибка
                i++;
            }
        }
        catch(Exception e)
        {System.out.println("init error: "+e);} // вывод исключений
    }
 
    public ServerSockClass(int num, Socket s)
    {
        // копируем данные
        this.num = num;
        this.s = s;
 
        // и запускаем новый вычислительный поток (см. ф-ю run())
       setDaemon(true);
       setPriority(NORM_PRIORITY);
       start();
    }
 
    public void run()
    {
        try
        {
            // из сокета клиента берём поток входящих данных
            InputStream is = s.getInputStream();
            // и оттуда же - поток данных от сервера к клиенту
            OutputStream os = s.getOutputStream();
 
            // буффер данных в 64 килобайта
            byte buf[] = new byte[64*1024];
            // читаем 64кб от клиента, результат - кол-во реально принятых данных
            int r = is.read(buf);
 
            // создаём строку, содержащую полученную от клиента информацию
            String data = new String(buf, 0, r);
 
            // добавляем данные об адресе сокета:
            data = ""+num+": "+"\n"+data;
 
            // выводим данные:
            os.write(data.getBytes());
 
            // завершаем соединение
            s.close();
        }
        catch(Exception e)
        {System.out.println("init error: "+e);} // вывод исключений
    }
}
1
0 / 0 / 0
Регистрация: 13.12.2009
Сообщений: 39
28.09.2016, 00:51  [ТС] 3
спасибо +.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2016, 00:51

Non static method cannot be referenced from static
на 12й строчке выдает такую ошибку и я правда не знаю почему package com.epam.as.solarsystem.stm;...

Java9, лямбда, ошибка non-static method
Всем здравия. По работе немного сталкиваюсь с Java(автотесты), ну и пытаюсь повысить свою...

ОШИБКА Strict Standards: Non-static method Configure::getInstance()
Уважаемые форумчане необходима помощь в решении проблем (возникли при переносе сайта на др...

Ошибка: non-static variable this cannot be referenced from a static context
Добрый вечер! Не пинайте сильно ногами, недавно решил взяться за обучение языку Java, что в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru