Ответы пользователя по тегу Java
  • Через что реализовать очень простую сетевую игру?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    У Вас крайне простая игра крестики-нолики. Получается для сетевой игры нужно передавать следующее:
    - Событие новой игры ; //Идентификатор пакета 1
    - Событие установки крестика\нолика(int "x" , "y", и к примеру булевой тип isCircle)//Идентификатор пакета 2
    - Событие победы. //Идентификатор пакета 3
    - Событие ошибки(неверный ход) //Идентификатор пакета 4
    Т.е. всего 4 типа данных.
    Сетевой пакет можно представить следующим текстовым видом:
    "число_идентификатор_типа_пакета;опциональные данные;опциональные данные"
    ; - делитель(delimiter строки)

    Серверная сторона порт=7777:
    ServerSocket ss = new ServerSocket(7777); //создали сервер
    Socket socket = ss.accept();//Ждем клиента
    //Сюда попадаем только когда подключился клиента
    DataInputStream in = new DataInputStream(socket.getInputStream(); //Получаем поток ввода
    DataOutputStream out = new DataOutputStream(socket.getOutputStream()); //Получаем поток вывода
    String line = null;
    while(true) {
         line = in.readUTF(); // Тут ждем и получаем строку от клиента
         String[] data = line.split(";"); //Разделяем полученную строку в массив строк
         if(data[0].equals("1")){
         //Сбрасываем уровень начинаем новую игру}
         if(data[0].equals("2")){
         //Ставим крестик\нолик по координатам
         int x =data[1]; int y=data[2];boolean isCircle=data[3] //Не забудь типы привести, ну там Integer.parse(data[номер])
         //Ну возможно отправить ответ клиенту
        out.writeUTF(line); // шлем его же строку обратно чтобы клиент у себя отрисовал фигуру или пакет с ошибкой
        out.flush(); // заканчиваем передачу в поток.
         }
         ....
    }


    У клиента:
    Socket socket = new Socket(InetAddress.getByName("IP сервера"), 7777);  //создаем сокет
    DataInputStream in = new DataInputStream(socket.getInputStream(); //Получаем поток ввода
    DataOutputStream out = new DataOutputStream(socket.getOutputStream()); //Получаем поток вывода
    String line = null;
    while(true) {
    ... тут все аналогично серверу только с правками для клиента
    }

    Если хочется абстракции то заверни псевдокод выше в свой класс.
    Spring вообще не для этих целей служит, в данной задаче это всеравно что забивать гвозди микроскопом.
    Для вашей задачи сокеты это какраз то что и нужно изза того что все крайне просто и на глазах Проблем с сокетами тоже никаких быть не может.
    Ответ написан
    2 комментария
  • Какую роль выполняет метод newInstance в Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Это рефлексия. У тебя неизвестный тип класса Class type. Далее тебе нужно создать новый экземпляр его для этого и используется динамическое создание класса type.newInstance().
    При обычном раскладе это было бы так MyDataClass type. и соответсвенно type = new MyDataClass();
    Ответ написан
    5 комментариев
  • Lightweight socket library for java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Собственно ответ вы уже нагуглили, лучшее конечно netty. В ней есть абсолютно все необходимое, многопоточная и очень быстрая.
    Другой вопрос если нужно что то в пару строк, то есть "обвязки" поверх той же netty к примеру kryonet.
    Ответ написан
  • Как в Swing изменить соотношение размеров элементов?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Почитай про менеджеры компоновки. Если описываешь все в коде то смотри в сторону GridBagLayout. Если пользуешься визуальными редакторами ui то там вероятнее всего будет SpringLayout.
    Ответ написан
    Комментировать
  • Как получить информацию о системе?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Совсем немного информации можно получить через Runtime.getRuntime().методы() но верить им крайне не рекомендуется!
    Был еще замечательный проект SIGAR но кажется он умер.
    И самый верный способ это написать нативную либу(dll\so\dylib) под нужную платформу а затем зацепить ее через JNI.
    Ответ написан
    Комментировать
  • Передача в конструктор любого объекта?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Это называется generics.
    class MyClass<T extends MyInterface>{
    private T val;
    public MyClass(T obj){
    val= obj;
    ...
    }
    }

    В вашей ситуации можно обойтись както так:
    public MyClass(MyInterface obj){
    ...
    }
    Ответ написан
    Комментировать
  • Из-за чего может зависать работа с сетью в приложении на java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    1) Тут есть теги для кода.
    2) Лучше используйте конструкцию try-with-resources
    3) До конца не уверен т.к. желательно понять как именно приведенный код используется но сильно вероятно что проблема именно с ресурсами, что то закрыл или не открыл.
    3.1) Еще не менее вероятно проблема в проксях, возможно дохлая прокси и соединение по таймауту не отшибается и тупо начинает ждать когда же он придет.
    3.2) Проверяй responseCode . Сначало делаешь conn.connect(). затем conn.getResponseCode(). Смотри что бы код ответа был правильным.
    3.3) Обязательно задай вручную таймаут conn.setConnectTimeout(милисекунд) и только после уже все манипуляции в т.ч. получение responseCode;
    Ответ написан
    Комментировать
  • Какие технологии нужно знать для создания мессенджера?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Вместо нагорождения очередных колхозов проще взять XMPP\IRC. Библиотеки есть вообще под любой язык, все максимально лаконично и обкатано десятками лет. В случае xmpp есть невероятное количество xep'ов на любой случай.
    Ответ написан
    Комментировать
  • Как показать активность или неактивность CheckBox после запуска окна в JavaFX????

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Читаешь параметры из твоего конфига и дальше
    нужный_чекбокс.setSelected(true); //поставить галочку
    Ответ написан
  • Как из java организовать http запросы с использованием различных анонимных прокси?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Берете список "разных анонимных" прокси. Дальше просто
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("ip прокси", ПОРТ_ПРОКСИ));
    conn = new URL(urlString).openConnection(proxy);
    Ответ написан
    Комментировать
  • Java Как из списка типа A сделать список типа В не используя циклы?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Если А и В реализуют единый интерфейс или отнаследованы от одного класса то очень легко. Если у них принципиально разные типы на корню то только через Object.
    Для перечисленных выше вариантов будет както так:
    bList = new ArrayList<Интерфейс\класс родителя>(aList);

    или так
    bList = (ArrayList<Интерфейс\класс родителя>)aList.clone();
    Ответ написан
  • Почему не получается создать Hash Map c нужной информацией?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    вам той темы мало было.
    1) setOfCoupons.entrySet().iterator().next().getKey() не вернет то что вы думаете в данной ситуации, будет всегда возвращать только первый элемент.
    Ответ написан
    8 комментариев
  • Как преобразовать ArrayList в int[]?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Если ява 8 то можно так:
    nt[] arr = list.stream().mapToInt(i -> i).toArray();

    Если ява 7-8 то можно воспользоваться apache commons вот так:
    int[] arr = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));

    Вариант с помощью google guava:
    int[] arr = Ints.toArray(list);
    ну и варианты которые выше уже написали.
    Ответ написан
    3 комментария
  • Инициализация кнопки в JavaFX?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Жесть какая.
    1) Для начала не надо объединять контроллеры между собой да еще и с классом в котором main().
    2) Для каждого fxml делай свой отдельный контроллер, хотя бы каши небудет.
    3) В Main классе оставь только функцию main и start. Переменную stage сделай публичной и статичной.
    4) Событие нажатия на кнопку для простоты можешь не писать ручками а также объявить прямо в fxml название функции которую он будет вызывать.
    5) в создании ты вызываешь initSample() и следом showPersonOverview(); , так нельзя. Меняй сцену только через stage.setScene(сцена);
    Ответ написан
    Комментировать
  • С чего начать изучение big data?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    С чего начать изучение bigdata?
    С глубокого и полного понимая языка на котором будешь работать с бигдатой и базы в которой все это лежит.
    Можно ли писать на java?
    Можно на чем угодно, хоть на брейнфаке.
    И есть ли нормальные уроки по bigdata для java?
    Бигдата не хеллоуворлд, все крайне специфично и каждый раз по особенному и неповторимому, значит надо перейти к первому вопросу и начать заново.

    Вопросы из разряда "а смогу ли я управлять самолетом? а смогу ли управлять любым если обучусь на яке? Есть ли нормальный курс чтобы обучиться и летать на любом самолете?"
    Ответ написан
    Комментировать
  • Как правильно использовать HashMap?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Подозреваю что ошибка не в приведенном коде а в другом месте. Где вы инициализируете hashmap?
    Сам hashmap это пары ключ-значение. Ключи должны быть уникальными какраз по стандартной или переопределенной hashCode(). Значения могут быть не уникальными.
    Т.е. в вашей ситуации:
    instances = new HashMap<String,CompanyObject>();
    //String - ключ, тип строка, функция hashCode() встроенная, можно не переопределять
    //CompanyObject - ваш объект с данными, на hashCode() пофиг ибо он использоваться не будет совсем
    instance.put("comp1", objectComp1); //будет добавлен
    instance.put("comp2", objectComp1); //будет добавлен т.к. хэш ключа будет другим
    instance.put("comp1", objectComp6); //оп, коллизия, в позиции "comp1" будет заменено "Значение"(objectComp1) на (objectComp6)
    Ответ написан
  • ArrayList удалить внутренний массив с помощью ссылки?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    this.arrayString= new ArrayList<>();
    хм, перечитал вопрос и понял то что нифига не понял что именно хочет получить автор.
    Ответ написан
    Комментировать
  • Есть ли конвертер кодов?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    cs2j, но, во первых код будет для десктопа. Во вторых всеравно придется огромные куски кода переписывать ручками. В третьих если используются библиотеки то у вас большие проблемы. Ну и на последок, все что связанно с графикой тоже придется писать с нуля. Если же планируете еще и под андроид закинуть то придется еще немного больше переписать.
    В общем проблем вагон и маленькая тележка, проще переписать с нуля. если же цель состоит в том чтобы на с# написать что то под андроид и иос то проще взять xamarin.
    Ответ написан
    Комментировать