Ответы пользователя по тегу Java
  • Как правильно собрать exe что бы приложение могло взаимодействовать с файлами .xml и .properties?

    @zelan
    Кратко обо мне не получится.
    Проверь работает ли нормально jar. Если да, то после try добавь catch с выводом стектрейса в консоль.
    Собирай exe. Запускай программу в терминале: java -jar <*.exe> (должно отрабатывать, по крайней мере с launch4j работает). Или просто запусти в терминале.

    Стек трейс с ошибкой должен быть выведен в консоль.
    Ответ написан
    Комментировать
  • Проблема с импортом. Как импортировать?

    @zelan
    Кратко обо мне не получится.
    зачем ручками вбивать? Когда используешь какой-нибудь класс в коде, то он обычно сам подтягивается. Если же вариантов для импорта много или же класс не подтянулся (подсвечивается красным), то просто ставишь курсор на красное слово и нажимаешь Alt+Enter, в первой строке будет предложен импорт.
    Ответ написан
  • Самостоятельное практическое задание для новичков в Java?

    @zelan
    Кратко обо мне не получится.
    книжки перед сном бесполезны, все новое нужно сразу закреплять.

    Напишите менеджер паролей для сайтов/аккаунтов.

    1) программа пишет/читает/редактирует/выводит на экран информацию об аккаутах (номер записи, сайт, логин, пароль) из файла (xml, json, любой другой формат).

    Напиши api для:
    для получения списка всех записей
    удаления записи по номеру
    изменения всех данных по номеру
    получения записи по номеру

    номер записи уникален. комбинация сайта и логина уникальна.
    Выполнять в main, консольный интерфейс не нужен.

    2) Изменить программу так, чтобы она работала с базой данный вместо файла. База H2 (режим embedded), работа с базой через JDBC. Если интересно, то можно использовать базу в режиме шифрования. Ведь пароли все таки храните.

    В идеале продумать программу так, чтобы в любой момент вы могли переключать режим файл/база, с минимальными затратами. Для этого вам надо изучить тему интерфейсов. В серьезной работе без них никак. Но скорее всего это получится не скоро. Не отчаивайтесь, со временем придет.

    3) Добавить UI, пусть будет JavaFX. Окно логина/пароля. После авторизации выводится окно с таблицей, содержащей информацию в незашифрованном виде. UI должен использовать api с предыдущих шагов. Окна для редактирования, подтверждения удаления и др.

    4) Дальше писать рано. Фреймворки рано. Работайте c IDE, изучайте возможности.

    Если не хотите писать настольное приложение, то можно написать клиент-сервер. Простейший вариант - сервлет+restapi.
    В качестве контейнера иcпользуете Tomcat. GUI на HTML/CSS/JS. Запустив приложение на tomcat, заходите на страницу, сервер(tomcat) возвращает страницу с логином, вводите логин-пароль -> ajax запрос -> получаете данные -> выводите таблицу и т.д.

    Как это все делать? Ищите в интернете, набивайте шишки и т.д.

    Это довольно сложное задание для новичка без опыта. Но это без проблем сделает любой с опытом работы в 2-3 месяца. Оно охватывает много важных тем: работа с файлами, работа с бд, работа с ui. Это минимум с которого можно начать.
    Ответ написан
    2 комментария
  • Как проверить существование файла в java?

    @zelan
    Кратко обо мне не получится.
    String sPath = "путь к файлу";
    Path path = Paths.get(File(sPath ).toURI());
    boolean exist = Files.exists(path);
    Ответ написан
    Комментировать
  • JDialog, фокус окна?

    @zelan
    Кратко обо мне не получится.
    jdialog.setAlwaysOnTop(true);
    Ответ написан
    Комментировать
  • Как сделать, чтобы колонка была по всё ширине?

    @zelan
    Кратко обо мне не получится.
    Одна колонка будет растягиваться на всю ширину.
    TableView table = new TableView<Object>();
    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    
    TableColumn column = new TableColumn("asda");
    table.getColumns().add(column);


    Если добавите еще колонок, то по умолчанию они будут делить доступную ширину между собой. Количество занимаемой ширины зависит от значения максимальной ширины колонки. Если первая колонка на максимуме занимает 3000px, а вторая 6000px, то первая будет занимать 1/3, а вторая 2/3.

    В целом лучше поставь SceneBuilder и экспериментируй там. Все возможные настройки там есть, нагляднее будет.
    Ответ написан
    3 комментария
  • Какой логгер для Java использовать в 2017 году?

    @zelan
    Кратко обо мне не получится.
    Важно использовать slf4j+LOGGER, где LOGGER - логгер для которого поддерживается связка с slf4j. Из таких логгеров могу посоветовать только log4j и logback. Сам использую второй.
    При использовании slf4j можно ВООБЩЕ абстрагироваться от типа логгера который использушь. Тем самым в любой момент можно перейти с logback на любой другой. Еще slf4j позволяет 'перенаправлять' cообщения логгеров подключенных библиотек в основной логгер приложения. Так, например, вы подключили к вашему приложению библиотеку в которой уже встроен log4j, а вы в своем приложении используете logback. Подключив "переходник slf4j-log4j" все сообщения подключенной библиотеки пойдкут в slf4j, а затем в ваш logback.
    Ответ написан
    5 комментариев
  • Относятся ли Апплеты и Java Web Start к Java Core?

    @zelan
    Кратко обо мне не получится.
    Апплеты - мертвая, устаревшая технология. Никому она не интересна и для работы не нужна.
    По поводу JWS - крайне редко встречается, очень специфичная штука. Можно не обращать на нее внимание.
    Ответ написан
    2 комментария
  • Почему не отображается JLable?

    @zelan
    Кратко обо мне не получится.
    Во-первых: setVisible(true) для фрейма должно вызываться в самом конце, когда все компоненты уже добавлены. Иначе компоненты попросту могут быть не отрисованы.

    Во-вторых: JFrame компонент - главное окно приложения, лучше чтобы он был один.
    В-третьих: ели ты хочешь добавлять компоненты с указанием их координаты и размера (установив setBounds), то необходимо в родительском компоненте установить абсолютный лейоут (менеджер компоновки). Для этого можно просто передать в конструктор контейнера null (JFrame nf = new JFrame(null); JPanel nf = new JPanel (null); и др.)
    Ответ написан
    Комментировать
  • Есть ли правила/принципы структурирования java сервлетов в веб-приложении?

    @zelan
    Кратко обо мне не получится.
    может найти на ютубе простенький курс по java ee в котором только хардкор (без спрингов) и др.? там все вопросы освещаются.

    Например Роман Бровко
    Ответ написан
  • Можно ли встроить JVM в desktop приложение?

    @zelan
    Кратко обо мне не получится.
    есть утилита launch4j. С помощью нее можно сделать *.exe файл, а также можно в папку с приложением положить нужную jre, а в настройках генерации файла *.exe указать имя папки с этим jre относительно экзешника. Все. Установка jre не потребуется, нужно только ее наличие в папке в экзешником.
    Ответ написан
    Комментировать
  • Почему NetBeans не видит java?

    @zelan
    Кратко обо мне не получится.
    так а в path %JAVA_HOME%\bin кто будет добавлять?
    Ответ написан
    Комментировать
  • Как подключить JavaFX к проекту на Maven?

    @zelan
    Кратко обо мне не получится.
    Oleg Genevjov: попробую побыть ясновидящим (сквозь пространство и нежелание показать хотя бы кусок кода где грузится fxml)

    Практически уверен что до подключения ссылка (адрес в виде стринга) на fxml была
    FXMLLoader loader = new FXMLLoader(getClass().getResource("com/blablabla/Some.fxml"));


    Если да, то после подключения maven нужно поправить адрес *.fxml, а именно добавить слэш в начало:

    FXMLLoader loader = new FXMLLoader(getClass().getResource("/com/blablabla/Some.fxml"));
    Ответ написан
    1 комментарий
  • Как указать Class-Path в MANIFEST.MF maven?

    @zelan
    Кратко обо мне не получится.
    <plugins>
    
            <!--Настройка компиляции проекта-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
    
                    <configuration>
    
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
    
    
                <!--Копирование зависимотей в папку lib/-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>2.8</version>
                    <configuration>
    
                        <!--Все зависимости которые нужны для работы твоего приложения будут лежать здесь-->
                        <outputDirectory>${project.build.directory}/lib/</outputDirectory>
                        <overWriteReleases>true</overWriteReleases>
                        <overWriteSnapshots>true</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
    
                    </configuration>
                    <executions>
                        <execution>
    
                            <id>copy-dependencies</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                        </execution>
    
                    </executions>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.4</version>
    
                    <configuration>
                        <archive>
    
                            <!--Если надо конфигурировать манифест, то здесь-->
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <!--путь к зависимостям относительно запускаемого jar файла-->
                                <!--ВСЕ ЗАВИСИМОСТИ ДОЛЖНЫ БУДУТ ПОСТАВЛЯТЬСЯ С ТВОИМ jar приложением. -->
                                <classpathPrefix>lib/</classpathPrefix>
                                <classpathLayoutType>simple</classpathLayoutType>
    
                                <mainClass>main.Main</mainClass>
                            </manifest>
                            <!--<manifestEntries>-->
                            <!--<Rsrc-Class-Path>${}</Rsrc-Class-Path>-->
                            <!--</manifestEntries>-->
    
                        </archive>
                    </configuration>
                </plugin>
    
            </plugins>


    Мавен соберет jar файл, отредактирует манифест. Результатирующий jar будет лежать в папке target - надеюсь знаешь что это. Тамже будет лежать папка lib/ со всеми завимостями (другими jar файлами). Если взять результирующий jar и эту папку, и положить вместе в другую папку - то получится полноценный дистрибутив. Но это уже другой плагин. Со временем разберешься.

    В твоем варианте вообще все изначально не верно. В манифесте должны быть прописаны все используемые jar файлы. Старайся не лезть в манифейст вообще. А у тебя указан только /home/saveli/.m2/repository - там куча папок,с кучей версий jar, поэтому ничего и не находит.

    Третий плагин можно вообще убрать, но тогда все jаr файлы из папки target/lib/ должны лежать рядом с результирующим jar.
    Ответ написан
    1 комментарий
  • Почему не отображается Java Applet в IE 11?

    @zelan
    Кратко обо мне не получится.
    Пропускай главу про апплеты. Поддержка браузерами прекращена. Технология нигде не используется.
    Ответ написан
    Комментировать
  • Какой способ ввода лучше использовать в Java?

    @zelan
    Кратко обо мне не получится.
    В первом случае чтение выполняется быстрее. Если пользователь вводи все вручную, то ускорения не заметишь.

    Далее удобства только для тебя. Первый вариант позволяет читать посимвольно/построчно/определенную длину. Второй вариант имеет кучу методов для чтения конеретного типа данных. Например просишь ввести пользователя число и делаешь вызов in.nextInt().
    Ответ написан
    Комментировать
  • Почему при нажатии кнопки не отображается ProgressBar?

    @zelan
    Кратко обо мне не получится.
    Дело в том, что ваши расчеты ("тяжелая имитация") производятся в потоке, который отвечает за работу и отрисовки графики (компонентов). Пока работает ваш цикл имитации - блочится и не отрисовывается ВЕСЬ интерфейс программы. Тяжелые расчеты должны производиться в отдельных потоках.

    Почитайте про SwingWorker, и в целом про синхронизацию интерфейса.
    Ответ написан
    Комментировать
  • Как понять момент в преобразовании числа в бинарную строку?

    @zelan
    Кратко обо мне не получится.
    utf8bytes[0] - имеет тип byte
    значения примитивного типа byte лежит в диапазоне от -128 до 127.
    метод Integer.toBinaryString(...) преобразует int в бинарную строку.

    Теперь смотри:
    допустим utf8bytes[0] = 0xFE, на первый взгляд 0xFE= 254, но для типа byte 0xFE=-2.
    Если этот 0xFE (типа byte) преобразовать к типу int, то мы получим также -2, но для типа int это будет уже 0xFFFFFFFE.

    поэтому делают так: 0xFF & utf8bytes[0]
    0xFF в этом выражении имеет тип int и является сокращенной записью 0x000000FF
    utf8bytes[0] здесь предположим равен 0xFE и при преобразовании к int будет равен 0xFFFFFFFE

    Результат выражения равен 0x000000FE - что соответствует 254, и при преобразовании в bin равен "11111110"
    Ответ написан
    2 комментария
  • Почему у меня строки равны null?

    @zelan
    Кратко обо мне не получится.
    если вылетает здесь:
    if (contact == null){
             lblName.setText(contact.getName());
             lblSense.setText(contact.getSense());
     }


    то lblName или lblSense, а может быть и оба - не инициализированы и раны null.

    Почему? Надо больше кода.
    Прикол в том, что эта проверка бессмысленна, если бы контакт был бы равен null, то ты бы обработал этот вариант тут:

    if ( empty||contact == null){
                setText(null);
                setGraphic(null);
    }

    А если ты дошел сюда, то контакт ТОЧНО не равен null.
    Ответ написан