重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

javaコンソール出力でVT-100等のエスケープシーケンス文字はできないのでしょうか?
例えば、
System.out.print("\1b[1C"); でカーソルを次にとか、
System.out.print("\1b[5;31m"); で出力文字を赤色で点滅させるとか。

C言語のprintfでは出来るのですが、javaのSystem.out.print系ではできませんでした。

当方、現在CUIの諸設定画面を作っており、困っております。Linuxサーバーにある諸設定画面を
LANで繋がれたクライアント(VT-100端末)で行うというお客様からのご要望で、なんとか
したいと思っております。
GUI、ブラウザで設定はどうですか?と提案したのですが、なるべくサーバーの負荷を抑えたい
ので、不要なサービス等を入れたくないとの事です。
(ちなみにDBサーバーの諸設定です。処理が集中するとHDが回りっぱなしで負荷がすごい)
ちなみにlinuxのランレベルも当然3(CUI)です。

できればjavaで実現したいと考えたのですが、やっぱりC言語で書かないとダメかもです。

ご回答、宜しくお願い致します。

A 回答 (4件)

Windowsのコマンドプロンプトは、


デフォルトではANSI標準エスケープシーケンスに対応していないみたいですね。

<SystemRoot>\system32\config.ntファイルを編集して、
device=%SystemRoot%?system32?ANSI.SYS
とANSI.SYSを読み込ませて、
CMD.EXEではなく、command.comで実行すればできるらしい?

http://support.microsoft.com/kb/101875/ja
http://support.microsoft.com/kb/100394/ja
下手な機械翻訳より、原文の方がましかも
http://support.microsoft.com/kb/101875/en-us/
http://support.microsoft.com/kb/100394/en-us/
    • good
    • 0
この回答へのお礼

ご回答ありがとう御座います。
そうだったんですか。linuxでは動作しているので特に問題はないのですが、
これでスッキリしました。

お礼日時:2010/07/09 06:06

Debian-lennyのGNOME-terminalではちゃんと赤くなるんだけどなぁ。



writeでだしてますよね?

printだと実行環境の文字コードに変換しようとするから、
コード値変わっちゃうかもしれません。

この回答への補足

あ、DebianでもRedHat、CentOS、Fedora、ubunts、KNOPPIX、Vineでもコンソールで
出来ました^^。

でも・・・
MS-DOSコマンドプロンプトで出ません(このMSって感じです><)
別に直接は関係ないんですが、気になったもので・・・。

ご指摘ありがとうございました。

補足日時:2010/07/08 23:51
    • good
    • 0

こんにちは、



www.javaworld.com/javaworld/javaqa/2002-12/02-qa-1220-console.html

このサイトによりますと次のように書けばよいのかもしれません

System.out.print((char)27 + "[1C");
System.out.print((char)27 + "[5;31m");
System.out.print((char)27 + "[2J");

この回答への補足

VT-100端末からは上手くいきました。linuxのコンソールからも上手くいってます。

一応、これでなんとかできそうなのですが、Windowsのコマンドプロンプトではダメでした。
Windows上のコマンドプロンプトでもできそうな感じなのですが。(printfでは上手くいってます)
やっぱりMS-DOS系はある意味特殊なので、ダメなのでしょうか?

補足日時:2010/07/08 16:46
    • good
    • 0

Javaには\1bなんていうエスケープ文字は無いので



byte[] esc = {0x1b};
System.out.write(esc);
System.out.print("[1C");

ってやってみたらどうでしょう?

この回答への補足

ご回答ありがとうございます。
やってみました。出来ませんでした><。

System#out#print系メソッドとC言語のprintf関数の仕組みが違うんですね。
JVMに起因するかなって思ってます。

補足日時:2010/07/08 14:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!