
Ubuntu日本語フォーラム

ログインしていません。
当方、PC初心者、プログラミング初心者です。
分かりにくい説明になると思うのですが、よろしくお願いします。
本題は、
https://forums.ubuntulinux.jp/viewtopic.php?pid=68040
↑この問題のjavaヴァージョンなんですが、
public static void main(String[] args){
String line;
line = new Scanner(System.in).nextLine();
System.out.println(line);
}
みたいなプログラムを端末で実行した時に、
全角文字を入力して、BackSpaceを押すと半角一文字分しか削除されません。
「テスト」と入力してBackSpaceを押しても「ト」しか削除されず、
「テ」一文字分と「ス」の半分が残ってしまいます。
誤入力をしたときに入力し直そうとしても上手くできません。
試しに削除できるところまで削除してからもう一度入力して、エンターキーを押して見たところ、
System.out.println(line);は何も表示してくれませんでした。
WindowsXPのコマンドプロンプトではこのようなことは起こらないのですが、
この問題を解決(=きちんと誤入力した文章の削除ができるようにする)には、
プログラムの側が原因(=プログラムを修正するべき)なのでしょうか?
それとも端末側が問題(=Ubuntuのアップデートに期待するべき)なのでしょうか?
以上です。
2chでも同様の質問をさせていただいたのですが、
Ubuntu12.04のリリースの話題でがなれてしまったようなので、
こちらに質問させていただきました。
どなたかお返事をよろしくお願いいたします。
オフライン
>試しに削除できるところまで削除してからもう一度入力して、エンターキーを押して見たところ、
>System.out.println(line);は何も表示してくれませんでした。
この二行に関しては勘違いでした。
「テスト」と入力し、BackSpaceを3回押してから、
再び「てすと」と入力してEnterを押したところ、「てすと」のみ表示されました。
オフライン
僕もあまり詳しいことをわかっているわけではないので、解決法は提示できませんが…
参照されているスレッドで、einundzwanzighundertsechsさんが言われているように、「端末制御せずに入力を受け付ける」状態になっているようです。
einundzwanzighundertsechs による投稿:
端末制御せずに入力を受け付けるコマンド(引数無の cat, perl, dash 等)を実行すると,
#1 で述べられているのと同じ挙動になるはずです.
普通にターミナルを使っている時は bash が ncurses を使って端末制御をしているので,
バックスペースや左右の矢印キーが直感どおりの動作をするわけです.
単純にアップデートで解決できるわけではないと思いますので、端末制御が可能なコンソールを使用する(例:Emacsの中でM-x shellする)か、プログラムで実装する(どうやればいいのかわかりませんが)かの2択ではないかと…
オフライン
vine_userさん、お返事ありがとうございます。
vine_userさん、einundzwanzighundertsechsさんがおっしゃるように、
EmacsでM-x shell(Alt+xキーを押した後、shellと入力することだったんですね)を実行後、
#1のプログラムを実行してみたところ、全角入力した文字をきちんと削除することができました。
単純にUbuntuのアップデートでこの問題が解決してくれるわけではないなら、
端末などに依存したCUIのプログラムではなく、
jarファイルを実行するだけで使えるGUIのプログラムに変更すべきなんでしょうか?
まだ勉強不足で、GUIでの文字の入出力の方法が分からないので、
CUIで動くプログラムを作りたかったのですが……。
CUIで動くプログラムを作るよりは、
GUIで動くプログラムを作る方が、そもそもこの問題に直面しないですむのでしょうか?
また、単にGUIに変更しただけでは、再び全角入力した文字を綺麗に削除できない問題は起こりうるのでしょうか?
オフライン
おそらくCUIでもできるんじゃないかとは思いますが、ご提示いただいた単純なプログラムに実装するのはやりすぎって感じ(求める結果に対して労力が大きすぎるという意味で)がします…。
Javaで「ncurses」を扱えるようになる「jcurses」というライブラリがあるということはわかりました(Netbeans用かな?)が、それで解決できるかどうかはわかりませんし、僕にも使い方はわかりませんので、あとは識者の方に委ねます。
オフライン
vine_userさん、お返事のために時間を割いていただいてありがとうございます。
jcursesについて、グーグルで調べてみましたが、具体的なソースの作例が見つからず、
使い方がよく分かりませんでした。
(作例を示してもらえるとありがたい、と言うような投稿をjcursesのサイトで見つけたのですが、
その投稿に対して返事がされておらず、jcursesの作例を見つけることはできませんでした。)
jcurseについて英語のサイトを調べる事に時間を割くより、
書籍の充実しているGUIの実現の仕方について勉強した方が、
実がありそうに感じます……。
結論としては、
あくまでCUIにこだわる場合
→jcursesを使う(具体的な使い方は分かりませんが)
とくにCUIにこだわらない場合
→GUIで動くプログラムに変更する
といったところでしょうか?
jcursesを活用してらっしゃる先達の識者さんに作例を示していただけると、
今後同様の問題に直面した、Ubuntuの端末を使ったプログラミングをしている初心者の救済になると思うので、
コメントいただけると幸です。
オフライン