Страницы

Поиск по вопросам

Показаны сообщения с ярлыком intellij-idea. Показать все сообщения
Показаны сообщения с ярлыком intellij-idea. Показать все сообщения

вторник, 31 марта 2020 г.

Не читает русский язык

#java #intellij_idea #utf_8 #cp1251


Работаю с файлами, мой код:

package com.company;
import java.io.*;
import  java.util.Scanner;
public class Censore {
    public static void main(String[] args) throws Exception {
        FileReader fr = new FileReader("C:\\Users\\Stepan\\Список.txt");
        Scanner scan = new Scanner(new InputStreamReader(new FileInputStream("C:\\Users\\Stepan\\Список.txt"),
"UTF-8");
        String t = scan.nextLine();
        fr.close();
        System.out.println(t);
        String[] mats = t.split(" ");
        int longarray = mats.length;
        Scanner fx = new Scanner(System.in);
        String stroka = fx.nextLine();
        for (int i = 0; i < longarray; i++) {
            stroka = stroka.replaceAll(mats[i], "*цензура*");
        }
        System.out.println(stroka);
    }
}


В файле русские символы. При их считывании Появляются значки �. Видимо тут проблема
в кодировке UTF-8. Работаю в Intellij IDEA. Подскажите, как исправить.
    


Ответы

Ответ 1



Как я уже писал выше: Стандартная виндовая кодировка - это CP-1251. В Java она кодируется как windows-1251, по этому в вашем коде нужно написать так: Scanner scan = new Scanner(new InputStreamReader(new FileInputStream("C:\\Users\\Stepan\\Список.txt"), "windows-1251")); UPD: Для справки: "ISO-8859-1" - западноевропейские языки "windows-1251" - стандартная Windows (русская) "UTF-8" - юникод

Ответ 2



Попробуйте это Scanner scanner = new Scanner( new InputStreamReader(new FileInputStream("fileNmae"), "UTF-8"));

Ответ 3



какая кодировка стоит у текстового файла? можно узнать нотпадом и т.д. и попробуйте узнать на каком кодировке выдает ИДЕА, можете проверит полученный результат вот тут: http://www.online-decoder.com/ru и ещё проверьте какая кодировка стоит на самой ИДЕА (Editor -> File Encodings)

Ответ 4



ХЗ как исправить, но винда юзает кодировку cp1251, и там руские символы шифруются иными байтами, нежели в utf-8(которая юзается средой разработки в идее так точно), т.е считанные байты нужно переводить в символы с помощью кодировки cp1251

воскресенье, 29 марта 2020 г.

Как подключить SDK к уже существующему проекту в Intellij IDEA

#java #intellij_idea


Открыл программу java в Intellij IDEA, но вверху выскочила надпись "SDK проекта не
найдена", что делать в такой ситуации?
    


Ответы

Ответ 1



Нужно добавить путь до Java SDK Можно так. Правой кнопкой на проекте, вызываем контекстное меню, далее Open Module Settings -> Project -> New/Edit путь до папки с Java. У мена например на Win10 такой: C:\Program Files\Java\jdk-11.0.2

вторник, 17 марта 2020 г.

Автодополнение в Intellij Idea

#java #intellij_idea


Подскажите как в Intellij Idea реализовать такую фичу:

печатаю четыре буквы "psvm" получаю вот такое предложение

public static void main(String[] args){}


на автодополнение?
    


Ответы

Ответ 1



File->Settings->Live Templates: other там собственно psvm а вообще всё тоже самое psvm+TAB ну или меняем кнопку в настройках выше p.s. собственно там полезно покопаться и сделать свои шаблоны, ну или отредактировать существующие

воскресенье, 15 марта 2020 г.

Как узнать используемую память

#java #intellij_idea


Как можно узнать сколько памяти занимает выполнение программы или класса в Intellij
Idea? 
    


Ответы

Ответ 1



Есть такой инструмент как jmap, выводящий гистограмму с показателями сколько памяти занимают объекты и т.п. Также, утилиту jstat можно использовать для сбора самых разнообразных статистических данных. Статистика jstat сортируется в "свойства", указанные первым параметром командной строки. Чтобы увидеть список свойств, нужно запустить jstat с параметром -options. В документации утилиты в JDK говорится, что именно показывает каждое из свойств, но большинство из них используется для сбора информации о работе сборщика мусора или его компонентов. Свойство -class показывает загруженные и выгруженные классы (что делает утилиту полезной для обнаружения утечек ClassLoader в пределах сервера приложений или вашего кода), а -compiler и -printcompilation предоставляют сведения о JIT-компиляторе Hotspot. По умолчанию jstat отображает информацию по состоянию на момент обращения. Если нужны регулярные снимки текущего состояния, укажите после -свойств интервалы в миллисекундах. jstat будет постоянно отображать снимки текущего состояния контролируемого процесса. Если нужно, чтобы jstat сделал лишь определенное количество снимков, укажите его за значением интервала/периода.

Ответ 2



Можете включить индекатор памяти в File | Settings | Appearance and Behavior | Appearance поставить галочку в Show Memory Indecator ссылка

Ответ 3



Можно запустить java с выводом данных gc, например -verbose:gc параметр, посмотреть что он будет выводить, там данных будет достаточно. Второй вариант, использовать jstat

пятница, 13 марта 2020 г.

Android Studio - Что за красный прямоугольник?

#android #android_studio #intellij_idea #android_resources


Выводится такой красный прямоугольник  когда вывожу строки в Resources. strings.xml
c с комбинацией ALT+ENTER , как только появляется этот прямоугольник комбинация ALT+ENTER
не работает! Приходится закрывать окно и заново открывать после чего комбинация работает
, до следушего появления прямоугольника, что обычно происходит после перврго или второго
вывода строки в strings.xml
 
    


Ответы

Ответ 1



В моем случае данных прямоугольник появляться после дублирования строки. Создается новая строка кода и текст который выделен красным можно редактировать. Если нажать Enter то текст перестает подсвечивать.

Ответ 2



Не совсем понял как воссоздать данную проблему у себя, но: Alt + Enter используется для вывода всяких подсказок(в случае синтаксических и подобных ошибок) и выполнения дополнительных действий. А в данном случае, я так понимаю, необходимо использовать автокомплит - комбинацию Ctrl + Space - тогда буду предоставлены возможные варианты. А красный прямоугольник обычно вроде показывал какой из параметров или аргументов необходимо заполнить в данным момент.. по крайней мере так для методов было.

Ошибка обращения к объекту

#java #intellij_idea


Есть фрагмент кода:

public String getInstallPath () {
    String commandLinePath = CommandLineSettings.getSettings().getInstallDir();
    if (commandLinePath != null && !commandLinePath.isEmpty()) {
        return commandLinePath;
    } else {
        return getProperty("installPath", OSUtils.getDefInstallPath());
    }
}


Здесь есть обращение к getSettings(), который определен как:

@Getter
private static CommandLineSettings settings;

static {
    settings = new CommandLineSettings();
}


При попытке получить объект появляется ошибка Cannot resolve method 'getSettings()'.
Как это можно поправить? Почему происходит такая проблема?
    


Ответы

Ответ 1



Не знаю что делает аннотация @Getter, поэтому предложу обычный вариант написания геттера для статического поля класса: private static CommandLineSettings settings; static { settings = new CommandLineSettings(); } public static CommandLineSettings getSetting() {return settings;} Пользоваться также как вы и пытались: CommandLineSettings settings = CommandLineSettings.getSettings();

воскресенье, 8 марта 2020 г.

Как заставить intellij Idea компилировать только необходимые классы а не весь проект?

#intellij_idea


Проблема в следующем, для сохранения шаблонов кода использую один проект с множеством
папок. Когда проверяю новый код компилятор компилирует весь огромный проект, хотя части
в нем абсолютно не взаимосвязаны. В еклипсе к примеру такого не происходит, поэтому
запуск приложений выполняется быстрее. Что нужно настроить, чтобы компилировался и
выполнялся локальный код и классы с ним связанные, а не весь проект целиком?
    


Ответы

Ответ 1



ctrl + shift + F10 по умолчанию запускает текущий открытый исполняемый класс. А кнопка Run работает с последним скомпилированным проектом. Не хочешь с клавишами дружить, нажимай ПКМ на любом месте класса, который надо запустить, и там уже выбирай Run.

пятница, 6 марта 2020 г.

cannot access class IDEA

#intellij_idea #access #java


Здравствуйте все, такая есть проблема:

IntelliJ IDEA подсвечивает красным (cannot access) this поле в конструкторе, в то
время, как при компиляции все работает нормально.

Переустанавливал IDEA, JDK, OS, все бестолку. Уже руки опускаются.
Ссылка на скриншот.

Настройки стандартные, IDE тоже. Раньше такого не было.
    


Ответы

Ответ 1



Попробуйте сделать "Invalidate caches" в IDEA.

четверг, 5 марта 2020 г.

maven & IntelliJ IDEA & no main manifest attribute

#java #intellij_idea #maven


Нашёл в google не десяток аналогичных вопросов, и везде (практически) советуют одно
и тоже - добавить код ниже в pom.xml:


    
        com.petersamokhin.Main
    



Однако, не у одного меня IDEA выдаёт ошибку - Element archive is not allowed here,
и в результате всё равно no main manifest attribute:


В чём проблема и как лечить? mvn установлен, во время компиляции ошибок тоже нет.
    


Ответы

Ответ 1



Добавил ещё один тег plugin: maven-assembly-plugin com.mypackage.MainClass jar-with-dependencies Полностью теперь тег build выглядит так: maven-assembly-plugin com.mypackage.MainClass jar-with-dependencies org.apache.maven.plugins maven-compiler-plugin 3.1 1.8 1.8 Затем: mvn clean compile assembly:single

вторник, 25 февраля 2020 г.

Intellij IDEA: создать GUI приложение

#java #intellij_idea #gui


Как в этой замечательной среде создать GUI приложение?
Я что-то не могу найти там кнопки/ползунка и т.д. как это есть в том же Xcode/Visual
Studio. Или IDEA не даёт такой возможности?
    


Ответы

Ответ 1



В проекте на пакете нажимаете правой кнопкой миши "New" -> "GUI Form".

понедельник, 24 февраля 2020 г.

Как покрыть тестами конструктор класса в java?

#java #intellij_idea #юнит_тесты #test_driven_development


Есть код, который по алгоритму Эвклида находит наибольший общий делитель. 

import java.util.Scanner;

/**
 * Created by user on 24.11.2015.
 * По данным двум числам 1 b) {
                return Euclid(a % b, b);          //рекурсивно вызовется             
            } //  алгоритм, если будет остаток от деления большего              
                                    
            if (b > a) {       //  числа на меньшее и наоборот    
                return Euclid(a, b % a); 
            } else return Euclid(a % b, b);

        }
    }
        public static void main(String[] args) {

        Scanner sc1 = new Scanner(System.in);      //ввод с клавиатуры 
        Scanner sc2 = new Scanner(System.in);
        int a = sc1.nextInt();
        int b = sc2.nextInt();
            System.out.println(Euclid(a,b));
    }
}


Несмотря на то, что программа работает, я решил по практиковаться на ней в разработке
через тестирование. 

Пишу тест: 

import org.junit.Test;

import static org.junit.Assert.*;
public class EuclidTest {

    @Test
    public void testEuclid() throws Exception {

        int result = new Euclid(234, 45); //в этой строке ошибка компиляции 
        assertEquals(9, result, 1e-9);
    }
}


В строке, где я объявляю result мне показывает ошибку компиляции.
 

Когда я переписал класс, заменив конструктор методом с другим названием всё прошло
как по маслу. Связи с этим вопросы:


Можно ли покрыть конструктор тестами так, чтобы не вызвать ошибку компиляции?
Как это сделать?

    


Ответы

Ответ 1



public static int Euclid(int a, int b) { //конструктор Дело в том, что это у вас не конструктор, а статический метод, возвращающий int. Конструктор был бы такой (он возвращает объект класса Euclid): public Euclid(int a, int b) { //конструктор Вообще, конструктор здесь не нужен никоим образом. Вам не нужно хранить какое-то состояние, так что и объекты создавать незачем. Переименуйте ваш метод euclid с маленькой буквы, как положено по стандарту именования и пишите вот такой тест: import org.junit.Test; import static org.junit.Assert.*; public class EuclidTest { @Test public void testEuclid() throws Exception { assertEquals(9, euclid(234, 45), 1e-9); } }

суббота, 15 февраля 2020 г.

Intellij Idea сворачивает директорию если в ней самой содержится только одна директория

#java #intellij_idea


Intellij Idea автоматически сворачивает директорию если в ней самой содержится только
одна директория. А как назад развернуть?


    


Ответы

Ответ 1



Чуть выше в этом навигаторе(Project) у тебя будет рисунок шестиренки. Нажми на его и выбери там Flatten Packages.

пятница, 14 февраля 2020 г.

Есть возможность получить статистику кол-ва строк Java кода в разных модулях в IntelliJ IDEA?

#java #intellij_idea


Есть возможность получить статистику кол-ва строк Java кода в разных модулях (пакетах/папках)
в IntelliJ IDEA? Может есть какой-то плагин?
В идеале, без пустых строк и импортов. 

Я видел этот вопрос, но хотелось бы без танцев с посторонними утилитами + там где
надо у меня Mac и на него крайне не рекомендуется ставить/запускать что-то левое. Лучше,
если поставил плагин к IDEA (еще лучше сделать штатными средствами IDEA, но я таких
функций не нашел), нажал получить статистику и все.

P.S. Да я в курсе, что кол-во строк кода мало информативно, но тем не менее потребовалось
для одного отчета менеджеру.    
    


Ответы

Ответ 1



Вполне вероятно что вам подойдет именно этот плагин. Функционал не такой обширный, но все же хоть какая-то статистика есть.

четверг, 13 февраля 2020 г.

Избавиться от Unnecessary boxing

#java #intellij_idea


Есть такой код

int i = 5;
Double d = Double.valueOf(i);


(на самом деле код такой

int getInt() {
  ....
}

Double d = Double.valueOf(getInt());


но не суть)

На строку

Double d = Double.valueOf(i);


IDEA пишет


  Warning: Unnecessary boxing. 


Но какой же он Unnecessary, если мне нужно примитив int привести к объекту Double?

На строку

Double d = i


я уже получаю ошибку


  Incompatible types. Required: java.lang.Double Found: int


Это баг анализатора, или все-таки как-то можно присвоение переписать?
    


Ответы

Ответ 1



Примитивный тип int нужно сначала привести к примитивному типу double - после этого boxing уже не нужен Double d = (double) i;

Ответ 2



У меня IDEA пишет также. Если возможен то используйте такой вариант Integer i = 5; Double d = getInt().doubleValue(); Либо, используйте, как IDEA и предлагает Double d = (double) getInt();

Intellij-IDEA кодировка в android проекте (UTF and 1251)

#android #java #intellij_idea #encoding


вот уже несколько дней пытаюсь разобраться в том как правильно создать android проект
в idea 12.1.6 (windows) без кодировки: windows-1251, тоесть полностью на UTF (8 ||
16 || 32 сути не меняет)
в idea\File\Settings\File Encodings параметры IDE,Project,Properties Encoding установлены
в UTF, но idea стабильно создаёт файлы в кодировке 1251 в 
{PROJECT}\src\{Packages}\MyActivity.java //та что создаётся при создании проекта
{PROJECT}\gen\{Packages}\BuildConfig.java
{PROJECT}\gen\{Packages}\Manifest.java
{PROJECT}\gen\{Packages}\R.java

{USER}\.IntelliJIdea12\system\compile-server\{PROJECT}\targets\java-production  
\{PROJECT}\android\generated_sources\aapt\{Packages}\R.java
{USER}\.IntelliJIdea12\system\compile-server\{PROJECT}\targets\java-production\{PROJECT}\android\generated_sources\build_config\{Packages}\BuildConfig.java

в результате чего получаю геморой и ошибки (связанные с использованием двух кодировок,неверными
символами, etc) 
собственно вопрос как сделать проект в UTF? или что я [пропустил, не указал, etc]?
P.S. при использовании чисто 1251 и настроек по дефолту всё пашет, но 1251 не подходит
(в будущем хотелось бы перейти на linux с переносом проектов)    


Ответы

Ответ 1



File -> Other Settings -> Default Settings... В открывшемся окне Editor -> File Encodings

Ответ 2



Была подобная проблема, настраивал тут - обычно по умолчанию идет utf-8 но иногда бывают неожиданности

Ответ 3



File>Other settings>Default settings>File encodings

Ответ 4



Это баг вот подобное в Intelij RubyMine. Пишите им в баг репорт(с указанием шагов которые привели для воспроизведения). https://intellij-support.jetbrains.com/hc/en-us/community/posts/206704055-Change-default-encoding-for-Rubymine

Проблема с хоткеями в IDEA Ultimate Edition

#intellij_idea


Хоткеи стоят дефолтные, сразу после установки появилась проблема такого рода: при
выделении текста Shift + Стрелки не происходит выделения, а происходит эффект Ctrl
+ Стрелки. При старте же всегда курсор установлен, как будто Insert "включен". Через
бекспейс выделенный текст не удаляется, а просто убирается выделение, Ctrl-C/V не работают
или работают, но не всегда. И подобного рода проблемы, кто сталкивался?
    


Ответы

Ответ 1



Была такая же проблема в IntelliJ IDEA Community Edition 2016.3 в Tools убрал галку с Vim Emulator (Ctrl+Alt+V).После этого все заработало.

Ответ 2



Попробуйте Alt+Ctrl+S или File ->Settings. Там IDE Settings ->keymaps. Убедитесь, что Keymaps на самом деле выставлен в default. Если да, посмотрите настройки горячих клавиш. Например, что Ctrl + C правда там есть. Если все верно, ищите сторонние приложения, которые могут перехватывать горячие клавиши(Например punto swhtcher или еще что-то)

Ответ 3



Отключить в программе плагин IdeaVim.

Ответ 4



Очень помогли предыдущие ответы, действительно плагин Idea Vin мешает, и не дает работать большинству стандартных сочетаний клавишь, видимо он их перенастраивает и из за этого они не работают.

Ответ 5



Отключить в программе плагин intelvim.

Не видит System.out.print в новом классе

#java #intellij_idea #классы


Пользуюсь Intellij Idea. При создании нового класса (не main) не работает команда
System.out.print. Компилятор пишет, что не может решить символ. В классе с методом
main все работает. Не пойму в чем дело.


    


Ответы

Ответ 1



Вы объявляете класс и сразу же пишите вызов метода System.out.print() - это недопустимо. Использование метода возможно в инициализаторе, конструкторе или другом методе: public class sfe { { System.out.print(""); // в инициализаторе. } public sfe() { System.out.print(""); // в конструкторе. } public void print() { System.out.print(""); // в другом методе. } }

среда, 12 февраля 2020 г.

Как в Intellj Idea подключить к проекту файлы class?

#java #intellij_idea #компиляция


Есть папка и в ней лежат уже скомпилированные классы. Как из них вызвать методы?
Закинул в каталог проекта, и написал 

import javax.help;


В результате Error:(15, 18) java: package javax.help does not exist.
    


Ответы

Ответ 1



Пример из консоли Структура каталогов: C:\dev\ TestImp.class c:\dev\mypack\ Test.class Код класса Test: package mypack; public class Test { public Test() { System.out.println("I live!"); } } Код класса TestImp: import mypack.Test; public class TestImp { public static void main(String[] args) { Test t = new Test(); } } В консоли переходим в каталог c:\dev\ и выполняем: java TestImp В консоль выводится: I live! UPD: Что касается Intellj Idea - вам требуется запаковать ваши файлы классов в jar командой jar cf test.jar Test1.class После этого импортируете jar в проект следующим образом: Структура проекта (CTRL + SHIFT + ALT + S on Windows/Linux, ⌘ + ; on Mac OS X) Modules на левой панели. Вкладка Dependencies '+' → JARs or directories UPD2: Intellij IDEA позволяет добавлять не только JAR'ы, но и каталоги с классами. Делается полностью аналогично написанному выше, только выбирается каталог с классами. После выбора откроется диалог, в котором можно исключить какие либо подкаталоги выбранного каталога.

суббота, 8 февраля 2020 г.

Настройка шаблонов в Eclipse/Netbeans, как в IDEA

#java #eclipse #ide #netbeans #intellij_idea


Добрый день, комьюнити! 
Вчера меня взяли на работу Java программистом (мой первый опыт). До этого я всегда
разрабатывал в IDEA, но работодатель сказал выбираться между eclipse и netbeans. Открыв
эти среды я ужаснулся, там нет нормального автодополнения. Те например в IDEA я пишу
psvm - и она мне генерирует public static void main метод, или sout и это будет System.out.println
и т.д. 

Я уверен, что не один с такой проблемой, может подскажите какие-то плагины, которые
могли бы из Eclipse/Netbean сделать мою любимую IDEA? Заранее ОЧЕНЬ благодарен. 
    


Ответы

Ответ 1



Preferences -> Java -> Editor -> Templates -> New: После этого в коде пишите psvm и нажмите Ctrl-Space.

Ответ 2



Есть плагин Recommend а так же templates, например если вбить syso, это равносильно sout в IDEA.

Ответ 3



Templates для кода на любом языке есть в любой IDE, только в разных IDE они по-разному называются, например вместо psvmв IDEA, в Eclipse надо набрать main, вместо sout надо набрать sysout. Вы можете заучить новые названия, либо настроить всё это под себя как вам нравится. См. Getting started with Eclipse code templates. В хелпе есть перечень переменных, доступных для использования в шаблонах Java Editor Template Variables.

Некорректный совет среды разработки или я неверно понимаю правила языка?

#java #intellij_idea #foreach


Есть класс Account обладающий списком ArrayList cardList.
В цикле мне требуется искать подходящий объект класса Card, и при соблюдении требуемых
параметров обновлять строку и обновлять сам объект класса Card из списка cardList.

for (int i = 0; i < cardList.size(); i++) {
 if (cardList.get(i).multi_parent != null && cardList.get(i).multi_parent.equals(multi_parentEntry)) {
     outputStr += cardList.get(i).balance;
     cardList.get(i).multi = true;
 }


}

Среда разработки Idea предупреждает, что  'for' loop replaceable with 'foreach'. 

Поясните, пожалуйста, в чем тут проблема? Если я верно понимаю предупреждение, среда
разработки предлагает использовать более компактный способ объявления цикла - foreach,
но тут возникает вопрос - разве при объявлении цикла подобным образом 

for (Card card: cardList) {
  if (card.multi_parent != null && card.multi_parent.equals(multi_parentEntry)) {
    outputStr += card.balance;
    card.multi = true;
  }
}


разве будет обновляться параметры объектов из списка (в моем случае каждый объект
класса Card из списка cardList)?
    


Ответы

Ответ 1



Возьмём следующий код: ArrayList cardList; for (Card card : cardList) { // . . . card.multi = true; } Фактически этот код эквивалентен следующему: ArrayList cardList; for (Iterator iter = cardList.iterator; iter.hasNext(); ) { Card card = iter.next(); // . . . card.multi = true; } На самом деле цикл foreach будет развёрнут в цикл с итераторами и foreach просто более короткая запись этого цикла. В коде с итераторами видно, что никаких копий элементов списка не создаётся, а в переменной card хранится ссылка на объект из списка. Поэтому изменение переменной card меняет элемент списка. Тем самым, предложение IntelliJ IDEA абсолютно верно, предложенный ею код эквивалентен исходному.