Ответы пользователя по тегу Java
  • Как исправить ошибку SLF4J: Failed to load class?

    @zelan
    Кратко обо мне не получится.
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder":
    если slf4j не нужен, то эта ошибка не влияет на работу приложения по сути.

    Эксепшн вылетает по другой причине. Покажи конфиг hibernate'a.

    Caused by: org.hibernate.MappingException: Unable to load class [ entity.Article] declared in Hibernate configuration <mapping/> entry
    Caused by: java.lang.ClassNotFoundException: entity.Article

    Судя по стектейсу в конфиге гибернейта в секции mapping объявлен класс entity.Article, которого нет (по крайней мере ты его не приложил)

    по ошибке SLF4J:

    тут в принципе все понятно.
    смотри, удали из pom.xml

    <dependency>
            <groupId> org.apache.cassandra</groupId>
            <artifactId>cassandra-all</artifactId>
            <version>0.8.1</version>
    
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
    
        </dependency>


    Я так понял ты вставил этот код скопировав с сайта slf4j, если да, то он тут не нужен.

    библиотека hibernate-core - использует slf4j для того чтобы можно было подрубить любой логгер (log4j, logback и другие) и тогда гибернейт писал бы в него свои сообщения.
    то что выскакивает это сообщение - это впринципе не ошибка. Просто для данного примера не установлен логгер. Если бы он был установлен то все было бы норм.

    Однако на сайте slf4j написано что добавления в pom.xml зависимости будет достаточно чтобы этой ошибки не было.


    <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.13</version>
        </dependency>


    Если это не поможет, то надо просто подключить logback или log4j и сконфигурировать его. Как это сделать легко находится в нете.
    Ответ написан
  • Как организуется соединение с бд в многопоточной среде java сервлетов?

    @zelan
    Кратко обо мне не получится.
    По идее коннекты к базе уже должны быть созданы заранее. Есть такая штука как Connection Pool - набор уже открытых коннектов. Когда сервлету понадобилось обратиться к базе - берется коннект из этого пула, и сервлет работает с ним, и как только сервлету уже не нужна база - он должен освободить коннект (вернуть в пул). Если запросов много, а коннектов уже не хватает, то сервлет приостанавливает работу до тех пор, пока не появится свободный коннект в пуле. Это в двух словах.

    Можно прочесть небольшую статейку или поискать в нете.
    Ответ написан
  • О logback.xml - можно ли указать в каком пакете какой appender использовать?

    @zelan
    Кратко обо мне не получится.
    Я делаю так:

    <configuration debug="false">
       
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>%-50class{50} [%-5level]:          %msg%n</Pattern>
            </layout>
        </appender>
        
        <appender name="gui" class="logback.appender.JavaFXAppender">
            <layoutPattern>[%-5level]:    %msg%n</layoutPattern>
        </appender>
    
        <!-- в коде я запрашиваю это логгер по имени, у него добавлен свой аппендер, все что передается в этот логгер - добавляется в добавленные аппендеры.
             если удалить этот логгер, то все, что было адресовано ему - пойдет в root
     -->
        <logger name="cardservices" level="debug"  additivity="false">
            <appender-ref ref="gui" />
        </logger>
    
        <root>
             <appender-ref ref="console" />
        </root>
    
    
    </configuration>


    Для нужного пакета и всех классов в нем, можно задать логгеру определенное постоянное имя. А потом просто вносить в конфиг логгер с этим именем и описанием его аппендеров.

    В нужном пакете запрашиваю инициализирую логгер (при помощи обертки slf4j, если не пользуешься - инициализируй методами логбека):

    private static Logger logger = LoggerFactory.getLogger("cardservices");
    
    ...
    //сообщение пойдет в логгер с именем "cardservices" и, соответственно в его аппендеры (для данного примера аппендер "gui".
    logger.info("rere");


    В твоем случае будет как-то так:

    <configuration>
        <appender name="DB_APPENDER" class="com.test.logging.LogCachedAppender">
        </appender>
    
        <logger name="DB_LOGGER" level="debug"  additivity="false">
            <appender-ref ref="DB_APPENDER" />
        </logger>
    
        <root level="debug">
            <appender-ref ref="OTHER_APPERNDER" />
        </root>
    </configuration>


    и в нужном пакете инициализировать логгер:

    private static Logger logger = LoggerFactory.getLogger("DB_LOGGER");
    Ответ написан
    1 комментарий
  • Что есть Объект в java?

    @zelan
    Кратко обо мне не получится.
    Есть класс Paths, в нем есть статический метод, который возвращает новый объект Path. Ссылки на объект Paths у нас в этом случае нет, так как мы не создавали его экземпляр. Через конструкцию Paths.get("C:\test.txt"); мы обращаемся к статическому методу, который доступен без создания экземпляров объектов.
    Почитай про статические методы и вообще про ключевое слово static.

    Вот примерный код этого метода.
    public static Path get(String path){
      //создаем ссылку на объект Path
      Path pathObj = new Path();
      //проводим манипуляции по настройке и инициализации
      pathObj.setPath(path);
      //тут может быть куча проверок
      //куча других процедур
    
      //а после всех подготовок и проверок возвращаем ссылку на ранее созданный объект
      return pathObj;
    }
    Ответ написан
    1 комментарий
  • Java, Swing. Почему не появляются остальные компоненты?

    @zelan
    Кратко обо мне не получится.
    setVisible(true);

    Переставь как можно дальше, желательно в самый-самый конец. Компоненты могут не успеть отрисоваться. Помню такое часто было когда писал на свинге, и тоже при каждом запуске отрисовывалось разное количество компонентов. Либо попробуй обновить/перерисовать окно. Но там хитрыми методами надо его перерисовывать, к сожалению не вспомню, возможно frame.update(...) даже хватит.
    Ответ написан
    1 комментарий
  • Java, нужны классы для работы с несколькими файлами?

    @zelan
    Кратко обо мне не получится.
    JFileChooser fileChooser = new JFileChooser();
            
            //возможность выбирать только директории
            fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            //выбор только одной директории
            fileChooser.setMultiSelectionEnabled(false);
    
            fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
    
            //открываем окно, и ждем статуса выбора файла
            int status = fileChooser.showOpenDialog(null);
            //если была нажата кнопка открыть
            if(status == JFileChooser.APPROVE_OPTION){
    
                //получаем выбранную дтректорию
                File dir = fileChooser.getSelectedFile();
    
                //делаешь проверки разные если нужно
                if(dir==null){
    
                }
                //если папка не существует
                if(dir.exists()==false){
    
                }
    
    
                //получаешь список файлов в указанной директории
                File[] files = dir.listFiles();
    
                for (File file : files) {
                    //делаешь с файлами что нужно, не забывай проверять является ли файл директорией или файлом.
                }
    
    
            }
    Ответ написан
    Комментировать
  • Как в Intellij Idea оценить скорость выполнения кода?

    @zelan
    Кратко обо мне не получится.
    есть два системных метода:
    System.nanoTime(); //величина текущего времени в наносекундах
    System.currentTimeMillis(); //величина текущего времени в милисекундах


    Делаешь так:

    long startTime = System.currentTimeMillis();
            
            {
                //какой- то код, скорость работы которого нужно оценить
            }
    
    //время затраченное на выполнение кода
    long time = System.currentTimeMillis() - startTime;


    каким методом пользоваться - зависит от операций которые нужно оценить. Если операция выполняется быстро, а измерения проводились в миллисекундах, то результат может быть равен нулю, в этом случае измеряй в наносекундах.
    Ответ написан
    Комментировать
  • JavaCard: как отправить данные во вне?

    @zelan
    Кратко обо мне не получится.
    сама спецификация javacard (версии 2.2 и ниже 100%, и даже 3+, на сколько я помню) не предоставляет возможностей открытия сокетов и любых других подобных видов соединения. так что в эту сторону даже не ройте.

    Обычно разработчик карт/симок предоставляет все специфические библиотеки и SDK. Но как правило вам никто ничего не даст, если вы официально с ними не сотрудничаете. В этой сфере любая информация кроме общей (javacard, gp, op) - из разряда коммерческой тайны. Если библиотеки не предоставлены, то использовать функционал карты полностью - не возможно. Обращайте к разработчику карт по всем вопросам.
    Ответ написан
    Комментировать
  • Как переписать данную программу с С++ на Java?

    @zelan
    Кратко обо мне не получится.
    Вы понимаете алгоритм поиска? Если да, то берите и реализовывайте его средствами java без привязки к аналогам функций С++. Простого аналога нет.

    Функция putchar записывает символ в текущей позиции в стандартный поток вывода (stdout) и перемещает внутренний указатель положения файла в следующую позицию. По сути в java это чтение байт файла в цикле, с записью байта во временный буфер или выводом сразу в стандартный поток вывода System.out.print(char);
    Ответ написан
  • Можно ли менять контейнеры (слои)при нажатие кнопки, работа в JavaFX?

    @zelan
    Кратко обо мне не получится.
    можно.

    Если кнопка обычная, то вот основа.

    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
    import javafx.scene.control.SplitPane;
    import javafx.scene.layout.BorderPane;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    
    /**
     * Created by Evgeny on 18.03.2016.
     */
    public class Example extends Application {
    
    
        @Override
        public void start(Stage primaryStage) throws Exception {
    
    
            BorderPane borderPane = new BorderPane();
            SplitPane splitPane1 = new SplitPane();
            Button button_changeContainer = new Button("Изменить контейнер");
            splitPane1.getItems().add(button_changeContainer);
            SplitPane splitPane2 = new SplitPane();
            splitPane2.getItems().addAll(new Label("Первый"),new Label("Контейнер"), new Label("SplitPane"));
    
            VBox vBox = new VBox();
            vBox.getChildren().addAll(new Label("Второй"),new Label("Контейнер"), new Label("VBox"));
    
    
            borderPane.setCenter(splitPane1);
            borderPane.setRight(splitPane2);
    
    
            button_changeContainer.setOnAction(new EventHandler<ActionEvent>() {
                boolean firstOrSecond = true;
                @Override
                public void handle(ActionEvent event) {
                    firstOrSecond = !firstOrSecond;
    
                    if(firstOrSecond){
                        borderPane.setRight(splitPane2);
    
                    }
                    else borderPane.setRight(vBox);
                }
            });
    
    
    
    
            primaryStage.setScene(new Scene(borderPane));
            primaryStage.setWidth(600);
            primaryStage.setHeight(600);
    
            primaryStage.show();
    
        }
    }
    Ответ написан
    3 комментария
  • Как подключить в JavaFx библиотеку jquery?

    @zelan
    Кратко обо мне не получится.
    в общем так, если html файл лежит в jar'е, то для установки внешних стилей и скриптов нужно указывать полный абсолютный путь к файлам.

    Лучше сделать так: грузить в webview файл не из jar, в этом случае все будет работать так, как и должно. Т.е. пути до скриптов и стилей можно указать относительные (относительно index.html).

    <link rel="stylesheet" type="text/css" href="style.css">


    вместо строки

    webEngine.load(FXMLController.class.getResource("/html/index.html").toExternalForm());


    добавь

    try {
          webEngine.load(new File("html/index.html").toURI().toURL().toExternalForm());
    } catch (IOException e) {
          e.printStackTrace();
    }

    и ВЫНЕСИ папку html c содержимым из ресурсов на тот же уровень где лежат папки src, .idea.

    При запуске jar (после сборки) рядом должна лежать (либо вручную кидай, либо мавеном) папка html с содержимым. В этом случае все будет грузиться и работать.

    Есть еще вариант, написать скрипт, который при сборке приложения собирает все стили и скрипты и пишет их содержимое внутрь index.html, наверняка такое в мире веба уже кто-то делал. Тогда твой вариант программы будет работать, так как все будет находиться в одном файле и подгрузка будет не нужна.
    Ответ написан
  • Как вставить аплет в html в IDEA?

    @zelan
    Кратко обо мне не получится.
    <applet code="HelloWorld" width=300 height=250/>
    <applet code="HelloWorld.class" width=300 height=250/>

    Точно уже не помню.

    Апплеты умерли, никто их не использует, а практически все браузеры уже официально отказались от поддержки соответствующих плагинов.
    Ответ написан
  • Проблемы с IF в Java?

    @zelan
    Кратко обо мне не получится.
    В каком редакторе пишешь?

    else if (x % 2 == 0)
     {
    even.add(x);}   //<------- лишняя скобка
     }


    продолжение:

    //Эти объекты объявлены в методе main(), и их видно только в нем.
    ArrayList<Integer> even = new ArrayList<Integer>();  
    ArrayList<Integer> odd = new ArrayList<Integer>();  
    ArrayList<Integer> other = new ArrayList<Integer>();


    //этот метод не может найти переменные even, odd, other. статический метод может видеть только другие статические методы/переменные/др и то, что передаешь в сигнатуре(в скобочках)
    public static void printList(){
    
    }


    Выходов много, вот 2 из них:
    class Ideone{
     //выносишь переменные из метода main и делаешь их static
    static ArrayList<Integer> even = new ArrayList<Integer>();  
    static ArrayList<Integer> odd = new ArrayList<Integer>();  
    static ArrayList<Integer> other = new ArrayList<Integer>();
    }


    или
    //переписываешь метод, и в мейне при его вызове передаешь сви списки
    public static void printList(List<Integer> even, List<Integer> odd, List<Integer> other ){
    
    }
    Ответ написан
    8 комментариев
  • Объясните код из Java?

    @zelan
    Кратко обо мне не получится.
    Если в классе A не объявлен ни один конструктор, то он по умолчанию содержит конструктор без параметров - A(), однако, если объявлен хотя бы один конструктор с параметрами, то конструктор A() исчезает. Но исчезает он только тогда, когда явно не объявлен.

    Примеры
    //содержит неявно 1 конструктор A()
    class A{
    }
    
    //тоже содержит  конструктор A() но явно
    class A{
        A(){
        }
    }
    
    //cодержит СОДЕРЖИТ ТОЛЬКО 1 конструктор, конструктора A() уже нет
    class A{
        A(int x){
        }
    }
    
    //есть оба конструктора
    class A{
        A(int x){
        }
    
        A(){}
    }


    В примере класс A содержит один конструктор с параметром - A(int x), это значит, что он не имеет конструктора A(), и его нужно (при необходимости) определить самому.

    Механизм наследования таков:
    - мы хотим создать объект B, вызвав конструктор B(int b)
    - первой строкой конструктора должна быть строка super(...) - с параметрами или без, это нужно для того чтобы сначала сконструировался родитель, ведь B унаследован от A
    - если первая строка другая, то компилятор подставляет конструктор родителя без параметров - super(), в этом случае будет вызвано создание объекта A с помощью конструктора A().
    - но так как в объекте A не определен этот конструктор - вылетает ошибка

    Можно исправить так
    Либо добавить в объект A конструктор A(), либо в конструктор объекта B, добавить явный вызов конструктор родителя super(int x) ( в данном случае у родителя есть только 1 конструктор - A(int x)
    Ответ написан
    1 комментарий
  • В чем разница создания объекта в Java так, или так?

    @zelan
    Кратко обо мне не получится.
    Все просто: в первом варианте выражение занимает две строки, а во втором одну.
    Ответ написан
    Комментировать
  • Расскажите про создание исполняемого файла в JAVA?

    @zelan
    Кратко обо мне не получится.
    Программка для упаковки .jar в .exe
    Есть графический интерфейс, все станет понятно.
    Если пользуешь maven то есть плагин для него.
    Ответ написан
    Комментировать
  • Событие когда ScrollView прокручивается до конца?

    @zelan
    Кратко обо мне не получится.
    В ответ на комментарии к вопросу:

    Wolfak: аннотация "Override" говорит, что этот метод переопределен. Переопределен он может быть ТОЛЬКО В ТОМ классе где он уже БЫЛ описан ранее.

    Такой метод есть в классе ScrollView, соответственно именно в нем и надо переопределить этот метод, и создать объект.

    Данный метод вызывается скроллвиевом всегда, когда положения скроллов меняется. Соответственно нужно внести изменение в логику работы (добавить свои действия).

    Есть 2 общих пути (мб есть и другие).

    Первый:
    ScrollView scroll = new ScrollView(context){     //context - то что должно быть внутри скрола
         @Override 
          protected void onScrollChanged(int l, int t, int oldl, int oldt)  
          { 
                 //тут, надо вставить то, что хочешь ( то что описано в твоем методе
          }
    }


    Получившийся объект вставить на нужное место.

    Второй:
    Унаследоваться от ScrollView и вставить твой метод (просто вставить тот метод который ты представил). Создать экземпляр унаследованного класса и использовать.

    Если все сделаешь правильно, то в окне лога, при опускании скрола до самого низа, будет вылетать сообщение "MyScrollView: Bottom has been reached".

    Откровенно метод который взял, не всегда будет работать.

    А вообще подучи основы java и НАСЛЕДОВАНИЕ, что бы таких вопросов (о super и переопределении методов не возникало.). Это основы.
    Ответ написан
  • JCheckBox в JTable Не нажимается?

    @zelan
    Кратко обо мне не получится.
    Ссылка на докуметацию

    В данный момент таблица работает только на отображение компонента (CellRenderer), тебе же надо редактировать (CellEditor). Открой документацию по ссылке выше, пропусти рендереры и долистай до эдиторов, там на примиере ComboBox и ColorChooser все поймешь.
    Ответ написан
    Комментировать
  • Почему с IDE программа запускается, а в консоли выдает ошибку?

    @zelan
    Кратко обо мне не получится.
    Ясно же написано, не определен класс org.json.JSONObject

    Попросту при запуске через консоль необходимо указать classpath (откуда подтягивать библиотеки), как прописывать этот параметр написано в интернете, это азы.

    Вы подключили библиотеку, но каким образом?
    - это ссылка на jar? тогда IDEA знает откуда взять ресурсы, а при запуске в консоли вы не предоставляете этой инфы.
    - jar добавлен в папку с исходниками? таже самая ситуация.
    - maven?
    Ответ написан
    Комментировать
  • Как сделать repaint canvas'а в цикле?

    @zelan
    Кратко обо мне не получится.
    Скорее всего цикл у вас запущен в потоке отрисовки и, тем самым, пока идут вычисления в цикле - поток отрисовки блочится. Если цикл завершится, то и отрисовка выполнится. Попробуйте выделить логику изменения параметров и принудительного вызова отрисовки в отдельном потоке.
    Ответ написан