IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Barevný výpis v konzolové aplikaci

Aktivity
Avatar
petr.chatar.anton:30.12.2021 18:07

Ahoj, zkouším v konzolové aplikaci v Javě 8 na Windows 10 barevný tisk pomocí ANSI escape kódů. Ve výstupu v terminálu (Visual Studio Code) to funguje skvěle. Jakmile z toho dělám JAR a spustím v příkazovém řádku, výstup je úplně špatně. Viz. přiložený obrázek. Prosím poraďte, kde dělám chybu.

Zkusil jsem: Zkouším to takhle:

package test;

public class App {
    enum Color {
        //Color end string, color reset
        RESET("\033[0m"),

        // Regular Colors. Normal color, no bold, background color etc.
        BLACK("\033[0;30m"),    // BLACK
        RED("\033[0;31m"),      // RED
        GREEN("\033[0;32m"),    // GREEN
        YELLOW("\033[0;33m"),   // YELLOW
        BLUE("\033[0;34m"),     // BLUE
        MAGENTA("\033[0;35m"),  // MAGENTA
        CYAN("\033[0;36m"),     // CYAN
        WHITE("\033[0;37m"),    // WHITE

        // Bold
        BLACK_BOLD("\033[1;30m"),   // BLACK
        RED_BOLD("\033[1;31m"),     // RED
        GREEN_BOLD("\033[1;32m"),   // GREEN
        YELLOW_BOLD("\033[1;33m"),  // YELLOW
        BLUE_BOLD("\033[1;34m"),    // BLUE
        MAGENTA_BOLD("\033[1;35m"), // MAGENTA
        CYAN_BOLD("\033[1;36m"),    // CYAN
        WHITE_BOLD("\033[1;37m"),   // WHITE

        // Underline
        BLACK_UNDERLINED("\033[4;30m"),     // BLACK
        RED_UNDERLINED("\033[4;31m"),       // RED
        GREEN_UNDERLINED("\033[4;32m"),     // GREEN
        YELLOW_UNDERLINED("\033[4;33m"),    // YELLOW
        BLUE_UNDERLINED("\033[4;34m"),      // BLUE
        MAGENTA_UNDERLINED("\033[4;35m"),   // MAGENTA
        CYAN_UNDERLINED("\033[4;36m"),      // CYAN
        WHITE_UNDERLINED("\033[4;37m"),     // WHITE

        // Background
        BLACK_BACKGROUND("\033[40m"),   // BLACK
        RED_BACKGROUND("\033[41m"),     // RED
        GREEN_BACKGROUND("\033[42m"),   // GREEN
        YELLOW_BACKGROUND("\033[43m"),  // YELLOW
        BLUE_BACKGROUND("\033[44m"),    // BLUE
        MAGENTA_BACKGROUND("\033[45m"), // MAGENTA
        CYAN_BACKGROUND("\033[46m"),    // CYAN
        WHITE_BACKGROUND("\033[47m"),   // WHITE

        // High Intensity
        BLACK_BRIGHT("\033[0;90m"),     // BLACK
        RED_BRIGHT("\033[0;91m"),       // RED
        GREEN_BRIGHT("\033[0;92m"),     // GREEN
        YELLOW_BRIGHT("\033[0;93m"),    // YELLOW
        BLUE_BRIGHT("\033[0;94m"),      // BLUE
        MAGENTA_BRIGHT("\033[0;95m"),   // MAGENTA
        CYAN_BRIGHT("\033[0;96m"),      // CYAN
        WHITE_BRIGHT("\033[0;97m"),     // WHITE

        // Bold High Intensity
        BLACK_BOLD_BRIGHT("\033[1;90m"),    // BLACK
        RED_BOLD_BRIGHT("\033[1;91m"),      // RED
        GREEN_BOLD_BRIGHT("\033[1;92m"),    // GREEN
        YELLOW_BOLD_BRIGHT("\033[1;93m"),   // YELLOW
        BLUE_BOLD_BRIGHT("\033[1;94m"),     // BLUE
        MAGENTA_BOLD_BRIGHT("\033[1;95m"),  // MAGENTA
        CYAN_BOLD_BRIGHT("\033[1;96m"),     // CYAN
        WHITE_BOLD_BRIGHT("\033[1;97m"),    // WHITE

