ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java質問&情報提供サイトコミュのスレッドを利用した時刻を表示するネットワークプログラミング

  • mixiチェック
  • このエントリーをはてなブックマークに追加
皆さんはじめまして。
学校の課題でトピックのタイトルどおりの課題が出たのですが、
教科書やネットで調べたのですが、
全くわかりませんでした><
もしよければどういう風にプログラムを作ればいいのか教えていただけないのでしょうか?

問題:スレッドを用いて時刻表示を行うプログラムを作成せよ。なお、main()メソッドではスレッドの作成・起動のみを行い,時刻表示はスレッド用クラスClientProcのrun()メソッドで行う.

答え:
import java.io.*;
import java.net.*;
import java.util.*;

class Server{
public static void main(String args[]) {

ClientProc cproc; // スレッド用クラスClientProcのオブジェクト
Thread cproc_thread; // スレッド
cproc = null;
cproc_thread = null;

try {




}catch (Exception e) {
System.err.println("エラーです");
System.exit(1);
}
}
}


// スレッドのひな形
class ClientProc implements Runnable {
// スレッド用の変数はここに書く

Date d; // 日付・時間処理用オブジェクト
String outtxt; // 出力データを格納する文字列
boolean cont = true; // ループの制御用変数

  //コンストラクタ
public ClientProc() {


}

// スレッド本体
public void run() {
try {
while(cont){
d = new Date();
outtxt = d.toString();

System.out.println(outtxt);
Thread.sleep(1000);

if(System.in.available()>0){
System.out.println("Exit");
cont = false;
}
}
}catch (Exception e) {
System.err.println("エラーです");
System.exit(1);
}
}
}

といった感じなんですけども、
mainのtryとコメントのコンストラクタのところがわかりません><
どうか教えてください><
お願いします><
もし場違いというのでしたら削除します。

コメント(7)

んー。この答えはどなたが書いたのかしら。

指摘事項
・ClientProc側でimplements Runnableしているのであれば
Server側のcproc_thread変数はいりません。

・Server側でClientProcの変数を2行に渡り初期化していますが
1行でいいと思われます。
 また、Nullを最初に渡すのではなくコンストラクタをいきなり実行しても
問題ないと思われます。
 ただし、コンストラクタに引数を設け、コンストラクタ実行処理内で
例外が発生する場合はtryに中に入れないとだめでしょうね。


で、質問の回答ですが、
ClientProcでimplements Runnableしていますので、
・Server側でコンストラクタ生成
・run()メソッド実行

これだけで動作します。
コーディングしたのを記載しますが、コピペせず、意味を考えて
自分で今のソースを書き直して試してくださいね。

import java.util.Date;

/**
* 本処理.
*/
public final class Server {
/**コンストラクタ.*/
private Server() {
}
/**
* メイン処理.
* @param args なし
*/
public static void main(final String[] args) {

//スレッド用クラスClientProcのオブジェクト初期化
ClientProc cproc = new ClientProc();
try {
//ClientProc実行
cproc.run();
} catch (Exception e) {
System.err.println("エラーです");
System.exit(1);
}
}
}

/**
* スレッドのひな形.
*/
final class ClientProc implements Runnable {

/** 日付・時間処理用オブジェクト.*/
private Date d;
/** 出力データを格納する文字列.*/
private String outtxt;
/** ループの制御用変数.*/
private boolean cont;

/**ウェイト時間.*/
private static final int WAIT_TIME = 1000;
/**コンストラクタ.*/
public ClientProc() {
//コンストラクタで初期化したほうがわかりやすいと
//思われます。
setD(new Date());
setOuttxt(new String(getD().toString()));
setCont(false);
}

/**
* スレッド実行本体.
*/
public void run() {
try {
while (isCont()) {
setD(new Date());
setOuttxt(getD().toString());

System.out.println(getOuttxt());
Thread.sleep(WAIT_TIME);

if (System.in.available() > 0) {
System.out.println("Exit");
setCont(false);
}
}
} catch (Exception e) {
System.err.println("エラーです");
System.exit(1);
}
}

/**
* 処理続行フラグ取得.
* @return 処理続行有無
*/
public boolean isCont() {
return cont;
}

/**
* 処理続行フラグ設定.
* @param arg true:続行 false:中断
*/
public void setCont(final boolean arg) {
this.cont = arg;
}

/**
* 日時取得.
* @return 設定した日時
*/
public Date getD() {
return d;
}

/**
* 日時設定.
* @param arg Dateオブジェクト
*/
public void setD(final Date arg) {
this.d = arg;
}

/**
* 出力文字列取得.
* @return 出力文字列
*/
public String getOuttxt() {
return outtxt;
}

/**
* 出力文字列設定.
* @param arg 出力文字列
*/
public void setOuttxt(final String arg) {
this.outtxt = arg;
}
}

あと参考URLも載せておきます。
コンストラクタ
http://www.javadrive.jp/start/constructor/

javaDoc Runnable
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/Runnable.html
>1さん
質問内容とその指摘・回答は、的外れもいいところだと…

質問者:tryブロックに書く内容で適切な記述が分からない。
>1さん:スレッドにする内容ではないから、こっちの方がいいよ。
この課題の意図(推測):Threadクラスを使ってスレッドの勉強。

-class Server{
+public class Server{

try {
+cproc = new ClientProc();
+cproc_thread = new Thread(cproc);
+cproc_thread.start();
}catch (Exception e) {

> 檸檬さん
たしかに質問と回答が噛み合ってなかったですね
申し訳ない

たしかにその記述が一番質問の回答になってますね

本当に申し訳ない
あ、そーいやそうだww
System.outしてたから、考えてなかった^^;

これをネットワーク対応は面倒なので、どなたか補足よろしく…。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java質問&情報提供サイト 更新情報

Java質問&情報提供サイトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング