初心者無視! Java相談室 その9

このエントリーをはてなブックマークに追加
なんか各所で「ブラウザを立ち上げ直してください」とかいうエラーでて書き込めないって
人がいるけど、それって何をするとでるの?
俺は見たこと無い。
938山崎渉:03/01/13 19:06
(^^)
4ndってたぶんネタじゃなくて素の馬鹿だと思う
940山崎渉:03/01/15 18:17
(^^)
941デフォルトの名無しさん:03/01/18 14:24
下記のような、テストプログラムを作ってみてRuntime.exec()で動かそうとしたら上手く動きませんでした。
getInputStreamなどで外部コマンドの出力や入力はとってこれるのですが、
その子プロセスが入力待ちになっているというのを調べることは出来ないのでしょうか?
または、子プロセスを停止させる(再開させる)方法でもうまくいくかもしれないので
それもあれば教えてください。
あと、もしそのような外部コマンドの入出力をうまく処理しているサンプルプログラムが
ありましたら、それも教えてもらいたいです。
//test.c
int main() {
char c[64];
printf("What is your name?:");fflusfh(stdout);
scanf("%s",c);
printf("Welcome %s\n",c);fflusfh(stdout);
return 1;
}
>>941
プロセス生成時にInputStream/OutputStreamを渡せなかったっけ?
>>941
>その子プロセスが入力待ちになっているというのを調べることは出来ないのでしょうか?

APIの機能で入力待ちになっていることを知ることはできない。
だけど、その呼び出したプロセスの振る舞いを熟知していれば、
ある程度対応することはできるよ。

君の例だと OutputStream から "What is your name?" が
取り出せたら、InputStream にデータを送ってあげればいい。
944941:03/01/20 20:00
>>942-943
ありがとうございます。"できない"という事が分かっただけでも前に進めました。
ソースが公開されているTelnetクライアントソフトを見つけることが出来ましたので、
それをみて何とかがんばってみます。
945941:03/01/20 20:03
うわ、すいません。古いスレッドだったんですね。ageてしまいました。
書き込む前に検索はしたのですが、見落としていました。
初心者の「質問」ではなく、上級者の「相談」スレということで古いわけでは無いのでは・・・・・・。
(sage進行だけどね)
でも結局初心者が質問している罠。
(つーか初心者→質問、中級者→相談、上級者→報告、提案 な気がする。)

書き込みが少ないのを良いことにどうでもいい雑談を。
ところで、J2SDKについてくる src.zip をコンパイルして出来る
classファイルって、jre/lib/rt.jar に入ってる奴と同じ物ですかね?
いや、知ってどうしようという訳でないんですが、src.zipの中身って
オブジェクト指向的には綺麗だが速さはどうなんだろ?と思わせる
コードが時々見付かるので。
変える理由もないから同じだと思うけど、これと思うクラスをjavapで調べて見たら?
#別の言い方をすれば、おいらも結果報告キボーン
948デフォルトの名無しさん:03/01/21 10:24
>>946
rt.jarに対してデバッガでステップインして、参照ソースをsrc.jarにしても、
矛盾が発生したことが有りません。ということで、同じかと。
いろいろ考えたのですが、オブジェクト指向のオーバーヘッド
(メソッドをクラスから探す→無い→親クラスを見る みたいなの。)
があったとしても、JITコンパイルがかかるので関係ないという結論に。
Stringの処理とかVM上でゴリゴリやってるんだと思うと凄いな、と思います。

>>948 些細な疑問の為にわざわざ調べて頂き、どうもありがとうございます。
950デフォルトの名無しさん:03/01/22 18:49
>>949
でも起動時はやっぱり遅いしね。
工夫をしないと使い物にならない場合が多いよ。
>>949
>(メソッドをクラスから探す→無い→親クラスを見る みたいなの。)
Classic VMでもこんな無駄な事してないぞ。
952949:03/01/23 16:42
>951
例えばtoString()を呼ぶとき、いきなりObject#toString()を呼ぶとオーバーライドに
対応できないのでインスタンスのクラスを読みに行くはずだ、と思い>>949のように書きました。

これは最もくだらない例なので初期から対処されているんでしょうが、
JITコンパイラの守備範囲はアーキテクチャ依存部だけでなく、こういうclassを超えた
部分の最適化も含まれてるはず、と考えていたのですが何か勘違いしてますかね。
953山崎渉:03/01/23 20:03
(^^)
> これは最もくだらない例なので初期から対処されているんでしょうが
対処とかそういうレベルでなく
最初からそんな実装するバカはいない。
>954
言語仕様の一言一句に従った実装が最も原始的な実装では?
もちろん、そのバカ正直な実装の自明な欠点への対処を怠るバカはいないかもしれません。
(私は仕様マニアなのでそういう実装を作って機構説明用に残しそうですが。)
でも、何が自明で何が自明じゃないかは連続的なもので、そう明らかじゃないと思います。

