質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1753閲覧

上書きしながら出力する方法

H30_inenaga

総合スコア18

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/12/03 14:14

編集2018/12/03 15:35

実現したいこと

以下に乗せるソースコードの「にメッセージを送信しました」という部分を上書きして出力したいです。
現段階では、新しい情報が入るたびに、
改行して、「にメッセージを送信しました」と表示されてしまうので、実行画面が埋もれてしまいます。
それを解消したいです。

【加筆部分】
現在、2つのスマートフォンを通信させて、一方が、送信したメッセージをもう一方が受信するソフトを作成していました。
これまでのプログラムでの実行ですと、メッセージを受信したとき、
メッセージを受信しました  ←1回目
メッセージを受信しました  ←2..n回目

と、たくさんメッセージを受信すれば受信するほど、受信通知が多くなり、スマートフォンの画面が埋もれてしまいます。
これを、メッセージを受信しました、を上書きしながら出力することで、最初の行に最新のメッセージを受信した通知をしてほしいということになります。
理想形
[受信したメッセージ]←最新のものに更新される
メッセージを受信しました。←これは、更新されているが、もともと同じ文なので変わっていないように見える
イメージ説明

該当のソースコード

Java

1 2public void run() { 3 OutputStream outputStream; 4 String msgReply = "にメッセージを送信しました。" ; 5 try { 6 outputStream = hostThreadSocket.getOutputStream(); 7 PrintStream printStream = new PrintStream(outputStream); 8 printStream.print(msgReply); 9 printStream.close(); 10 11 message += "" + msgReply + "\n"; 12 13 activity.runOnUiThread(new Runnable() { 14 15 @Override 16 public void run() { 17 activity.msg.setText(message); 18 } 19 }); 20 21 } catch (IOException e) { 22 // TODO Auto-generated catch block 23 e.printStackTrace(); 24 message += "Something wrong! " + e.toString() + "\n"; 25 } 26 27 activity.runOnUiThread(new Runnable() { 28 29 @Override 30 public void run() { 31 activity.msg.setText(message); 32 } 33 }); 34 }

試したこと

インターネットで調べたところFileWriterという言葉をよく見ましたがこれで正解なのでしょうか?
回答下さる皆様には、記載したソースコードに追記という形で示していただけますと助かります。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/12/03 14:42

今現在どういう動作をしているんでしょうか。もうちょっと詳しい説明をしてください。また、それをどうしたいのかというのもいまいち不明です
m.ts10806

2018/12/03 14:48

タイトルと内容が今一つ結び付かないので調整いただけますか?
m.ts10806

2018/12/03 14:50

状況次第では記載コードが原形とどめない可能性もあるのであしからず。
H30_inenaga

2018/12/03 15:09

現在、2つのスマートフォンを通信させて、一方が、送信したメッセージをもう一方が受信するソフトを作成していました。
H30_inenaga

2018/12/03 15:10

これまでのプログラムでの実行ですと、メッセージを受信したとき、
H30_inenaga

2018/12/03 15:11

メッセージを受信しました  ←1回目
H30_inenaga

2018/12/03 15:12

メッセージを受信しました  ←2..n回目
H30_inenaga

2018/12/03 15:12

と、たくさんメッセージを受信すれば受信するほど、受信通知が多くなり、スマートフォンの画面が埋もれてしまいます。
H30_inenaga

2018/12/03 15:14

これを、メッセージを受信しました、を上書きしながら出力することで、同じ行に最新のメッセージを受信した通知をしてほしいということになります。
H30_inenaga

2018/12/03 15:15

同じ行というよりかは、最初の行ですね。
H30_inenaga

2018/12/03 15:16

[受信したメッセージ]←最新のものに更新される
H30_inenaga

2018/12/03 15:17

メッセージを受信しました。←これは、更新されているが、もともと同じ文なので変わっていないように見える。
H30_inenaga

2018/12/03 15:17

よろしくお願いします。
y_waiwai

2018/12/03 15:24

質問を編集して、そこんところを加筆しましょう。また、その具合が悪いという画面のスクリーンショットを提示してくれるとありがたいです
H30_inenaga

2018/12/03 15:45

よろしくお願いします。
guest

回答2

0

java

1message += "" + msgReply + "\n";

messageがフィールド変数だとしたら、このrunが実行されるたびにmessageに文字列がつぎ足されていくことになり、それをこれの後のrunOnUiThreadによって画面に表示していくので、画面が埋まっていくのではないでしょうか。

単に+==にすればいい気がします。

投稿2018/12/03 15:25

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H30_inenaga

2018/12/03 15:45

修正してみましたら、たしかに、メッセージを受信しました、という部分は、増えず、埋もれなくなりましたが更新されるはずの受信したメッセージが瞬間的に表示されて消える仕様になりました。
H30_inenaga

2018/12/04 17:54

送信されたメッセージの表示が瞬間的なものになってしまうため
guest

0

ベストアンサー

swordoneさんの意見ベースです。

受信したメッセージが消えてしまう、というのは呼び出しているメゾットが
Runnable のものだからだと思います。全体のソースではないのでなんとも言えませんが。

もし上のとおりだった場合、こうすればいいのではないでしょうか。

// 表示の部分 while( true ){ if(){ // 新しいメッセージを通知したら( () の中身は私は詳しくないので省略 ) break; } }

仕事とか理由がなければ、ぜひクラス自体を提示してほしいものです。(個人の意見)

追記

理由は不明ですが、変数は
"にめっせーじを..." なのになぜ
4
メッセージを送信しましたになるんでしょうね。

あとFileWriterはtextファイルについてです。

FileWriter fw = new FileWriter( f, false ); // fはFile あっているかは保証しない

こういう感じにすると、全て消してから書き込み、とできるということです。

投稿2018/12/05 04:53

編集2018/12/05 05:39
yukkuri

総合スコア624

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問