        // High Intensity backgrounds
        BLACK_BACKGROUND_BRIGHT("\033[0;100m"),     // BLACK
        RED_BACKGROUND_BRIGHT("\033[0;101m"),       // RED
        GREEN_BACKGROUND_BRIGHT("\033[0;102m"),     // GREEN
        YELLOW_BACKGROUND_BRIGHT("\033[0;103m"),    // YELLOW
        BLUE_BACKGROUND_BRIGHT("\033[0;104m"),      // BLUE
        MAGENTA_BACKGROUND_BRIGHT("\033[0;105m"),   // MAGENTA
        CYAN_BACKGROUND_BRIGHT("\033[0;106m"),      // CYAN
        WHITE_BACKGROUND_BRIGHT("\033[0;107m");     // WHITE

        private final String code;

        Color(String code) {
            this.code = code;
        }

        @Override
        public String toString() {
            return code;
        }
    }
    public static void main(String[] args) throws Exception {
        System.out.println("Hello, World!");
        System.out.print(Color.BLACK_BOLD);
        System.out.println("Black_Bold");
        System.out.print(Color.RESET);

        System.out.print(Color.YELLOW);
        System.out.println("YELLOW & BLUE");
        System.out.print(Color.RESET);

        System.out.print(Color.YELLOW);
        System.out.println("YELLOW");
        System.out.print(Color.RESET);
    }
}
 
Odpovědět
30.12.2021 18:07
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:3.1.2022 20:19

Nebude to možná tím, že to zkoušíš ve windows CLI (Command LIně)?
Ta barvičky pokud vím nijak neumožňuje. Celkově mi přijde windows CLI hodně nedostačující po všech stránkách, ale to hlavně proto, protože jsem zvyklý na linuxový terminál.

Řešení by ti mohl nabídnout gitbash (https://gitforwindows.org)
Tento terminál používám místo klasické CLI, protože jednak umožňuje používat mnoho linuxových příkazů i pod windejsi, no ale ho přináší samotný git.

Zkoušel jsem tvůj kód zkompilovat a zazipovat do JARka a šlo to. Jak přes IDE, tak i ručně. Ve windejsi CLI mi to píše to samé, ale v git bash to frčí.

Nahoru Odpovědět
3.1.2022 20:19
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:3.1.2022 20:25

Mimochodem neubírej se touto cestou - konzolové aplikace. Ty se hodí v dnešní době pro testování hardwaru (kupříkladu když chceš servisně opravovat router atd.) Tam ti bohatě stačí, když v konzoli získáš output z hardware, ale jinak to nemá moc význam a to z jasného důvodu - trendy. Dneska není potřeba si všechno psát. Právě naopak se musíš řídit tím, co chce koncový zákazník (no... spíš co se nutí koncovému zákazníkovi, aby chtěl :D)
A to ti říká člověk, který kupříkladu git příkazy píše právě přes git bash, namísto toho, abych využíval grafické prostředí (třeba přímo v IDE, která už to mají, uznávám, šikovně řešené). V tomhle jsem sice konzerva, protože jsem se git učil na linuxech a už mi to zůstalo, ale je potřeba znát trendy a dneska nejsou trendy žádné konzolové appky, ani desktopové, ani dokonce už jen webové, ale mobilní, dotykové a cloudové.

Ale chápu, že to možná máš jako cvičení, nebo sis to chtěl zkusit nebo to chceš používat jako tool či mikroservisu (i když.... vzhledem k tomu, že enum rveš do jedné třídy, tak poslední dvě věci asi padají :D).
Tak to ber jako point, že není třeba z toho vytvářet JARka. Pokud si chceš otestovat na desktopu svůj kód, tak ti stačí zkompilovaná třída (čili .class soubor) a ten spustíš jednoduše v CLI příkazem java <FILE> (dokonce bez přípony .class).

Nahoru Odpovědět
3.1.2022 20:25
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na petr.chatar.anton
Atrament:3.1.2022 20:41

Klasická windowsovská příkazová řádka není emulátor terminálu, escape sekvence vůbec nepodporuje. Musíš místo ní použít nějaký emulátor terminálu, který je podporuje.

 
Nahoru Odpovědět
3.1.2022 20:41
Avatar
petr.chatar.anton:9.1.2022 9:58

Děkuju Vám všem za reakce, je to pro jednu jednoduchou utilitku, Jen jsem chtěl uživateli zvýraznit část výstupu, tohle mi přišlo zajímavé, chtěl jsem to jen zkusit. Děkuju.

 
Nahoru Odpovědět
9.1.2022 9:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.