くだらない例と言うのはそういう意味で書いたんですがね。
956951:03/01/24 10:28
>>949
「仮想関数テーブル」でぐぐれ
Javaも同じような仕組みを使ってる
957949:03/01/24 11:06
どうも、勉強になりました。
なるほど、これならいちいちクラス階層を辿るのと同じくらい分かりやすく、かつ速いですね。
958デフォルトの名無しさん:03/01/27 15:24
>>960
次スレよろ
>>958
次スレって初心者相談スレ?
初心者無視スレ?
960デフォルトの名無しさん:03/01/27 16:11
>>959
もうまとめろよ。どっちも大してレベルは変わらん。
JSP/ServletはWebプログラミング板のスレでやって欲しいと思う今日このごろ。
javacが通らないのとは違うウザさがある。

# 自分が分からないから、という、ね。
962デフォルトの名無しさん:03/02/20 11:57
>>961
JSP/ServletがJ2EEかねている場合はこっち
963デフォルトの名無しさん:03/02/20 17:52
質問です、

interface Teisu{
static fianl int hoge = 1;
}
上のような定数ファイルを作成し、
他のクラスで、「hoge」を使用すと時に、
一旦コンパイル後に、hoge = 2;のように変更してコンパイル
した場合、Teisuファイルしかコンパイルされず、
定数「hoge」を使用しているクラスが、「hoge」を 1 のままあつかってしまいます。
この現象をcleanコマンドなどを使わずに回避する方法は、ないのでしょうか。

よろしくお願いします。
964デフォルトの名無しさん:03/02/20 18:06
>>963
cleanコマンド?
全部一括コンパイルしたくないんですか?
>>963
Eclipse はフィールドの依存関係調べて自動的にコンパイルしてくれるが。
966963:03/02/20 18:45
>>964 >>965
一括コンパイルは、ちょっとしたくないのです。
Googleでインラインを防ぐ方法などを探してみたのですが
finalの時点で、ムリなのでしょうか。
967U ◆CZtFsGiu0c :03/02/20 18:55
>>966
Ant使ってるのならDependタスクが使えるんじゃないですか。
また、コンパイラによってはJavacタスクのdependオプションでもいける
ようですよ。
968963:03/02/20 18:56
cleanコマンドは、クリーンビルドの事です。
社内で使ってる呼び方してしまってすいません。
969963:03/02/20 20:27
「typesafe enum」という方法を使用して、

class Hoge {
private final String enum;

//クラス内のコンストラクタ
private Hoge(String str){
enum = str;
}

public String toString(){
return enum;
}

//定数
public static final Hoge AAA = "ほげ1";
public static final Hoge BBB = "ほげ2";

}

使う側

Hoge sss = Hoge.AAA;
System.out.println(sss);

結果
ほげ1

となるらしいです。
ありがとうございました。
970U ◆CZtFsGiu0c :03/02/20 20:29
>>968
じゃあどういう環境でビルドしてるかまず書かないと、答えようがないよ。
Antは使ってないってことだよね? IDEもおそらく使ってないよね? たいがいの
IDEには依存関係をチェックする機能がついてるからね。
>>969

微妙に間違ってるYo。

コンパイルすると気が付くだろうけど、ここで初めて typesafe enum を見る人には、
ちょっとかわいそうなので、訂正します。

class Hoge {
  //定数
  public static final Hoge AAA = new Hoge("ほげ1");
  public static final Hoge BBB = new Hoge("ほげ2");

  private final String str;

  //プライベートなコンストラクタ
  private Hoge(String str){
    this.str = str;
  }

  public String toString() {
    return str;
  }
}

使う側

System.out.println(Hoge.AAA);

これで >>963 の問題が解決されるのかどうかは疑問だが。
>>966
定数値とリテラルを展開されないようにするオプションは聞いたことが
無い (もしかしたら JV++ とかにあるかも)。どうしても実行時に解決
したいなら Reflection 使って public static final フィールドの値を
とって来い。

public static final String _HOGE = "AAA";

public static final String HOGE = getConst("<class-name>", "HOGE");

private static String getConst(String className, String fieldName){
  // リフレクション使ってクラスのフィールド値を参照
  return fieldValue;
}

アプリケーションとしては HOGE の値を使う。値を変えたい
場合は _HOGE の値を変える (_HOGE は private 宣言して
setAccessible(true) しても良い)。
なんか似たようなネタが並行して進んでるな…
実行時に解決したいなら、クラスに定数つくるな。
ListResourceBundleでも使えよ。簡単だぞ。
埋め
埋め1
埋め2
やっぱ、初心者無視スレだよね。
結局だれも次スレたてなかったのね つД`)
じゃ、990が次スレ立てるってことでよろしく。
>>979
あんたも立てられないのか。

漏れは同じプロバイダのどこかのヴァカか知らんが
見知らぬ他の板を荒らしたせいで漏れまでスレ立てられなくなった。
うえーん、連続投稿でおこられた つд`)
誰か代理ヨロ
【初心者】Java質問・相談スレ21【大歓迎】
http://pc2.2ch.net/test/read.cgi/tech/1048689029/

アッチだけ立てといた。
まだこのスレ生きてたか。でもいい加減統合でいいだろ。
985kei ◆RYRyfXdPuo :03/03/28 04:33
   _, ._
 ( ゚ Д゚) ……
 ( つ 旦  
 と_)_)
   _, ._
 ( ゚ Д゚) ……
 ( つ O __
 と_)_) (__()、 ガシャ
     ⊂;:.,.。o,;⊃
>>982
スレと板両方をリロードし、
再投稿する内容をすこし修正すれば再び投稿できることがアルヨ。