Ответы пользователя по тегу Java
  • Как прочитать данные из .DBX файла?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Найди в начале файла хэдер и по нему определи чье творение. Дальше если это бд то найти драйвер и пользоваться.
    Ответ написан
  • Как выполнять разные функции java программы с ярлыков?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Хоть ответ уже был отмечен но добавлю пару других вариантов.
    1) lnk имеет доку и спецификацию в которой очень много интересного. По сути проще открой ярлык блокнотом и удивишься =) Т.е. можешь работать с ярлыком как с обычным текстовым файлом.
    2) java программу можно запускать не только с аргументами. Можно сделать сколь угодно много точек входа(классов с функцией main) и вызывать нужную аргументом запуска типа
    java -cp MyJar.jar com.mycomp.myproj.MainClass2
    . Может пригодится к примеру если деалешь программу которая можно будет запустить в консольном варианте или с графикой.
    Ответ написан
    Комментировать
  • Чат на Java (Интерфейс клиента на JavaFX), как сделать?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Вот уже второй вопрос задаете и все такойже бестолковый.
    Во первых причем тут javafx вообще? Это вообще ui и никаким боком и уж темболее сложностей просто по определению быть не может ну вообще никак и никаким боком.
    Во вторых, абсолютно, подчеркиваю АБСОЛЮТНО, все что должно волновать на данный момент это архитектура. И начать НУЖНО именно с нее, сядьте, возьмите просто клочок бумаги и напишите пунктами в столбик что необходимо от чата, вот прям все что вы от него хотите, отчертите линию и справа также столбиком сгрупируйте хотелки по их смыслу, дальше уже для полученных групп справа написать псевдокод , что будет использоваться для этой фичи и какие типы данных будут ходить. Подобное я приводил уже в предудщем вашем вопросе но так и быть накидаю еще и тут пример.
    В третих, на тостер приходить надо уже с конкретной проблемой да еще и с которой нагуглить ничего не удалось, что то типа вот у меня сериализация, вот метод сериализация, вот десериализации, а вот ошибка и немогу понять почему.

    По второму пункту пример
    Хочу | Объединение схожего | Как сделать
    ----------------------------------------------------------------------------------------------------------------
    1 чат с другом | 1 | Формат (кому, откого, сообщение)
    2 история | 2 | Хранить в sql бд форматом сообщений
    3 чат со всеми | 1 | Формат (от кого, сообщение)
    4 чат со всеми но в комнате | 1 | Формат (от кого, комната, сообщение)
    5 авторизация | 3 | хранить в sql базе, передавать Форматом(логин, пароль)
    6 общение клиент сервер | | Текстовый вид, Json
    7 регистрация | 3 | хранить в sql , передавать Форматом(логин, пароль)
    n

    По результату берешь и систематизируешь уже конкретнее типа такого:
    1) Нарисовалось много разных форматов сообщений и надо их както отличать а значит сделаю класс родителя с полем int которое будет хранить тип сообщения. Проблема обмена информацией между клиентом и сервером решена полностью с обеих сторон.
    abstract class AMessage{
    int messType;
    }

    2) Необходим универсальный метод сериализации и десериализации объектов из\в json. Возьму библиотеку gson, почитав ее доки получился вот такой простой способ без колхоза. Проблема полностью решена.
    public <T> T fromJson(String json, Class<T> classOfT){
            Gson gson = new GsonBuilder().create();
            try{
                return gson.fromJson(json, classOfT);
            }catch(JsonSyntaxException jse){
                return null;
            }
        }
        public String toJson(Object obj){
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            try{
                return gson.toJson(obj);
            }catch(JsonSyntaxException jse){
                return null;
            }
        }

    3) Надо назначить и написать классы для каждого сообщения
    Для сообщения в комнату будет так
    //от кого, комната, сообщение
    class RoomMessage extends AMessage{
    String from;
    String roomName;
    String message;
    RoomMessage(String from, String roomName, String message){
     this.messType = 10;
     this.from = from;
     this.roomName = roomName;
     this.message = message;
    }
    }

    n - такой будет класс регистрации и т.д.

    Шаг n.

    Вот только теперь начинаешь писать код. Причем при написании идешь по всем шагам и только так как описал это ранее, даже если в процессе реализации это оказалось сложно\криво\глупо\неправильно.

    Программирование на самом деле состоит процентов на 90 из вот такой волокиты с написанием на бумаге всего и вся и только из 10% реализации. Кроме того таким способом все получится сделать очень быстро, логично и понятно, будет очень легко искать ошибки в программе и дебажить ее. Кроме того еще и получишь сразу почти готовую документацию которую останется только причесать и можно будет показать другому кодеру и он сразу въедет что тут и как работает. А вот заниматься написанием кода "эмпирическим" путем всегда тупиковое дело в котором будешь буксовать на месте, постоянно забывать что тут и как а главное зачем и почему неработает.

    ps еслибы я был преподавателем, а Вы студентом, надавал бы по заднице и вообще заставил вместо такой работы при мне писать от и до всю логику програмки на бумаге а затем рассказывать зачем и почему так сделал.
    Ответ написан
    Комментировать
  • Авторизация и регистрация для desktop приложения на Java, как лучше сделать?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Если по простому,а судя по вопросу это именно так, то как то так.
    Для начала вникаем что такое авторизация и регистрация и из чего состоит. Получится что есть клиент и сервер.
    Клиент для регистрации должен сказать желаемый логин и пароль. Для авторизации можно чуть усложнить и работать по 2м схемам, Первый когда клиент скажет серверу логин и пароль. Во втором логин и токен.
    *Токен тут получается после авторизации, его генерирует сервер и сообщает клиенту. Используется для минимальной защиты потому как на клиенте можно не хранить пароль а хранить только логин и токен.
    Сервер в свою очередь ждет от клиентов логин и пароль, после получения которых проверяет в своем хранилище(бд например) и отвечает клиенту сообщением состояния(ок, логин занят,ошибка, пароль простой и т.д.). Дальше он ждет от этого клиента авторизацию по одному из двух способов которая может быть по логину и паролю, тут сервер ответит также сообщением(сгенерирует токен, ошибка пароль\логин не верный). 2й вариант что ожидается логин и токен , ответ будет (ок, ошибка токен не верный).

    Общаться клиент и сервер естественно будет по сети а вот как решать уже вам. Это может быть:
    1) Голые сокеты, проще для понимания т.к. никаких библиотек уже не будет и собственно весь протокол будет ваш.
    2) Использовать какую нибудь rest подобную систему. К примеру тупо взяв сервер с php и сделать нечто похожее(понимаете смысл надеюсь) на register.php и auth.php. Соответсвенно запросы с клиента уже будут идти тупо по http
    3) Взять че покруче и на порядок сложнее, к примеру netty. Круче сокетов но сложнее в пару сотен раз хотя сделать придется по сути тоже что и на сокетах.
    4) Какой нибудь сетевой движек, к примеру kryonet. Тут конечно уже ближе к играм но почему нет? Придется читать доки и следовать принципам библиотеки, ниразу не узнав что такое сериализации и зачем она нужна.

    Для практики потом можно усложнять схему, к примеру чтобы сервер уже не просто смотрел на логин и токен клиента но и еще на его ip чтобы он совпадал. Можно обернуть все это шифрованием, реализовываться будет по разному в зависимости от того каким путем пойдете. Реализовать еще и временный токен этой сессии или же тупо еще одним параметром от клиента типа что за устройство, тогда клиент под одним логином сможет авторизоваться одновременно с нескольких устройств и никто никому мешать не будет.

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

    Конкретно для javafx я тут вообще в этой теме ничего не вижу да и вообще быть ничего не может т.к. это всеголишь библиотека для отрисовки интерфейса программы с коллекциями предназначенными помочь это сделать еще удобнее. Аналогично ей существуют еще ее предшественники awt и swing которые посложнее но темнеменее работают и легче по ресурсам.
    Ответ написан
    4 комментария
  • Есть ли хорошая библиотечка для работы с форматами телефонных номеров?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Это уже крайняя лень, что сложного то в такой элементраной задаче? Ввод по маске? Если же уже данные приходят откудато то что сложного удалить со строки все кроме цифр а потом сделать так как нужно или удобно? Это все пару строк кода займет.
    Ответ написан
    Комментировать
  • Как сделать, чтобы колонка была по всё ширине?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    биндишь ширину колонки на ширину таблицы типа такого column.prefWidthProperty().bind(tableView.widthProperty())
    Ответ написан
    Комментировать
  • В jar не работает консоль. Что делать?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Запускать надо не двойным кликом а через консоль командой "java -jar название.jar" или ассоциируй по умолчанию к jar файлам именно java.exe.
    Пояснение:
    В windows в jre существует 2 ехе файла рантайма
    java.exe - по умолчанию как бы консольное но также легко и с графикой
    javaw.exe - консоль будет скрыта НО приложение будет работать, графика будет выводиться как положено.

    UPD если манифеста нет или в нем не указана точка входа то будет так "java -jar название.jar пакет.класс_мейна"
    Ответ написан
    6 комментариев
  • Как правильно отловить исключения в многопоточном javafx-приложении?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    То что поток может рухнуть уже проблема, ловите исключения внутри потока от ваших функций, тот же запрос к бд\хттп а уже по исключению решать что делать, но ни как не ронять весь поток.
    Ответ написан
    Комментировать
  • Как модифицировать метод в java в RUNTIME?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Можно но крайне геморойно и вероятнее всего овчинка выделки стоить не будет. Смотри Javassist.
    Ответ написан
    Комментировать
  • Что эффективнее использовать для разработки игр? C# или Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Java и libgdx к ней. Из коробки под все платформы разом (windows\linux\macos\android\ios\web), никаких утилит чисто графических нет что будет очень удобно для незрячего и экранных читалок.
    Ответ написан
    2 комментария
  • Как изменить содержимое сцены, загруженной из fxml файла, сразу же после запуска программы?

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

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Рука_лицо.жпг
    Для начала срочно бежать заново учить школьный курс геометрии, затем следом основы компьютерной графики, дальше бежать в апи libgdx. Теперь включаем думалку и понимаем как это просто.
    Ответ написан
    Комментировать
  • Изучения Java на примере Android приложений?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Изучать java через андроид не лучшая идея т.к. в андроиде достаточно много сложностей и расхождений. Лучше учить чистый java se и на этой основе уже конкретно android тогда будет понимание внутреннего устройства api андроида.
    Почитать рекомендую "Брюс Эккель — Философия Java" и параллельно "Эрик Фримен, Элизабет Фримен - Паттерны проектирования".
    Ответ написан
    2 комментария
  • Как распараллелить вычислительно Java-приложение на несколько машин?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Я конечно не сталкивался на практике но много читал про решения подобных задач и вот пара мыслей:
    1) Если все лежит в БД то почему бы не начинать параллелить именно с нее. Скажем в БД (возможно отдельной) метить кто забрал себе данные, дальше ноды цепляются к БД, берут пачку данных и метят что они уже в работе, т.е. нода 2 не возьмет данные которые уже на ноде 1. Это из простых решений в лоб.
    2) Все последующие это реализациия в библиотеках, gridgain , штатный RMI, Apache Ignite, Apache River.
    Ответ написан
    Комментировать
  • Как правильно описать сущность в hibernate?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Null value was assigned to a property of primitive >type
    Ответ написан
  • Начиная, с какой версии java поддерживает автоматический вывод типов?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Не совсем то конечно но для числовых есть иногда удобный Number.
    Ответ написан
    Комментировать
  • Есть ли смысл использовать Spring Boot?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Для начала задайтесь вопросом какие проблемы решает spring boot от обычного spring. Дальше проанализируйте для какого проекта все задумывается. Выводом будет то что для мелких проектов или экспериментов или просто не отвлекаться на "спагетти" xml то использовать однозначно boot, во всех других случаях чистый spring.
    Касательно idea, ну к примеру вдруг вам придется работать не в idea, или появится необходимость использовать что то особенное то вы останетесь без волшебной кнопки "ide, сделай за меня хорошо" и потратите уйму времени чтобы создать скелет проекта. Как то так.
    Ответ написан
    3 комментария
  • Как на c# или java читать заголовки файлов?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Если есть спецификация файла, значит там описаны и смещения\последовательности\структуры данных внутри.
    К примеру описано что есть заголовок в самом начале файла
    int version; long size; char[6] name
    переведи это в байты и читай в таком количестве а затем прочитанное переводи в int long char. Вот ты его и прочитал.
    Ответ написан
    Комментировать
  • Пишу viewer obj файла с помощью OPENGL и есть проблемы?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Подсмотреть как сделали другие? https://github.com/javagl/Obj
    Ответ написан
  • Передача через Socket объекта?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    1) Если хочется своего колхоза то имплементируйте в нужный класс интерфейс Serializable, на стороне передачи будет нечто
    ObjectOutputStream out ...;
    out.writeObject(object);

    на стороне приема нечто такое
    ObjectInputStream in ...;
    YouClass object = (YouClass)in.readObject();

    2) Если хочется взять готовенькое то смотри в сторону kryonet, все быстро и просто.
    3) Если все же хочется своего но не особо хочется морочиться с сериализацией то смотри protobuf.
    4) Еще можно пойти классическим путем. В классе который хотите передавать создаете конструктор с нужными полями, дальше этот класс перегоняете в json\xml\обычным массивом текста с разделителями и передаете строкой, на принимающей строке разбираете эту строку и создаете объект через конструктор. Для автоматизации можно взять к примеру Gson в котором все сведется к такому виду
    public static class Entity {
        int id;
        String name;
       //другие типы и данные, если класс то аналогичным образом описываете
    
        public Entity(int id, String name) {
            this.id = id;
            this.name = name;
        }
    }String json = gson.toJson(entity); // {"id":100,"name":"name"}
    Entity read = gson.fromJson(json, Entity.class);
    Ответ написан
    Комментировать