Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Можно ли очистить экран (clear screen) в Java ?


Автор: Nikolja 24.2.2009, 19:37
Вот такой, надеюсь несложный, вопрос.

В С++ есть функция clrscr() (clear screen, очистить экран) в conio.h.
(Да, знаю, не в С++, а в соответствующем header-файле).

Есть ли что-то аналогичное в Jav'e ?
(Да, знаю, это мне надо для консольного приложения под Винду, а Java - она кросс-платформенная, но всё же...)

Автор: rygel 24.2.2009, 20:44
http://www.rgagnon.com/javadetails/java-0469.html

Автор: Samotnik 25.2.2009, 10:51
Код

String ANSI_CLEAR_SEQ = "\u001b[2J";
System.out.println(ANSI_CLEAR_SEQ);

или
Код

Runtime.getRuntime().exec("cls");

Автор: SoulKeeper 25.2.2009, 11:08
Цитата(Samotnik @  25.2.2009,  10:51 Найти цитируемый пост)

Runtime.getRuntime().exec("cls");


Код

public class Test{

public static void main(String[] args) throws Exception{
System.out.println(1);
Runtime.getRuntime().exec("cls");
System.out.println(2);
}
}

Цитата

E:\tests2>java Test
1
Exception in thread "main" java.io.IOException: Cannot run program "cls": Create
Process error=2, ?? ??????? ????? ????????? ????
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
        at java.lang.Runtime.exec(Runtime.java:593)
        at java.lang.Runtime.exec(Runtime.java:431)
        at java.lang.Runtime.exec(Runtime.java:328)
        at Test.main(Test.java:5)
Caused by: java.io.IOException: CreateProcess error=2, ?? ??????? ????? ????????
? ????
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
        at java.lang.ProcessImpl.start(ProcessImpl.java:30)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
        ... 4 more

E:\tests2>


Добавлено через 1 минуту и 44 секунды
Цитата(Samotnik @  25.2.2009,  10:51 Найти цитируемый пост)
String ANSI_CLEAR_SEQ = "\u001b[2J";
System.out.println(ANSI_CLEAR_SEQ);


Цитата

E:\tests2>java Test
1
←[2J
2

E:\tests2>

Автор: Samotnik 25.2.2009, 11:23
Код

System.out.println ("\u001b[2J"); 

работает, если загружен  ansi.sys

Автор: PashaOvechkin 25.2.2009, 11:29
Код

for (int i=0; i<25; i++)
    System.out.println();


без различных загрузок сработает

Автор: ecologist 25.2.2009, 11:44
Ну это зависит от того, что там в параметрах окна установлено - а если оно в высоту 100 строк ? И буфер у него на 2000 ?

Автор: Samotnik 25.2.2009, 11:45
можно еще 
Код

for (int i=0; i<20;i++) {
System.out.println("\n\n\n\n\n");
}

как PashaOvechkin,  уже сказал  smile 

Автор: SoulKeeper 25.2.2009, 13:20
ConsoleDemo.java
Код

public class ConsoleDemo {

  public static void main(String[] args) {
    System.loadLibrary("ConsoleDemo");
    System.out.println("1");
    System.out.println("2");
    System.out.println("3");
    system("pause");
    system("cls");
    System.out.println("3");
    System.out.println("2");
    System.out.println("1");
    system("pause");
  }

  public static native void system(String str);
}


ConsoleDemo.h
Код

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class ConsoleDemo */

#ifndef _Included_ConsoleDemo
#define _Included_ConsoleDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     ConsoleDemo
 * Method:    system
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_ConsoleDemo_system
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif


ConsoleDemo.cpp
Код

#include "ConsoleDemo.h"
#include <stdlib.h>

JNIEXPORT void JNICALL Java_ConsoleDemo_system(JNIEnv *env, jclass jclazz, jstring jstr){
    const char *str = (*env).GetStringUTFChars(jstr, NULL);
    if (str == NULL) {
        return; // Exception?
    }
    system(str);
    (*env).ReleaseStringUTFChars(jstr, str);
}



Должно работать.

Автор: AntonSaburov 25.2.2009, 13:24
Осталось понять - а нафига оно все надо smile
Консольное приложение на java и еще экран очищать. Может проще ярлык повесить - он DOS окно и запустит вместе с приложением.

Автор: Nikolja 26.2.2009, 17:33
Цитата(AntonSaburov @ 25.2.2009,  13:24)
Осталось понять - а нафига оно все надо smile
Консольное приложение на java и еще экран очищать. Может проще ярлык повесить - он DOS окно и запустит вместе с приложением.

Искусство ради искусства.  smile 

Чтобы, например, на 100% ТАК ЖЕ в Яве написать те же простенькие программы для ДОС, которые у меня в старой книжке по Паскалю написаны.

А bat-файлик я сразу для таких целей сделал. 

echo off rem Шоб ничего на экране не отсвечивало
cls
java MojaProgramma


Добавлено через 4 минуты и 1 секунду
Цитата(PashaOvechkin @ 25.2.2009,  11:29)
Код

for (int i=0; i<25; i++)
    System.out.println();


без различных загрузок сработает

Спасибо, это понятно. Уже думал пойти таким простым путём.
Только тогда курсор будет на последней, а не на первой строке экрана.

Добавлено через 8 минут и 23 секунды
Цитата(Samotnik @ 25.2.2009,  11:23)
Код

System.out.println ("\u001b[2J"); 

работает, если загружен  ansi.sys

Это как? Это куда?
Можно подробнее, плиз?

Автор: LSD 26.2.2009, 19:34
http://forum.vingrad.ru/forum/topic-122613.html могут это делать.

Автор: Nikolja 27.2.2009, 17:07
Цитата(Samotnik @ 25.2.2009,  11:23)
Код

System.out.println ("\u001b[2J"); 

работает, если загружен  ansi.sys

Нет, ну кроме шуток, можно работающий исходник с этой штукой?

А то я уже на втором форуме вижу подобный совет - только никто им воспользоваться не может! Причем там про этот ansi.sys автор не вспоминал. smile 
Ну есть такой файл (ansi.sys) в каталоге Windows (и т.д.). А как о нём вспомнить в программе на Java?

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

Глянем на эту строку с точки зрения обычного синтаксиса Явы: System.out.println ("\u001b[2J");

\u001b - эскейп-последовательность, 16-ричное число (1b) с кодом, соответствующим кнопке "Esc" (простите за тавтологию  smile ). Выходит вот та самая стрелочка (см. пост SoulKeeper выше).
А дальше будет просто-напросто вывод на экран всех этих символов : [2J

Автор: Samotnik 27.2.2009, 17:46
Цитата(Nikolja @  27.2.2009,  16:07 Найти цитируемый пост)
Нет, ну кроме шуток, можно работающий исходник с этой штукой?

http://tinyurl.com/d8qp4g   smile 
Первая - как раз для тебя.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)