【初心者】Java質問・相談スレッド102【大歓迎】at TECH
【初心者】Java質問・相談スレッド102【大歓迎】 - 暇つぶし2ch369:デフォルトの名無しさん
07/06/10 03:10:16
Java6で追加されたjavax.scriptを使いたいんだけど、
第三者によって書かれたスクリプトを安全に実行したいんです。
JavaScriptからでも普通にJavaのAPIにアクセス出来てしまうのですが、
これを禁止する方法はあります?

370:デフォルトの名無しさん
07/06/10 07:53:26
>>367
動的SQLか静的SQLかにもよるけど。
静的SQLの場合、定数として宣言するのが定石。
この時、書き方としては+で連結して書いて何も問題ない。
コンパイラがコンパイルする時に、最適化して1つの文字列としてくれるから。
読みやすさを重視して、1行ずつ改行してインデントきって+連結。

静的SQLの場合、やはり定数として宣言して?を使ったPreparedStatementで使用するのが良い。
もっと複雑なSQLを構築したい場合は、動的にSQLを作成するけど、そういう場合はStringBufferを使用するほうが好ましい。

ただ、どちらにせよコードに定数としてSQLを書くよりも、SQLは外部のテキストファイルか何かで管理する方がベスト。
複雑なSQLを動的に作成する必要がある場合、本当に必要かを検討し、静的SQLの組み合わせで処理できないかを考えるべし。
この辺りは3層構造とかの記事でも読んで。

371:356
07/06/10 08:11:18
>>365
書庫操作ライブラリの自作ですか!
たくさん勉強が必要そうですね。

まさにwgetでデータを取ってきて解凍する処理です。
lhasaとかtarなら正常終了したのですね?
次に試してみます!ありがとうございます。

372:デフォルトの名無しさん
07/06/10 08:22:54
>>369
「第三者によって書かれたスクリプト」が安全なわけないだろ

373:デフォルトの名無しさん
07/06/10 09:33:31
>>369
空の javax.script.SimpleBindings とかでグローバルスコープ上書きすれば
アクセスできないようにならん? とか思ったけど、Rhinoには通じないみたい。
で、ちょっと方向変えて

ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
Bindings b = engine.getBindings(ScriptContext.GLOBAL_SCOPE);
b.put("java", new Object());

みたいにするとパッケージの根元から潰したり、同じ事やれば、
デフォルトで Object とか System とか Thread とか潰したりはできそう。
どのクラスを使って良くて、どのクラス使っちゃダメってのを個別に制御しようとすると面倒臭そうだけど

374:デフォルトの名無しさん
07/06/10 10:36:39
>>371
漏れも調子に乗って既存のlzh系処理ソフトにラッピングする形で
自前の書庫管理してたんだけど途中で書庫サイズが2GB超えて
ぼろぼろになって原因がそっちにあるのが分かってやる気なくした

自分でライブラリ作った方が安心出来るよ



375:デフォルトの名無しさん
07/06/10 11:51:23
>>372
今ご覧になってるWebブラウザは第三者が書いたJavaScriptを安全に実行しているわけで。
>>373
全部のパッケージ潰せて、わずかな安全な自前の関数だけScriptEngine#put()できればとりあえず使いものになります。
java、javax、com、orgあたりを潰せばjava seのapiすべて潰したことになるのかな?潰し忘れがあったらかなりデンジャラス。
あちこちドキュメント漁ってるんだけど、なんでこんな大事なことどこにも書いてないんだろう。
でもとりあえずありがとう

376:デフォルトの名無しさん
07/06/10 12:55:05
>>375
どうしてJavaScriptでローカルのディスクに書き込めないのはなぜ?


377:デフォルトの名無しさん
07/06/10 13:13:52
>>375
アプレットでも使われているけど第三者のクラスファイルを安全に実行する
既存のモデルを使う。Javaのセキュリティモデルを勉強すること。
あとjava.sun.comにドキュメントあるよ。JavaSEのドキュメントのページからリンク
はられてる。

378:デフォルトの名無しさん
07/06/10 13:35:55
すいません。 誰か教えてください。


DoJa-3.5用(900用)のエミュレータを使ってHelloWorldを出すという、初歩の初歩でつまずいてるのですが、ビルドを実行すると

javac:ターゲットリリース1.1がデフォルトのソースリリース1.5と競合しています。

とでて、ビルドが失敗してしまいます。
どうすればよいのでしょうか? Javaスレの神様どうかお教えください。お願いします。

379:デフォルトの名無しさん
07/06/10 13:41:09
>>378
こっち
スレリンク(tech板)


380:デフォルトの名無しさん
07/06/10 13:42:32
と思ったら既にマルチしてたのね

もう回答は期待出来ないな

じゃ


381:デフォルトの名無しさん
07/06/10 14:12:23
すいません。 マルチはダメなんですね。ごめんなさい。
sun.tools.javac.Mainを使用するをチェックしていないのが原因でした。
回答が期待できないといわれたので、別の方法で考えました。 自分で考えたほうが身につきますね。ありがとうございました。

382:デフォルトの名無しさん
07/06/10 14:39:17
昨日Image関連で質問した物です。回答ありがとうございました。

回答いただいた内容で解決できたのですが、新たな疑問点が。

Imageをクラス間でやりとりすることは不可能なのでしょうか。
メンバにImageを持たせ、paintにて描画した後、
他クラスからそのImageを取得しようとしたところ、
Paintメソッド内では存在してましたが他クラスから呼び出した時点でnullになっていました。

3DのCUBEを乱数に寄り平行移動させた物を複数生成し、
1クラスにつき一つのCUBEをImageに描画させ、
のちに統合したImageをCanvasに描画するという手順を取っているのですが、
Imageのやりとりが出来ないとなるとこの手法が使えません。
ご教授宜しくお願いいたします。

383:デフォルトの名無しさん
07/06/10 14:43:12
static

384:デフォルトの名無しさん
07/06/10 15:17:31
Java2ME環境で質問です。
ネットワーク上のNetBIOS名を列挙したい場合はTCP/UDPから上の部分をすべて自前で実装する以外ありませんか?

JCIFSというライブラリはありますが、LGPLなので手が出しづらいです。
スレ違いになりますがjarからclassファイルを取り出して使用した場合はソースを公開する必要があるのかないのか
分かる方はこちらも教えていただけると幸いです。

385:デフォルトの名無しさん
07/06/10 15:28:03
>>371
lhasaはいいとして、lzhを扱えるtarはないと思うので念のため。
サンプルでtarが展開しているのはtar-ballをgzipで固めたtazファイル。
ProcessBuilderで呼び出したバッチファイルで、
ファイルを生成するプログラムがうまく動作しないとかだといやだなあと思って確認しただけなので。

Lhaca自体の問題というより実行環境の問題の気がしなくもない。
eclipseから起動しているのが原因とかかも。
バッチを呼び出しているjavaプログラムを直接コマンドラインからjavaコマンドで叩いた場合はどうなる?

386:デフォルトの名無しさん
07/06/10 15:45:00
>>384
そのjarのライセンスに従ってください

387:デフォルトの名無しさん
07/06/10 16:32:42
>>377
JDKドキュメントのセキュリティの項は目を通してみているけど、さっぱりわからない。ムズ過ぎ……

>>現在、SDK の一部として提供されているコードはすべてシステムコードと見なされて、固有のシステムドメインの中で実行されます。
>>システムコードには、自動的にすべてのアクセス権が与えられます。

とか書かれてるけど、javax.scriptはシステムコードですべてのアクセス権が与えられてて制限は出来ないってこと?

388:デフォルトの名無しさん
07/06/10 16:52:35

public class a{
public static void b(int foo){
System.out.println("Int");
}
public static void b(byte foo){
System.out.println("byte");
}

public static void main(String args[]){
b(26);
}
}

mainでbyteを入れているのに、何故intが呼ばれるのですか?

389:デフォルトの名無しさん
07/06/10 17:07:51
>>388
何故26がbyteなのですか?

390:デフォルトの名無しさん
07/06/10 17:10:45
>>388
127以下の数だからってbyteとして扱われるわけじゃない。
Lつけなきゃ整数リテラルはすべてint。言語仕様の3.10.1参照。

391:デフォルトの名無しさん
07/06/10 19:13:20
データベースの中身を拾ってきて
それをCSV形式でファイルに書き出してデスクトップに落としたい場合
メモリ上にファイルを作成→一行ずWriteで書き出す→拡張子をCSVにしてデスクトップに保存する

こういうクラスを作ってやっているのですが
だいたい皆さんもこういうやり方でやっているのでしょうか?
もっと簡単な方法とかあるのでしょうか?

392:デフォルトの名無しさん
07/06/10 19:19:21
ActiveDirectory認証を利用するAPIはありますか?

393:デフォルトの名無しさん
07/06/10 19:42:06
会社でJavaの引き継ぎをまかせられてしまった初心者です(35歳)。プログラミング経験はほとんど皆無(商用経験は0、社内研究でperlを少しかじった程度)。
以下のプログラムが存在した場合、「this」はどこを示すのか悩んでいます。

class TestClassB extends TestClassA{
public String doExcute(){ 処理ロジック };
}
class TestClassA{
public abstruct String doExcute();

public ActionForward excute(){
String result = null;
result = this.doExcute();
}


ログを読む限り、TestClassBをインスタンス化して、excute()をcallしているのですが、
TestClassB内には存在しないため、スーパークラスのexcute()をcallしていると読めます。
その後、excute()の中で、「result = this.doExcute();」という記述があるのですが、これは
どのような動きをしているのでしょうか。
その後の動きを見ると、TestClassBのdoExcuteを実行しているようなのですが、
具体的な動きがわらないため質問させていただきます。

①この場合、TestClassAの中でthisと宣言されているが、TestClassBがTestClassAを
 継承しているので、thisはインスタンス化されたTestClassBを示す。それなのでTestClassBのdoExcuteが実行される。

②TestClassAの中でthisと宣言されているため、明示的にインスタンス化されてはいないが
 thisはTestClassAを示すため、自動的にインスタンス化される等して、TestClassA内の
 doExcuteを実行しようとする。しかし、TestClassA内にはabstructでしかdoExcuteが宣言
 されていないので、自動的に実装しているものを探してTestClassBのdoExcuteを実行した。

感覚的には①な気がするのですが、thisはその記載されたクラス自身を示すような気がして
下のような考えと悩んでいます。すいませんが教えてください。

394:デフォルトの名無しさん
07/06/10 19:57:27

TestClassA tca = new TestClassA();
TestClassB tcb = new TestClassB();

ActionForward afa = tca.execute();  ・・・(1)
ActionForward afb = tcb.execute();  ・・・(2)

(1) のとき this は tca
(2) のとき this は tcb


395:デフォルトの名無しさん
07/06/10 20:01:21
>>393

class TestClassB extends TestClassA{
public String doExcute(){ 処理ロジック };
public String doExcute2(){ふが};
}
class TestClassA{
public abstruct String doExcute();
public String doExcute2(){ほげ};

public ActionForward excute(){
String result = null;
this.doExecute2();
result = this.doExcute();
}


これを実行して比べてみたら?


396:デフォルトの名無しさん
07/06/10 20:01:33
>>391
それで何か問題あるの?
>>392
Windows固有の機能だからJavaにはなさそうだ。
>>393
もちろん①が正解。ただそのコードじゃコンパイル通らないはずだよ。TestClassAはきっとabstractなクラスだ。

397:デフォルトの名無しさん
07/06/10 20:05:35
>>391
少しだけOO的に書くのであれば、DBから取得してきたデータをBeanクラスに詰め、Writerで1行ずつ書き出すとベター
DBから取得してきたデータをいきなりCSVの1行にするくらいならば、データ量にもよるけど、SQLで組んじゃう方が楽じゃね?

398:デフォルトの名無しさん
07/06/10 20:34:28
>>387 セキュリティマネージャ差し換えるんだよ。

>>392 ActiveDirectoryというかLDAPなら。

399:デフォルトの名無しさん
07/06/10 20:38:21
>>396
問題はないけど
ちょいとアナログなやり方なので
他に方法があるのなら参考にしたかった

400:デフォルトの名無しさん
07/06/10 21:04:14
>>393
常にTestClassBを示す

401:デフォルトの名無しさん
07/06/10 21:17:10
>>399 == >>391
それを言うなら
アナログ
じゃなくて
アナクロ


402:デフォルトの名無しさん
07/06/10 21:48:39
超初心者失礼します
enumを使おうと思って調べたんですが、よくわかりません
とりあえずJ2SE5.0なので言語レベルで実装されてるとは思うのですが
enum hoge{
oerjao, idos;
};
てな感じじゃだめなんでしょうか、Eclipseだと無理っぽいんですが…

403:デフォルトの名無しさん
07/06/10 22:03:54
>>402
普通に使えるはず。
使えないなら以下をチェック

・eclipseのバージョン
・プロジェクトのプロパティ
  -> Javaコンパイラ
  -> Javaのビルドパス
    -> ライブラリ


404:デフォルトの名無しさん
07/06/10 22:29:46
>>398
System#setSecurityManager()でセキュリティを設定するとスクリプトは安全だけど、
アプリケーション全体に制限が加わってしまってそれ以外のファイルアクセスなんかが
出来なくなっちゃうよね?やっぱりわからん…


405:デフォルトの名無しさん
07/06/10 22:36:18
>>403
よくわからんのですが、コンパイラの準拠レベルとやらを5.0に上げたら通るようになりました
ありがとうございました

406:デフォルトの名無しさん
07/06/11 00:12:16
>>398
その手のスクリプトってパッケージとか持ってないと思うし、
コードベースで動作制限もできないようなきがするから、
SecurityManager でやるにしても、あんまし便利には出来んと思うけど。

407:デフォルトの名無しさん
07/06/11 01:11:43
>>375とかセキュリティマネージャとか言ってる奴は馬鹿だろ。
言語レベルのセキュリティとスクリプトエンジンの実装のセキュリティは別問題。
組み込みエンジンのセキュリティ確保は組み込む人間が全部自分で必要なものを1から実装する。
これは>>375の仕事。

何を何処までどうするか、それをどうやって実現するか全て自分でやる。用意されてるものを使うんじゃなくて自分で用意する。

具体例でいえば"ブラウザは外部の入力は汚染されたものと仮定してセキュリティ制限下で処理してる"
""でくくった部分を>>375が全部やる部分。
実装例だせば、ecma-262ではトップレベルコンテキストは常に一つで一切操作出来ないのが仕様だが、
ブラウザでそれやると文書間でトップレベルコンテキストが共有されてしまうから動作変更して文書毎にトップレベル生成してる。
javaの実装であるrhinoはセキュアであることは実装対象外だから一切配慮されてなくて、
セキュアな実行環境がほしい場合は組み込む者が適切に実装しろとrhinoのドキュメントにご丁寧に書いてある。
これだけ言ってわからんならノウハウ本か他のソース読め。

408:デフォルトの名無しさん
07/06/11 02:09:41
バカ避けのために作られた言語なのに
どうしてバカばっかり集まってくるのはなぜ?


409:デフォルトの名無しさん
07/06/11 03:06:49
それはおまいが一番よく知ってるんだぜ?

410:デフォルトの名無しさん
07/06/11 09:25:56
>>407
sun.org.mozilla.javascript.internal.Context#setClassShutter() で
Javaのクラスを遮断することができることがわかった。
さすがにRhinoがセキュリティについて一切配慮されてないなんてことはなさそう。
sun.org.mozilla.javascript.internal.SecurityController もセキュリティ関連だからもっと調べてみる

411:デフォルトの名無しさん
07/06/11 12:05:20
JDBCドライバを実装するのにオススメのサイトや書籍(できれば日本語)
を教えていただけませんか?

412:デフォルトの名無しさん
07/06/11 12:46:39
>>411
JDBCドライバを実装するの?
JDBCドライバを使用してDBアクセスを試すんじゃなくて。
後者ならば、「JDBCによるJavaデータベースプログラミング」あたり。
やさしいのがいいってならば、どれでもいい気がする。

ドライバの実装は・・・少なくとも初心者質問スレじゃスレ違い



413:デフォルトの名無しさん
07/06/11 13:13:02
>>412
ドライバの使用じゃなくて実装です。
使用法の情報は多くあるのですが実装についてはあまりみないもので。

スレ違いですか…
どこが適切なんだろうか

414:デフォルトの名無しさん
07/06/11 13:34:49
>>410
そこら辺は最近追加された新しいAPIだよ。

sunのrhinoは元とは別モンの劣化品だからただ実行する以上の用途はmozilaのパッケージ使った方が良いぞ。
ドキュメントもすべて揃ってるから組み込みチュートリアルとかもあるし。
(javadocはサンプルjsコードの一部をコピペしただけ。)

悪いことは言ってないぞ?

415:デフォルトの名無しさん
07/06/11 14:29:36
>>413
情報無いよな、そもそも必要に迫られるもんじゃないし。
公開されていソースが一番の情報源では?

スレは作成したいドライバのDBベンダのスレのがいいかも。

416:デフォルトの名無しさん
07/06/11 16:02:29
初歩的で申し訳ないのですが、下のプログラムがコンパイルで通りません。
シンボルを見つけれませんと出るのですが、どういうことなのでしょうか?

//Info.java
public class Info {
  public void Info(){
    int num[][];
    num = new int [10][10];
    System.out.print("test\n");
  }
}

//Main.java
import java.io.*;
public class Main {
  public static void main(String args[]) {
    int i, j;
    Info a = new Info();

    for(i=0; i<10; i++) {
      for(j=0; j<10; j++) {
        System.out.print(a.num[i][j]);
      }
      System.out.println();
    }
  }
}

417:デフォルトの名無しさん
07/06/11 16:07:28
>>416
//Info.java
public class Info {
  public int num[][];

  public void Info(){
    num = new int [10][10];
    System.out.print("test\n");
  }
}


418:デフォルトの名無しさん
07/06/11 16:13:50
>>417
ありがとうございます。しかし、コンパイルは通ったのですが、
System.out.print(a.num[i][j]);
のところでエラーが出てしまいます。どうしてなのでしょうか?

419:デフォルトの名無しさん
07/06/11 16:15:17
というよりも、今気付いたのですが、コンストラクタの中の"test"って文字が表示されてないってことは、
まず、コンストラクタの中に入ってないってことですね。それはエラーも出るはず・・・;;

420:デフォルトの名無しさん
07/06/11 16:18:29
public void Info()はコンストラクタではない。
ただのメソッド。
ヒント:void

421:デフォルトの名無しさん
07/06/11 16:24:11
もし>>417のままにしたいなら Info a = new Info(); a.Info(); でnumを初期化

422:デフォルトの名無しさん
07/06/11 18:05:00
>>420-421
ありがとうございます。voidを除いたら正常に動作しました。
調べてみると、コンストラクタは返り値を持たないので型の宣言は指定したらダメっぽいんですね・・。
勉強になりました。

423:デフォルトの名無しさん
07/06/11 19:35:30
一昨日くらいにJAVAを始めたのですが、いまいちクラスとかメソッドとかの良さが分かりません。
まだあまりプログラミング量が少ないからなのかもしれませんが、オブジェクト指向の利点というものを
活かしきれていないような気がします。どうやってもC言語のような感じでプログラムを書いてしまいます。

そこで相談なのですが、何かこういうプログラムを作ってみるといいよって感じのはないでしょうか?
こういうプログラム作ったら、クラスの凄さがよくわかるとか・・・。

424:デフォルトの名無しさん
07/06/11 19:50:17
>>423
システム設計するようになると良くわかるよ

425:デフォルトの名無しさん
07/06/11 20:02:01
>>424
具体的にはどのようなプログラムを作ればいいのでしょうか?
良く分かるために貪欲に何でも作ろうかと思うのですが。

426:デフォルトの名無しさん
07/06/11 20:12:46
>>425
俺はTECHSCOREのデザインパターンのページ読んだら結構納得できた

427:デフォルトの名無しさん
07/06/11 20:45:57
>>425
ステップ数で300くらいの処理を3-4程度のクラスに分割してみる。
自分の経験からだと、CSVの読み書きクラスとかほど良いボリューム

428:デフォルトの名無しさん
07/06/11 20:49:30
よくわからないので質問させてください。
class Example1{
public static void main(String args[]){
for(int i = 0; i < 10000; i++)
System.out.println("teswt");
}
}
というプログラムをjarにまとめてダブルクリックで実行できるようにしました。
ところがダブルクリックしても出力されません
タスクマネージャーでプロセスを見ると一瞬javaw.exeが出るので実行はされていると思うのですが、
コマンドプロンプトが自動で起動されたりはしないのでしょうか?
もし自動で起動させる方法があるのなら教えてください。

429:デフォルトの名無しさん
07/06/11 21:06:22
>>428
それは実行されて、プログラムも終了しただけかと。
CUIならコマンドプロンプトから実行したら?

430:デフォルトの名無しさん
07/06/11 21:10:30
>>429
やはりコマンドプロンプトから実行するしかありませんか。
実はIRC用のBOTを作っていて友人に配布することになりダブルクリックだけで実行できたほうが便利かなと思ったのです。
がんばってGUIをつけることにします。

質問に答えていただきありがとうございました。

431:デフォルトの名無しさん
07/06/11 22:26:29
class Example1{
public static void main(String args[]){
for(int i = 0; i < 10000; i++)
System.out.println("teswt");
}
Thread.sleep( 10000 );
}

432:デフォルトの名無しさん
07/06/11 23:18:29
1.4でThreadを安全に停止するメソッドってありますか?
stopは推奨されないみたいなので。

433:デフォルトの名無しさん
07/06/11 23:22:33
>>432
強制?
無限ループのThreadを終了?

434:デフォルトの名無しさん
07/06/11 23:24:28
>>433
強制です。
ロック最中でもロック開放してThreadを停止したいんです。

435:デフォルトの名無しさん
07/06/11 23:31:17
>>434
どうしてstopが非推奨になっているかを考えれば代替手段もないことに気づくと思うんだが・・・

436:デフォルトの名無しさん
07/06/11 23:47:34
Java アプレットの話です。どうして表示結果があんなにキタナイの。
図形の座標の計算が変だと思う、円周をどうやって表現するの?
そこで間違っているから、Java は隙区内。

こんなにキレイな円と多角形の重なりも簡単、とかいうなら、
ひとつ アプレット の例を作って見せてね。

437:デフォルトの名無しさん
07/06/11 23:49:58
URLConnection時のクッキー書き込みについて教えて頂きたいです。

Webページにクッキーを固定で書くだけのテスト用ページを作成しました。
URLリンク(*****)
 <?php setcookie("test","123",time()+60*60*24); ?>

このテスト用ページに
URLConnectionまたはHttpURLConnectionで
アクセスするとクッキーが書き込まれないのですが
java(URLConnection)では、クッキーは書かれないのでしょうか?
それとも何かクッキーを許可するような設定値があるのでしょうか?

ブラウザのURL欄に上記テスト用ページを直打ちすると
正常に書かれるのでテスト用ページの処理は問題無いと思うのですが。。

アドバイス頂きたいです。よろしくお願いします。

438:デフォルトの名無しさん
07/06/12 00:21:43
こんなのどうだろ。開発時間13分

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.Random;
import javax.swing.JFrame;
public class Circle {
public static void main(String[] args){
JFrame frame = new JFrame(){
@Override public void paint(Graphics g){
g.clearRect(0, 0, getWidth(), getHeight());
((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Random r = new Random();
for(int i = 0; i < 20; i++){
Color c = Color.getHSBColor(r.nextFloat(), 1, 1);
g.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 100));
int s = 50 + r.nextInt(150);
g.fillOval(r.nextInt(getWidth() - s), r.nextInt(getHeight() - s), s, s);
}
}
};
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}


439:デフォルトの名無しさん
07/06/12 00:23:19
あっ、438は436向けね。

440:デフォルトの名無しさん
07/06/12 00:29:19
そうか、「アプレットの例」か。さらに簡単になるな。たびたびすまん
import java.applet.Applet;
import java.awt.*;
import java.util.Random;
public class CircleApplet extends Applet{
@Override public void paint(Graphics g){
g.clearRect(0, 0, getWidth(), getHeight());
((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Random r = new Random();
for(int i = 0; i < 20; i++){
Color c = Color.getHSBColor(r.nextFloat(), 1, 1);
g.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 100));
int s = 50 + r.nextInt(150);
g.fillOval(r.nextInt(getWidth() - s), r.nextInt(getHeight() - s), s, s);
}
}
}


441:デフォルトの名無しさん
07/06/12 00:32:46
ていうかjava2dの描画精度のことなら6ですでに改善されてるだろうが。
わざわざ釣られる必要はないよ。

442:デフォルトの名無しさん
07/06/12 00:40:13
所詮、ドット絵なんだからアンチエイリアスしないとキレイな曲線にはならないでしょ

443:デフォルトの名無しさん
07/06/12 02:40:21
C言語で
typedef struct _header {
unsigned char opcode;
unsigned long oprand;
} header;

memcpy(&header, src_ptr, sizeof(header))

unsigned char 1byteリトルエンディアン
unsigned long 4byte リトルエンディアン

みたいな感じでバイナリファイルのヘッダ解析とか
したりしますよね?

これってJavaでどうやって書けばいいんですか?
教えてください。

444:デフォルトの名無しさん
07/06/12 03:10:23
java.ioやNIOつかってストリーム指向で。
MP3やoggのデコーダのソースは参考にならないかい?

445:デフォルトの名無しさん
07/06/12 09:06:45
ど忘れした。
読み込み中等で表示されるGUI部品で青い部分が伸びていくやつ何て名前だっけ?
シーケンスじゃなくて・・・あぁ・・・思い出せない。

446:デフォルトの名無しさん
07/06/12 09:07:38
>>445
プログレス

447:デフォルトの名無しさん
07/06/12 09:10:12
>>446
早っ!ありがとう。

448:デフォルトの名無しさん
07/06/12 16:09:05
よい解決方法があれば、教えて下さい。

FTPClientで日本語ファイルを転送しようとしたところ、
ファイル名が文字化けしてしまいました。
日本語ファイルは対応していないのでしょうか?
ちなみに転送元、転送先ともにSJISです。


449:デフォルトの名無しさん
07/06/12 16:17:43
GUIでプログラムを作ろうと思ったら何を勉強したらいいのでしょうか…

450:デフォルトの名無しさん
07/06/12 16:25:32
>>448
FTPClient?それはどこのパッケージ?

>>449
awt、swing、(swt)

451:デフォルトの名無しさん
07/06/12 16:42:02
>>450
素早い解答ありがとうございますw
これから勉強してみます。

452:デフォルトの名無しさん
07/06/12 17:13:43
>>448
sunのjdk6にはそんなもん存在せんからエスパーだがリーダー見直せ。
それかnio使って自分で縁コード汁!

453:デフォルトの名無しさん
07/06/12 18:24:09
>>450,452
org.apache.commons.net です。
commons-net-1.4.1.jarを使ってます。

なるべく労力を少なくしたかったのですが、
ダメっぽいですね。

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


454:デフォルトの名無しさん
07/06/12 19:14:24
失礼します
Labelの仕様について質問なんですが、setforegroundで文字の色は変わるんですが
setbackgroundで背景の色が変わりません
ボタンの場合foreback両方問題なく色を変えられます
Labelっていうのは四角い領域だと理解してたんですが、間違ってますか?
なぜsetbackgroundで色が変わらないんでしょうか?

455:デフォルトの名無しさん
07/06/12 19:52:33
変わるよー
ラベルのサイズが小さいんじゃない?

456:デフォルトの名無しさん
07/06/12 20:04:17
opaque

457:デフォルトの名無しさん
07/06/12 20:07:35
>>455
変わりますか…
サイズはsetboundsで40*40確保してるので問題ないと思うんですが…

458:デフォルトの名無しさん
07/06/12 20:08:16
間違えた、60*40でした。関係ありませんが一応

459:デフォルトの名無しさん
07/06/12 20:16:42
>>454
バリデートツリーは?

460:デフォルトの名無しさん
07/06/12 20:37:54
>>459
やってみましたがダメでした
もちろんForegroundでは色が変わります

461:デフォルトの名無しさん
07/06/12 20:40:52
>>460
>>456

462:デフォルトの名無しさん
07/06/12 21:04:58
JDKダウンロードしましたが、どうしていいやら・・・。

URLリンク(www.ssl-on.net)
このサンプルオーダーフォームを改造してCDを売りたいんですが
なにからはじめれば良いでしょうか??
タグ内にJAVAって書いてあったのでJAVA使ってるんですよね?

よろしくお願いします。

463:デフォルトの名無しさん
07/06/12 21:07:01
>>462
本の1冊でも読んでこい

464:デフォルトの名無しさん
07/06/12 21:09:49
>>463
そこをなんとか・・・・
友達から頼まれて・・・俺もまったくわからないのに・・。
今日中に仕上げてしまいたいんですー><

465:デフォルトの名無しさん
07/06/12 21:10:15
>>462
ゆとり教育キタ━━━(゚∀゚)━━━ !!

466:デフォルトの名無しさん
07/06/12 21:10:48
>>464
わからんものを引き受けるな。

467:デフォルトの名無しさん
07/06/12 21:21:41
まぁ、2ちゃんで聞けば出来るだろうと思って引き受けちゃいました。。。
お願いしますー!

468:デフォルトの名無しさん
07/06/12 21:24:05
CGIっすかね?^^;

469:デフォルトの名無しさん
07/06/12 21:29:50
>>461
色指定するとき透明度の設定ちゃんとしろってことでしょうか?
今透明度0でやってみましたが無理でした

470:デフォルトの名無しさん
07/06/12 21:31:32
>>467
2ちゃんで宣伝した方がCD売れるかもよ

471:デフォルトの名無しさん
07/06/12 21:42:57
>>469
>>456

472:デフォルトの名無しさん
07/06/12 21:45:16
>>471
透明度のところopaqueにしても無理でした

473:デフォルトの名無しさん
07/06/12 21:56:34
>>462
Adobe PageMillか・・・
懐かしいな

474:デフォルトの名無しさん
07/06/12 22:21:55
今度学校でjavaやるんだけどリナックスでしなきゃいけないんだけど窓
となんか違うとこあるの?めんどくさい?一応Cなら少しやってて窓使ってます

475:デフォルトの名無しさん
07/06/12 22:32:20
>>472
ヒント:メソッド

476:デフォルトの名無しさん
07/06/12 22:56:20
>>475
すみません、よくわかりません…

477:デフォルトの名無しさん
07/06/12 23:00:21
>>474
日本語とは違うようだね

478:デフォルトの名無しさん
07/06/12 23:34:59
>>454
問題なく変えれる。ソースを全部晒せとは言わない。必要十分に晒せ。
Label l = new Label("ABC");
l.setForeground(Color.green);
l.setBackground(Color.red);
Frame f = new Frame();
f.add(l);
f.pack();
f.setVisible(true);

479:デフォルトの名無しさん
07/06/12 23:41:58
>>476
俺どんだけ親切なんだか・・・
つ setOpaque(boolean)

480:デフォルトの名無しさん
07/06/12 23:59:24
>>479
できました…
懇切丁寧にありがとうございました

481:デフォルトの名無しさん
07/06/13 00:03:32
ProcessBuilderでlhacaの起動でフリーズすると質問したものです。
やはりlhacaの問題でした。
lhasaに入れ替えてプログラムを実行したところ、正常に終了しました!
wgetの動きも怪しかったのですが、バックグラウンドで動作するオプションを入れたところ
問題なく動作するようになりました。

これで漏れの壮大なアプリ作成の一歩が始まった感じです。
いろいろ答えてくれた皆様、ありがとうございました!

482:デフォルトの名無しさん
07/06/13 09:27:11
log4j とかを使って syslogd に出力すると
ログの方に <139> とか <142> という数字が出てくるのですが
ERR とか INFO とかに対応しているようなのですが
番号との関係一覧見たいなものを探しても見つかりません
どこかにありますか?

483:デフォルトの名無しさん
07/06/13 10:40:34
すみません、基礎的なことでわからないことがあります
swingを使うときmainのあるクラス?をJFrameのサブクラスにするみたいなんですが
理由はなんでしょうか?
初心者は黙ってJFrame継承しとけっていうならそうします。

484:デフォルトの名無しさん
07/06/13 10:43:48
俺はそうしない。

485:デフォルトの名無しさん
07/06/13 11:04:03
>>483
mainのあるクラスはプログラムの実行開始場所。
そのクラスがJFrameのサブクラスである必要は無いし、しない方がいいと思う。
JFrameのサブクラスでアプリケーション作成したならば、それを実行するだけのクラスを作る方がいいと思う。

JFrameを継承するのか、継承しないでnewしてシコシコとコンポーネントを追加していくのもあり。
ただし、その初期化処理は誰がやるんだね?
JFrameにコンポーネント追加したり、基本設定を行わせるクラスを作成するのも手だけど、無理に切り離す必要はないと思う。
だから、よくあるコーディング方法としては、コンストラクタまたはコンストラクタから初期化メソッドを呼び出して設定を行う。

486:デフォルトの名無しさん
07/06/13 12:13:13
>>485
ありがとうございます
別に継承が必須ってわけではないんですね

487:デフォルトの名無しさん
07/06/13 14:25:05
JFrameのインスタンス.show();このメソッド推奨されてませんが、
代わりになるメソッドとか有るんですか?

488:デフォルトの名無しさん
07/06/13 15:05:03
setVisible

489:デフォルトの名無しさん
07/06/13 15:10:37
setVisible

490:デフォルトの名無しさん
07/06/13 15:15:35
>>487
APIのリファレンスを読む習慣をつけておいた方がいいと思う。
非推奨メソッドについて替わりになるものがあれば大抵書かれてある。

491:デフォルトの名無しさん
07/06/13 16:33:41
>488-500 情報thx

492:デフォルトの名無しさん
07/06/13 17:30:12
>>491
(ノ´∀`*)どういたしまして

だけじゃ感謝されただけなので・・・
URLリンク(java.sun.com)
プログラム中は、ブラウザのタブにこのページは必ず開いている
これ必須

493:デフォルトの名無しさん
07/06/13 17:32:44
ダウンロードして使えよ

494:デフォルトの名無しさん
07/06/13 17:40:57
>>492
いつも思うんだけど
なんでサンプルプログラムも一緒に載ってないのかなぁ

================================
メソッドの詳細

actionPerformed
void actionPerformed(ActionEvent e)
アクションが発生すると呼び出されます。
================================

これじゃ何も分からんよ。

確かにその通りだし、知ってれば使えるんだけどさ。

495:デフォルトの名無しさん
07/06/13 17:43:54

それでさぁ、そこには

================================
URLリンク(java.sun.com)

さらに詳しい API リファレンスおよび開発者ドキュメントについては、
[Java SE 開発者用ドキュメント]
を参照してください。
開発者向けの詳細な解説、概念の概要、用語の定義、
バグの回避策、およびコード実例が含まれています。
================================

って続くんだけど、

[Java SE 開発者用ドキュメント]

のリンク先クリックしても

Page Not Found

笑うしかないよね


496:デフォルトの名無しさん
07/06/13 18:46:01
>>495
ちゃんとあるようだが?
日本語に訳されていなければ原典をあたるくらいの応用力がないと生きていけないぞ。
URLリンク(java.sun.com)

497:デフォルトの名無しさん
07/06/13 19:37:38
javaアプリケーションがダイアログを表示した場合に、
それを検知し閉じる処理をする別のjavaアプリケーションを作りたいのですが
どういうクラスを使いコードを書けば良いのか分かりません。

キーワード、アプローチの仕方を教えてください。

498:デフォルトの名無しさん
07/06/13 20:26:14
>>497
別のアプリだと、多分ネイティブの機能が必要でしょうね。
JavaアプリでJNI使うとかで書くと大変だから、ネイティブだけで
作った方がいいような気がします。

で、その実装はやはりOS/ウィンドウマネージャなどによりますね・・・
Javaプロセス間通信みたいな話ってどうなってるんでしたっけ?

499:デフォルトの名無しさん
07/06/13 20:37:14
両方自分が作ったものならRMIとかで

500:デフォルトの名無しさん
07/06/13 21:11:44
ウィンドウアプリケーションってのを作ろうとしていて、
とりあえずは足し算アプリを作りました。
そして、ウィンドウに表示するところまでは漕ぎつけたのですが、
ここからが分かりません。

今、僕はクラスファイルをコマンドプロンプトで実行させているんですが、
これをダブルクリックで実行できるようにするには、どうすればいいのでしょうか?

501:デフォルトの名無しさん
07/06/13 21:13:28
MANIFESTと一緒にjarにする

502:デフォルトの名無しさん
07/06/13 21:33:30
URLリンク(www.ytp.ne.jp)

503:デフォルトの名無しさん
07/06/13 21:46:39
drawLineの線をPixelGrabberで取得した色をつけたいのですが、
setColorはどのようしたらいいでしょう?

504:デフォルトの名無しさん
07/06/13 23:01:21
すいません、今プログラマになろうとしたら
言語はJavaを勉強するのが一番なんですかね?。
唐突な質問ですいません。

505:デフォルトの名無しさん
07/06/13 23:07:31
>>504
その通りです
でも、プログラマにはならない方がいいです

506:デフォルトの名無しさん
07/06/13 23:17:05
なんでですか?

507:デフォルトの名無しさん
07/06/13 23:21:58
その辺り自分で解決する能力がプログラマには必要だということ。
まずは、板違いという問題を解決するところから始めよう。
つ URLリンク(pc11.2ch.net)

508:デフォルトの名無しさん
07/06/13 23:33:45
>>507
ごめんなさい。そしてありがとうございました。

509:デフォルトの名無しさん
07/06/13 23:34:49
>>504
各言語にはメリットデメリットがある
何が一番かは何を作りたいかによる

510:デフォルトの名無しさん
07/06/13 23:35:05
>>506
板違い承知で一言だけ。
趣味でやっているうちが華。


511:デフォルトの名無しさん
07/06/14 01:22:05
>>506
これ嫁
URLリンク(naruniha.tank.jp)

512:デフォルトの名無しさん
07/06/14 05:15:08
こういうのが欲しいんですけど作ってくださいっていうのはダメですか?
フリーのソフトを探してもないみたいで

513:デフォルトの名無しさん
07/06/14 06:06:56
JRE のほかのバージョン (旧バージョンと新バージョン) と関連マニュアルは
どこで入手できますか?
URLリンク(www.java.com)

514:デフォルトの名無しさん
07/06/14 06:09:01
>>511
お前、親切だな

515:デフォルトの名無しさん
07/06/14 06:12:49
ok

516:512
07/06/14 07:39:00
色に関したソフトで色を足して教えてくれるものはあるみたいですが
欲しい色があって自分の持ってる絵の具で何を足したらいいのか教えてくれるものがほしい

例えば
朱色+?=赤

朱色:持ってる絵の具
赤色:欲しい色
?色:朱に足す絵の具

マンセルカラーという分布図を見ればなんとなく見当はつく気がするんですが問題は
持ってる絵の具はたかだか12色とかぐらいだからそれでわかんなくなっちゃう
ちなみに実際の絵の具はマンセルの表からつくられているらしくて
絵の具の番号はそれによって付けられてるらしいです

517:デフォルトの名無しさん
07/06/14 08:13:21
>>516
RGB での合成?
絵の具の割合とかって話になると感覚的な分野になるから難しいような気がする。

518:512
07/06/14 08:50:56
絵心のあるひとはそれが感覚的に分かるらしいんですが、
URLリンク(ja.wikipedia.org)
すいません。それ以上のことはちょっとわかりません

519:デフォルトの名無しさん
07/06/14 09:37:47
質問失礼します。

今Javaでゲームを作っているのですが、
著作権を考えて画像や音声などのファイルを暗号化(圧縮?)したいと思っています。
配布されているゲームは、複数のファイルを一つにまとめてるのが大半ですが、
JavaでそれらのファイルをJarに含めずに、同じような事をするにはどうすればいいのでしょうか?
参考になるサイトでもかまいませんので、教えていただけると嬉しいです。

520:デフォルトの名無しさん
07/06/14 10:40:38
>>519
自分でフォーマットを考えオリジナルのフォーマットで一つにまとめる。

例えばZipStreamとCipherを組み合わせたり
単純にByte配列を合体させてプログラム内部で分割するバイト数を記述とか

プログラムのdecompileにも注意

521:デフォルトの名無しさん
07/06/14 12:04:41
>>516
こっちに行ってみたらどうだ

◆こんなソフトウェアつくってください!~Part9~◆
スレリンク(software板)

522:497
07/06/14 13:30:59
>>498,499
レスありがとうございます。
他人が作った(ソースの無い)ものなので、RMIの実装は難しいです。

ということはネイティブなプログラムを書く事になりますが、
C言語には暗いので、なにか代替の方法があれば教えてください。
OSはWindows XPです。

523:デフォルトの名無しさん
07/06/14 15:57:08
>>522
別にCでなくても得意の言語を使っても構わんよ
WindowsならDLLを作れればいいんだから

524:516
07/06/14 16:44:00
>>521
了解しました
マンセルカラーを調べてみましたが青が青に見えない色が使われているとか問題があるみたいです
確かに単純ではないのかもしれません
色の足し算が出来るなら引き算も出来るのかと思ったんですがそうではないのかも
一応聞いてみます。ありがとうございました


525:デフォルトの名無しさん
07/06/14 18:12:11
卒研でタイピングゲームを作成することになったんですが、
GUIなどについてのオススメの参考書などありましたら教えてください。
サーブレットでの作成を考えています。よろしくお願いします。

526:デフォルトの名無しさん
07/06/14 18:29:47
>>525
ゴメン。どうしたいのか分からないw

GUIって言ってるけどAjax?だったら、スレ違い。

GUIとサーブレットという単語に関連がなくてサーブレットを
使ってサーバで記録を付けるという話ならまぁ分からんでも無いが・・・
・・・卒業に一抹の不安がありますwww

GUIは、JDKについてくるSwingSetを見たら基本的なコンポネントが分かるかな。
それに、イベントモデルとかをWebのページで勉強すればOK。
キーワードは、"AWT イベントモデル" あたりで。

527:デフォルトの名無しさん
07/06/14 19:30:46
>>526
ありがとうございます。
いまいちjava自体も分かってないんでこれから勉強します。

528:デフォルトの名無しさん
07/06/15 15:13:04
Java プログラムで jar ファイルを作成することはできるでしょうか?
読み取りなら JarFile クラスでできそうですが。。。

529:528
07/06/15 15:16:29
JarOutputStream ですね。

530:デフォルトの名無しさん
07/06/15 16:59:21
PNG画像データが InputStream に入っているときに、
BufferedImage を構築するには、どうしたらよいでしょうか?

531:デフォルトの名無しさん
07/06/15 17:07:26
>>530
javax.imageio.ImageIO#read(InputStream)

532:497
07/06/15 17:31:43
>>523
そうですか~
別の言語のスレで質問してみます。
ありがとうございました。

533:デフォルトの名無しさん
07/06/15 19:23:50
C言語でいう、
int v[10];
int* v2 = &int[5];
を、Javaでやりたいんですが、どうやったらいいですか?
int[] v = new int[10];
int[] v2 = &int[5]; <---ここください。



534:デフォルトの名無しさん
07/06/15 19:24:32
↑めちゃ間違い。訂正すまん。
int v[10];
int* v2 = &v[5];
を、Javaでやりたいんですが、どうやったらいいですか?
int[] v = new int[10];
int[] v2 = &v[5]; <---ここください。


535:デフォルトの名無しさん
07/06/15 20:05:48
>>534
無理

536:デフォルトの名無しさん
07/06/15 20:23:52
そういう使い方するなら Integer[] でいいだろ

537:デフォルトの名無しさん
07/06/15 22:29:20
>>536
それ言うなら Integer[] じゃなくて

List<Integer> と List#sublist じゃなかろーか

538:デフォルトの名無しさん
07/06/15 23:31:58
以下で定義されるブロック構造を導入する事で何が可能になり、それはプログラム開発において何に寄与するか?
A block is a sequence of statements, local class declarations and local variable declaration statements within braces.

Statement :: Block | .....
Block ::= { BlockStatementsopt }
BlockStatements ::= BlockStatement | BlockStatements BlockStatement
BlockStatement ::= LocalVariableDeclarationStatement | ClassDeclaration | Statement

539:デフォルトの名無しさん
07/06/16 00:02:17
ぬるぽ ぬるぽ ぬるぽ ・・・

540:デフォルトの名無しさん
07/06/16 00:36:24
>>539
ガッ ガッ ガッ ・・・

541:534
07/06/16 01:33:19
>>535-537
どもです。
実際には、Vector3[] v でつかっているですが、要素ごとにVector3をnewする
のが痛いので、値型であるfloatの配列で new float[length*3]で領域を確保して、
たとえば v[index*3].add( v[index2*3] )とかやりたいんです。
listはきつです。ランダムアクセスするんで。


542:デフォルトの名無しさん
07/06/16 01:36:18
JavaMailについて教えてください。
携帯のメールに text/htmlタイプで送信したのですが、
受信側ではtext/plainとなってしまい、リンクにアンカーが付かなくて困ってます。
しかし、本文の最後にYahooから勝手に付いてくるフッターのようなものがあるのですが
それにはアンカーが付いてます。 text/plainでもアンカーを付けることができるのでしょうか?
アンカーが付けたいだけなので、text/plainでもよいのならそうしたいのですが・・

543:デフォルトの名無しさん
07/06/16 01:39:11
>>538
BNF表記で言語の構造を定義することで何が可能になり何に寄与するか?
って、逆に言うと、言語の構造を定義しないでどうやってプログラムできますか?


544:デフォルトの名無しさん
07/06/16 02:32:29
>>543
じゃなくて、>>538 の表記を説明しろってことでは?

545:デフォルトの名無しさん
07/06/16 02:57:09
>>541
javaのリストはただの動的配列だぞ。歴史的にはベクタの非同期版。
ランダムアクセスマーカーがついてるから一定時間以内のランダムアクセスを保証する。
マーカー付きでシーケンシャル・ランダム両アクセスが可能な場合
一般的にはアルゴリズムが切り変わってるから
541が想像してるのとは別物。
ArrayList使え、つーかjavadoc読め。

546:デフォルトの名無しさん
07/06/16 07:54:31
IBMのPCにバンドルされているRuntimeと
SunのRuntimeって何か違うの?


547:デフォルトの名無しさん
07/06/16 08:15:19
ランダムならHashedArrayMap

548:542
07/06/16 10:57:05
自己解決しました^^;
ローカルアドレス URLリンク(xxx.xxx.xxx.xxxx:8080) だと携帯のメーラーがアンカー付けてくれなかったみたいです。
http://ドメイン/ にしたらアンカー付けてくれました。

549:548
07/06/16 10:58:02
すみません、投稿にアンカー付いちゃったm(_ _)m

550:デフォルトの名無しさん
07/06/16 14:32:28
URLリンク(mail2.nara-edu.ac.jp)
このページを参考にTOMCAT使おうとしてるんだけど
jspは動かせるけどclassから動かない・・・。
invokerのコメントアウトも削ってるのに404になる。
誰かエロい人教えてください。

551:デフォルトの名無しさん
07/06/16 14:49:00
サーブレット名の前に/servlet/をつけてないんじゃないの

552:550
07/06/16 14:53:06
サーブレット名って例のHelloWorldなら
URLリンク(localhost:8080)じゃダメってことですか?
教えてくんでごめんなさい。


553:デフォルトの名無しさん
07/06/16 15:01:03
WEB-INF/classesにHelloWorld.classはあるのか?

554:デフォルトの名無しさん
07/06/16 15:04:37
web.xml の設定がまずいんだろう。私もはまったことがある。
URL のマッピングがうまくいっていないんだろう。

555:デフォルトの名無しさん
07/06/16 15:47:44
import java.util.Scanner;

と書くと、「シンボルが解決できません」と出てエラーになってしまいます。
J2SEのバージョンは1.5なので、Scnanerが実装されていないはずはないのですが・・・。
何故だか分かる方いますか?


556:デフォルトの名無しさん
07/06/16 16:16:39
Scnaner→Scanner

557:デフォルトの名無しさん
07/06/16 16:29:12
>>556
すいません、そこはただのタイプミスです(^-^;

558:デフォルトの名無しさん
07/06/16 17:02:45
>>555
・javacのパスが1.5を指してない
・eclipseのビルドが1.5に設定されてない

559:デフォルトの名無しさん
07/06/16 17:34:32
>>558
その通りでした・・・1.4.12のままでした。
助かりました、ありがとうございます。

560:デフォルトの名無しさん
07/06/16 20:25:41
)553
置いてます。
>554
マッピングですか…。
xmlはよくわからないんですけど調べてみます。


561:デフォルトの名無しさん
07/06/16 21:52:57
jarのアプリから同階層のファイルのパスが取得できずに困っています。

apl
│ readme.txt

└─work.jar
test.class
このようなJarアプリの構成の場合、readme.txtはwork.jarと同じ階層なので
./readme.txtと指定すれば良いと思ったのですが、読みにいけません。
test.classから見た場合を考え
../../readme.txtとしましたが、やはり読みにいけません。

System.getProperty("user.dir")を使用すればよいだけなのですが
なぜファイルが見つけられないのか困っています。

どなたか教えてください。

562:デフォルトの名無しさん
07/06/16 22:19:15
"readme.txt"

563:デフォルトの名無しさん
07/06/16 23:37:16
>>561
設定次第だけど、多分ソレは見えない。
アプリから読みたい場合、jarを自分で作っているならば、jarのルート(デフォルトパッケージ)の所にreadme.txtを置いてjarにする。

Webから読みたいならば、readme.txtをjspとか置いてある公開されているディレクトリに配置しなきゃダメ。


564:デフォルトの名無しさん
07/06/16 23:37:25
文字セットをMS932に指定して出力をしたいのですが、やり方がいまいちわかりません。
少しは考えて以下のソースになったのですが、ダメです。
もっと複雑な手順が必要でしょうか?

while (true) {
int c = stream.read();
if (c == -1) {
stream.close();
break;
}

byte b =(byte)c;
String s = String(b,"MS932");
System.out.print(s);
}

565:デフォルトの名無しさん
07/06/17 00:15:40
>>564
バイトで読み込んで文字コードを変換したいってこと?
File file = new File("text.txt");
FileInputStream input = new FileInputStream(file);
byte[] bytes = new byte[file.length];
input.read(bytes);
String string = new String(bytes);

コンパイラは通してないけど、こんな感じ。
文字コードはデフォルトでないならば、Stringのコンストラクタを調べて変換かけてくれ。

566:デフォルトの名無しさん
07/06/17 00:16:07
Javaランタイムについて質問なんですが、"J2SE Runtime Environment 5.0 Updata 6"みたいなのはプログラムの追加と削除から消していいんでしょうか。

567:デフォルトの名無しさん
07/06/17 00:18:22
>>566
オタクの環境で必要かどうかなんて、知らんがな。
他にどんなソフト入っているかとかによるから答えようがない。

568:デフォルトの名無しさん
07/06/17 00:34:10
なんかテキストファイルを隔行で読み込んでしまうんだが、なぜ?
Arraylistに歯抜けになって格納される・・・

public ArrayList readfile(String path){
ArrayList<String> list = new ArrayList<String>();
try{
BufferedReader br = new BufferedReader(new FileReader(path));
while (br.readLine() != null){
list.add(br.readLine());
}
}catch(IOException e){
e.printStackTrace();
}
return list;
}


569:デフォルトの名無しさん
07/06/17 00:37:14
>>568
while (true){
String line = br.readLine();
if(line == null) break;
list.add(line);
}
 

570:568
07/06/17 00:38:59
index指定していなかったorz

571:デフォルトの名無しさん
07/06/17 00:50:24
Javaのjava.net.URLを使用して、Webサイトの情報を集めるプログラムを
作成したのですが、WindowsとLinuxで速度が異様に異なります。

プログラムはこんな感じのものです。
※関連ありそうな部分だけ抜き出しています
while(継続条件){
URL stockURL = new URL("http://アドレス");
in = new BufferedReader(new InputStreamReader(stockURL.openStream(),"EUC_JP"));
while ((line = in.readLine()) != null) {
//処理
}
in.close();
}

このようなイメージのプログラムをスレッドで100個同時起動しているのですが、
Windowsだと2時間くらいで終わる処理がLinuxで実行すると1時間で5%くらいしか
完了していませんでした。

Linuxのシステムモニタを見ると、通信がある程度行われると全く行われない
状態が数分続き、その後にまた通信しているようなイメージに見えました。
※通信していない間はCPU使用率も落ちる。

Linuxのシステムモニタとログを出力した際にURLオブジェクト生成のあたりで
止まっていたりするので、通信系だと思うのですが何か原因がわかる方いましたら
ご教示願えませんでしょうか。

プログラムよりもLinuxの設定なのかもしれませんが・・・。
よろしくお願いします

572:デフォルトの名無しさん
07/06/17 00:58:18
>>571
Linuxはあまり詳しくないけど、どのLinuxを使っているかは書くべきじゃないか?

テストコードとして単純なソケットをつないで見るのはいかがだろうか?
String[] address = 略
while(int i = 0; i < 100; i++){
Thread thread = new Thread() {
public void run() {
Socket socket = new Socket(address[i], 80);
System.out.println("Connect!");
Thread.sleep(1000);
socket.close();
}
};
thread.start();
}
1秒置きにしかConnectできないとなれば、ソケット通信自体に制限がかかっているとしか考えにくいかな。



573:568
07/06/17 01:17:44
>>569
解決しました!
ありがとう。

でも同じような処理なのになんでだろ・・・

574:デフォルトの名無しさん
07/06/17 01:22:38
>>568
ヒント: br.readLine() の呼び出し回数

575:デフォルトの名無しさん
07/06/17 02:32:02
TOMCATとMysqlを連動させようとしてます。
ちゃんと\libにもmysql-connector置いて環境変数も通ってるはずなんだけど、
Error at SQL connectionになります。
プログラム自体は間違ってないはずなんだけど、かれこれ数時間格闘してます。
TOMCATも他の簡単なものでは動いてます。
わかる方いたら教えてください。


576:デフォルトの名無しさん
07/06/17 08:35:02
>>575
設定が間違っているだけだろう。
Tomcat、MySQL、OSなどの各バージョン、それからTomcatとMySQLは同じマシンなのか違うマシンなのか・・・など
まず、全ての環境を書け、アホ

1. 単純なJDBCの接続はできるか?
2. Tomcatの管理コンソールからは?

577:デフォルトの名無しさん
07/06/17 10:44:43
Javaでドロップレット(アイコンにファイルをドラッグ&ドロップして作業させる)を作ることはできますか?
もし参考になるサイトをご存知でしたら教えていただけませんか?
よろしくお願いします。

578:デフォルトの名無しさん
07/06/17 11:44:58
先週からservletによる課題作成を始めたのですが、
public void doGet(HttpServletRequest req, HttpServletResponse res)~
といったメソッドを使い、JSPへ変数の値を受け渡すことは出来たのですが、
画面遷移時にreqとresの値を初期化していない、という指摘を受けました。

ServletConfigなどを調べ、初期処理メソッドを作り、super.init(conf);
といった感じで書いてみたのですが、System.out.printlnで調べてみると、
reqもresも全く初期化されていませんでした。
req == null; のようにするとエラーが起きてしまいますし、
どうすれば初期化出来るのか、どのメソッドが正解なのか分かっていません。

何かしらヒントを頂ければと思います。宜しく御願いします。

579:575
07/06/17 11:45:11
>576
すいません。

環境は
OS XP HOME
TOMCAT5.0.28
Mysql4.1
j2sdk1.5.0_02
mysql connector/J 3.1.7
でTOMCATもMysqlも同じマシンです。

単純な接続もできず、
コンソールのユーザーデータソースは1つもない状態です。
web.xmlの設定や、server.xmlの設定が調べていてもよくわかりません。
多分Mysqlのパスがうまくいってないんだろうとは思うけど…。

580:デフォルトの名無しさん
07/06/17 11:52:44
>>579
どういう例外が発生したのか、手を抜かずに書こう。
スタックトレースは長いが全文書くくらいのつもりで。

JDBCデータソースを使ってるとしたら、
Tomcatは4.x系と5.0系と5.5系で設定方法が違うので、気をつけて。5.0系はこれを参照
URLリンク(tomcat.apache.org)
使ってないとしたら、JDBCドライバの置き場所かURLの間違いだろう。

どっちにしろ、スタックトレースがないので判断のしようがない。

581:デフォルトの名無しさん
07/06/17 13:04:18
>>577
start "" "対象jarのパス" %1
というバッチファイルを書いてそれに対してエクスプローラからファイルをドロップすれば
mainのargs[0]でファイルパスが取得できるよ
もっといい方法もありそうな気はするけど

582:デフォルトの名無しさん
07/06/17 16:07:17
Java で Windows の service は作れますか?
コントロールパネルのサービスから起動・停止コントロール出来ますか?

583:デフォルトの名無しさん
07/06/17 16:12:12
できたらすごいよね

584:デフォルトの名無しさん
07/06/17 17:06:12
デーモンというかクライアントに機能をサービスするだけなら出来る。
いわゆるサービスにするためにはサービスマネージメントAPIを実装
する必要があるからJNIでも使うしかないんじゃないかな。
汎用的なサービス化ツールも無い訳じゃないけどね。


585:デフォルトの名無しさん
07/06/17 17:27:43
それなら初めからCで書けば良いじゃないか


586:デフォルトの名無しさん
07/06/17 18:23:11
回答いただいたみなさんありがとうございます
質問の仕方が悪かったので仕方ないのですが
もう Java で単独で動くところまで出来上がってて
それを Windows 上でサービスにしてインストール
出来たらいいなと思って質問しました
bat ファイルでも作って起動時に実行でもいいんですけど
もう少しスマートな方法は無いかな・・・と


587:デフォルトの名無しさん
07/06/17 19:12:03
Cでラッパー書けばよくね?

588:デフォルトの名無しさん
07/06/17 19:14:43
それなら初めからCで書けば良いじゃないか

589:デフォルトの名無しさん
07/06/17 19:15:55
よくよめ。もうJavaで出来ちゃってんだよボケ

590:デフォルトの名無しさん
07/06/17 19:26:22
じゃぁ漏れがサービス化ラッピング用の
AbstructInteface創ってやるから
お待ちください

591:デフォルトの名無しさん
07/06/17 20:04:51
System.out.println("Format:"+channel.getFormat().toString());

channel.getFormat().toString()

こんなにドットが続く意味が分かりません。
printlnでメソッドを引数に出来るのですか?
初歩の質問ですいません。

592:デフォルトの名無しさん
07/06/17 20:19:46
printlnが引数にとっているのはメソッドではなくメソッドを評価した値です

593:デフォルトの名無しさん
07/06/17 20:27:39
>>591
System.out.println("Format:"+channel.getFormat().toString());

String str = "Format:"+channel.getFormat().toString();
System.out.println(str);

594:デフォルトの名無しさん
07/06/17 20:34:50
>>591
>>592

なるほど。やっと意味が分かった気がします。
返信ありがとうございます。


channnel.getFormat().toString()

という記述は、channnelというオブジェクトに対してgetFormatというメソッドの中のtoStringというメソッドを使って、それを評価した値がstrに格納されるということでしょうか?
なんか変な解釈をしてそうですが。

595:デフォルトの名無しさん
07/06/17 20:36:09
ちがいます
どうみても変な解釈です
本当にありがとうございました

596:デフォルトの名無しさん
07/06/17 20:39:19
>>595

ですよね。
getFormat()とtoString()の間を結ぶドットの意味が分からないというのが問題点です。
どう見ても勉強不足です。
本当にアリガトウございました。

597:デフォルトの名無しさん
07/06/17 20:43:34
>>582-590
URLリンク(www.syuhitu.org)

598:デフォルトの名無しさん
07/06/17 20:48:13
人にjarファイルを配布する際、
swtって外部DLLとか持ってこないといけないっぽいけど、
swingだと何も用意しなくていいの?



599:デフォルトの名無しさん
07/06/17 20:51:54
>>598
SWTも月末に出るver3.3だと外部dllは必要ない。

600:デフォルトの名無しさん
07/06/17 20:54:36
>>596
channnel.getFormat().toString()は、
Object obj = channnel.getFormat();
obj.toString();
とおんなじ

601:デフォルトの名無しさん
07/06/17 20:59:31
>>600

今度こそ本気で分かりました。
toStringの意味が分かってなかったのが原因だったようです。
ご丁寧にも返信くれた方ありがとうございました!


602:デフォルトの名無しさん
07/06/17 21:47:53
>>586
Microsoft Java Language Conversion AssistantでC#に変換しちゃえ

603:598
07/06/17 23:05:40
>598 
うわマジサンクス

諦めてswingで画面作り直してたけど、SWTでもなしでいけるようになるのか…


604:デフォルトの名無しさん
07/06/17 23:59:31
informaってインストールはどうすればいいのでしょうか?
サイトからダウンロードはしたのですが……

605:デフォルトの名無しさん
07/06/18 00:49:10
packageとimportの意味が調べてもよく分かりません。教えてください。

606:デフォルトの名無しさん
07/06/18 01:50:43
調べて分からない人間に教えて分かるとは思えない

607:デフォルトの名無しさん
07/06/18 03:14:11

public class GuessServlet extends HttpServlet{
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws IOException,ServletException{
response.setContentType("text/plain; charset=Windows-31J");

これのresponse.setContentTypeというのは、サーバーからクライアントに送られる文字の
エンコードにだけ関与しているということでしょうか?

608:デフォルトの名無しさん
07/06/18 04:17:22
何でそう思ったのか書け

609:デフォルトの名無しさん
07/06/18 08:07:43
>605 簡単に説明。extendsは別のクラスにあるメソッドを使うための儀式みたいな物。
packageはプロジェクトが大規模になるとファイルが散乱して美しくない&再利用しにくい
ということでフォルダーを作ってその中にファイルを入れてしまおうというシステム


610:デフォルトの名無しさん
07/06/18 08:10:19
みすった^^;extendsじゃなくてimportな。

611:577
07/06/18 10:15:30
>>581
ありがとうございます
でも自分にはまだ難しくて解りません(´・ω・`)

612:デフォルトの名無しさん
07/06/18 19:37:02
swingで自前でダイアログ作るのってどうすればいいのでしょうか・・・?

dialog.show();を使ったら推奨されないとか言われてeclipseにおこられてしまいました・・・。



613:デフォルトの名無しさん
07/06/18 19:50:11
>>612
URLリンク(java.sun.com)()
> 推奨されていません。 JDK version 1.5 以降は、 setVisible(boolean) に置き換えられました。

614:デフォルトの名無しさん
07/06/18 20:48:27
>>575
うちではできてる

615:デフォルトの名無しさん
07/06/18 22:04:24
RMIのリモートオブジェクトなのですが、
URLリンク(java.sun.com)
のように、リモートオブジェクトのスレッドは保証されていないとあります。
これを固定する方法はあるのでしょうか?
サーブレットのシングルスレッドモデルのようなイメージです。
性能面等はとりあえず差し置いて構わないのですが。
カスタムソケットファクトリあたりがそうなのかなあと思ったのですが
使い方がよく分かりませんでした…

616:デフォルトの名無しさん
07/06/18 22:10:50
>>615
RMIは単なる中継に使って、別プロセスで本体を上げていてはどうか?
RMIのシグネチャの中にスレッドを特定するキーを持たせておいて
RMIの機能は単なるディスパッチャ。
やりたいことが何かわからんのでこれくらいしか・・・

617:デフォルトの名無しさん
07/06/18 23:10:24
>>615
まんま、簡易Servletでも作成してしまえばいいと思われ。
イベントのディスパッチスレッドがリクエスト毎にスレッド立ち上げればいいでしょう。

618:デフォルトの名無しさん
07/06/18 23:51:43
ファンクションキーでタブやフレームをきりかえれるような処理ってできますか?

F2を押したら現在のフレームを閉じて新しいフレームを開く みたいな

619:デフォルトの名無しさん
07/06/19 00:11:51
>>618
ヒント: java.awt.Event

620:デフォルトの名無しさん
07/06/19 01:03:59
Wikipediaを読んでいたら「Javaでは意図せずオーバーライドしてしまう問題がある」というような記事が
書かれていたんですが、この問題はいつごろから指摘されたものなんでしょう?
言語設計時にすでにわかっていたんでしょうか?それとも後から見つかったものでしょうか?

621:デフォルトの名無しさん
07/06/19 01:14:12
>>620
意図しないオーバーライドはあまり問題になることはない。
問題になるのはオーバーライドしたつもりがしてなかったケース。
この対策としてjava 5から@override が追加になった。

622:デフォルトの名無しさん
07/06/19 01:22:14
>>621
実際はそうなんですか。
「してるつもりがしてなかった」ってのは気をつければ防げますけど
「するつもりがないのにしていた」のはいくら気をつけても防げないので問題が大きそうに感じたんですが。

てことは設計時に気づいてたけど問題が小さいので気にしなかったって感じなんですかね?


623:デフォルトの名無しさん
07/06/19 01:26:10
Javaに限ったことではないんじゃねーか?
オーバーライドをサポートするすべての言語で起こりうる問題だとおもわれ。

624:デフォルトの名無しさん
07/06/19 01:26:33
>>620
意図しないオーバーライドが問題になるケースって具体的にどんなん?
オーバーライド失敗には、メソッド名のスペルミスとかあるけど。

625:620
07/06/19 01:41:47
>>623
例えばC#だとoverrideの指定が必須らしいんでそういうのは起こらないそうです

>>624
本来呼ばれるはずのないタイミングで呼ばれる可能性があるのでは?


626:デフォルトの名無しさん
07/06/19 01:53:19
質問。
tとhに値を入れてその計算の結果に基づいて、いくつかの言葉から
1つを表示するには(例えば、暑い、寒い)どうすればいいですか?

今は結果以外のも表示されてしまっています

627:デフォルトの名無しさん
07/06/19 01:58:43
>>626
もう少し常人にわかるように質問してくれ

628:デフォルトの名無しさん
07/06/19 02:06:38
例えばt=15 h=12
t+h<25なら 暑い
t+h<10なら 寒い

今回は27なので暑い  と表示させたいのに寒いも表示されてしまう

629:デフォルトの名無しさん
07/06/19 02:14:53
暑い=0、寒い=1なら対象の数を2で割れば余りが0か1になるからそれで表示できる。
こんな感じ?

630:デフォルトの名無しさん
07/06/19 02:21:22
計算結果を使って表記したいんですよ

631:デフォルトの名無しさん
07/06/19 02:26:47
>>630
計算結果ってどういう根拠の計算をするんだよ。適当でいいのかw
(t + h) % 2 とか

632:デフォルトの名無しさん
07/06/19 02:33:29
例えば
tが湿度 kが温度

不快指数を出す

結果から
暑いとか寒いとか表示させる

633:デフォルトの名無しさん
07/06/19 02:35:47
じゃそうすればいいじゃん。
わからんから、>>628の例で行けば
例えばt=15 h=12 
t+h<10なら 寒い
そうでないなら 暑い 


634:デフォルトの名無しさん
07/06/19 02:39:27
暑いとか表示させたい種類が6つ

635:デフォルトの名無しさん
07/06/19 02:48:30
なんとなくわかった。 else if の使い方がわからなかったって話か。
中学生は早く寝なさいね

URLリンク(www.hellohiro.com)


636:デフォルトの名無しさん
07/06/19 02:50:11
else ifって言えばよかったんだ。失敗した

一応言うけど中学生じゃないよ

637:デフォルトの名無しさん
07/06/19 03:59:45
>>625
>本来呼ばれるはずのないタイミングで呼ばれる可能性があるのでは?
それオーバーロードじゃね?

638:デフォルトの名無しさん
07/06/19 04:33:11
いやオーバーライドでしょ

意図せず呼ばれるっていう例じゃないけどこういう時問題になりそう

Hogeを継承したSpecialHogeがあってSpecialHogeのほうに状態の正当性を表明する
AssertValidメソッドがあったとする
それとは無関係にあとからHogeのほうにAssertValidメソッドが追加されたとする
するとSpecialHogeのAssertValidはあとから追加されたHogeの同名メソッドをオーバーライドしてしまって
HogeのAssertValidが呼ばれなくなってしまう

みたいな。

639:デフォルトの名無しさん
07/06/19 07:34:29
スーパークラスのメソッドも確認せずに継承して意図しないオーバーライドってどんだけ間抜けな奴なんだ

640:デフォルトの名無しさん
07/06/19 08:06:04
>>625
いや、C# のoverride指定が必須で問題が起こらないってんなら、

Javaでもオーバーライド禁止したいなら
メソッドに final指定しときゃ良いんだから問題は起こらないと言える。

641:デフォルトの名無しさん
07/06/19 08:11:02
>>639
スーパークラス側で後からメソッド追加したらたまたまサブクラス側に同じシグネーチャの
メソッドが既にあったっつーことでわ?

642:デフォルトの名無しさん
07/06/19 08:11:40
>>640
釣りか?
オーバーライドを禁止してどうする。

643:デフォルトの名無しさん
07/06/19 08:16:27
>>642
オーバーライドを禁止すりゃ「意図しないオーバーライド」は起きない。至極当然の話。

644:デフォルトの名無しさん
07/06/19 08:19:01
クラス A でオーバーライドするためには final を削除する必要がある。
しかし、その状態ではクラス B でその関数を意図せずにオーバーライドする可能性がある。

645:デフォルトの名無しさん
07/06/19 08:22:26
>>644
上段は「オーバーライドされたくないメソッド」を「意図してオーバーライドしたい」ケースだから別の問題。

下段は意味がわからん。

646:デフォルトの名無しさん
07/06/19 08:31:45
>>638
とはいっても現実にそーゆー問題が多発しているかというと???
>>624 が言うようなスペルミスはかなり多発してるけど。

647:デフォルトの名無しさん
07/06/19 08:45:47
>>645
「意図してオーバーライドしたい」メソッドは final にできないが、
そのメソッドはいくらでも「意図しないオーバーライド」が出来てしまう、ということだ。

648:デフォルトの名無しさん
07/06/19 08:51:54
>>647
finalがつかないなら、親クラスはオーバーライドされても良いと意思表示してる。

非finalなら子クラスが知らないうちに「意図しないオーバーライド」する可能性はあるものの、
オーバーライドしたら、いまどきのIDEなら表示してくれるので危険性はかなり低い。

649:デフォルトの名無しさん
07/06/19 09:01:15
>>638
でもそれ実際には問題になりにくいよな。
HogeのAssertValidが状態の正当性を表明するものなら
状態の正当性を表明するSpecialHogeのAssertValidに上書きさたからといって
問題になるのは考えにくいわけで。

状態の正当性を表明以外でAssertValidって名前にするのも考えにくいし……

650:デフォルトの名無しさん
07/06/19 09:29:23
C#の場合は非virtualのメソッドや隠蔽を盛り込んでしまったんで、
あの辺を厳密にせざるを得なかったのだと思う。
javaの場合は現状のままで混乱もない。単なる言語の設計思想の差だ。

651:616
07/06/19 10:21:50
>>616-617
遅くなりましたがありがとうございます。
自分も大体同じ案を考えたのですがそれが普通か分からず、
RMIオブジェクトの生成あたりをカスタマイズする方法が
もしかしたらあるのかも、と思い質問させて頂いていました。
まずはその線で行ってみます。

652:デフォルトの名無しさん
07/06/19 10:29:11
>>648
override があればその危険性を排除できる。
final によるコントロールは override の代替にはならんよ、ということ。

653:デフォルトの名無しさん
07/06/19 10:55:31
素直に言語仕様が甘かったと認めればいいのに
C#よりJavaの方が先発だから仕方ない

654:デフォルトの名無しさん
07/06/19 11:04:42
甘かったというよりは後発がより優れているのは当然。
後発で先発と同じ失敗をしたらたたかれるだろw

655:デフォルトの名無しさん
07/06/19 11:21:57
C# に typedef がないのは(ry

656:デフォルトの名無しさん
07/06/19 11:45:28
>>652
> override があればその危険性を排除できる。
うっかりoverride付け忘れの危険性もあるわけで、どっちもどっちじゃね?

まぁ、普通は警告見れば気付くだろうけど
それ言ったら「意図しないオーバーライド」も相当間抜けな話だし。

657:デフォルトの名無しさん
07/06/19 11:52:28
>>652-656
オマエら他所いってやれ

658:デフォルトの名無しさん
07/06/19 12:17:17
>>657
技術屋って上級者ほど空気読めないよな

659:デフォルトの名無しさん
07/06/19 12:47:39
たまたま話の流れがそれでヒートしただけでは・・・

660:デフォルトの名無しさん
07/06/19 13:20:48
JAVAやってみたいがEclipseをIDEに使う場合
他に何を入れればいいかが判らない
J2SEいれてそれでOK?
JavaSwingとかはJ2SEに一緒に入ってるの?

661:デフォルトの名無しさん
07/06/19 13:32:02
>>660
J2SEも含めて何もいれる必要はない。
しいて言えば、基本APIドキュメントの日本語版程度。

662:デフォルトの名無しさん
07/06/19 13:45:21
>>661
レスサンクス
逝って来る

663:デフォルトの名無しさん
07/06/19 13:56:05
>>656
override がないとエラーなんすけど・・・

664:デフォルトの名無しさん
07/06/19 15:00:24
>>663
今のところJavaではオーバーライドするのにoverrideなんてものは要らん
他の言語の話なら他所でやってくれ

665:デフォルトの名無しさん
07/06/19 15:35:47
つーか
>するとSpecialHogeのAssertValidはあとから追加されたHogeの同名メソッドをオーバーライドしてしまって

こうなる前にまず、リファクタリングでスーパーのメソッドに移動してると思うんだが。
ただの不注意、誰でもあるからどうしようもない。

666:デフォルトの名無しさん
07/06/19 15:51:39
現実的に起こりえるのは、オーバーライドしちゃいけないメソッドをオーバーライドしちゃったというケースだからね。
finalがあるのでこれを防ぐってのがJavaの設計思想なわけだ。
orverrideと書かなきゃオーバーライドできないってのもありだけど、ダメと言っているのにオーバーライドする馬鹿がいるとしたらJavaのが優秀w

667:デフォルトの名無しさん
07/06/19 16:04:04
>>663
> 10.2.2 The new modifier
> A class-member-declaration is permitted to declare a member with the
> same name or signature as an inherited member. When this occurs,
> the derived class member is said to hide the base class member.
> Hiding an inherited member is not considered an error,
> but it does cause the compiler to issue a warning.

668:デフォルトの名無しさん
07/06/19 22:45:34
>>667
エラーだろうが警告だろうが上の文脈では本質的に同じだろう。
つかさすがにそれはスレ違い

669:デフォルトの名無しさん
07/06/19 22:53:36
javaってC#のnewオーバーロードに相当する機能はないの?

670:デフォルトの名無しさん
07/06/19 22:55:21
>>667
いや、>>656は区別してるから文脈上は別。
区別できてなかったら>>663がアホなんだろ。

っつか、スレ違いならレスつけるな

671:デフォルトの名無しさん
07/06/19 22:56:11
>>669
newオーバーロードが欲しいケースって、どんなケース?

672:デフォルトの名無しさん
07/06/19 23:00:55
Charset charset1 = Charset.forName("SJIS");
CharsetDecoder decoder = charset1.newDecoder();
ByteBuffer bb = ByteBuffer.wrap("a".getBytes());
System.out.println(decoder.decode(bb).toString());

先生・・・aが表示されんとです・・。

673:デフォルトの名無しさん
07/06/19 23:10:36
>>672
1.6以降だと表示される。1.5、1.4だと駄目だったと思う。

URLリンク(bugs.sun.com)
が原因。CharsetDecoder#decode(ByteBuffer) のバグ。

674:デフォルトの名無しさん
07/06/19 23:13:21
>>672
2文字(ab)以上でないとダメみたい

675:デフォルトの名無しさん
07/06/19 23:21:57
>>672
1.4でソース読んでみた。
0.5(平均バイト) × 1(バイト) が 0になる為、1バイトは無視されるバグだった。

676:669
07/06/19 23:24:21
>>671
すまん変な表現だった
C#では、派生クラスでnewキーワードを使ってスーパークラスと同じシグネチャの
メソッドを定義して、スーパークラスのメソッドを隠してしまえるの。
オーバーライドとは違って、派生クラスのオブジェクトをスーパークラスの
オブジェクトとして扱えば、スーパークラスに定義されたメソッドが呼び出される。
newを付けなくても動作は同じなんだけど、コンパイラで警告が出る。
こんな感じ
class A{public virtual void Method();}
class B : A{public new void Method();//オーバーライドするときはnewじゃなくてoverride}

677:デフォルトの名無しさん
07/06/19 23:26:43
>>676
それは知ってる。

で、具体的にどんなケースで必要になるの?って質問なんだが。

678:デフォルトの名無しさん
07/06/19 23:54:05
デリゲートだっけ?そういうのがないjavaだと困らんような。
公開フィールドに突っ込まれたクロージャは将来困るかも知れんが。

679:デフォルトの名無しさん
07/06/19 23:56:54
> 公開フィールドに突っ込まれたクロージャは将来困るかも知れんが。
???

680:デフォルトの名無しさん
07/06/20 04:15:12
どんな場合に使うかも知らずに「知ってる」って…w

681:デフォルトの名無しさん
07/06/20 08:30:14
使われたくないスーパークラスのメソッドを隠す
publicをprivateにするのも可
インターフェイスの明示的実装とあわせて、
継承を繰り返したりインターフェイスを多数実装したクラスが
継承メンバだらけでぐちゃぐちゃになるのを防ぐ機能だよ
さすがにスレ違いだなすまん

682:デフォルトの名無しさん
07/06/20 09:22:42
>>681
> 使われたくないスーパークラスのメソッドを隠す
> publicをprivateにするのも可

> 3.7 Scopes
> The scope of a name is the region of program text within
> which it is possible to refer to the entity declared by the name
> without qualification of the name.

> 3.7.1 Name hiding
> The scope of an entity typically encompasses more program text
> than the declaration space of the entity. In particular,
> the scope of an entity may include declarations that introduce
> new declaration spaces containing entities of the same name.
> Such declarations cause the original entity to become hidden.

> 7.3 Member lookup
(中略)
> First, the set of all accessible (§3.5) members named N
> declared in T and the base types (§7.3.1) of T is constructed.
> Declarations that include an override modifier are excluded from the set.
> If no members named N exist and are accessible,
> then the lookup produces no match, and the following steps are not evaluated.

683:デフォルトの名無しさん
07/06/20 09:37:12
続く

> Next, members that are hidden by other members are removed from the set.

だけど、これは(集合内の)他のメンバによって隠ぺいされるメンバは集合から削除される、なんだろな。

684:デフォルトの名無しさん
07/06/20 18:21:04
基底クラスでpublicになってるのを派生クラスでprivateにするのはC#でも無理だな
派生クラスで基底クラスが実装してるものと同じインターフェイスを実装しなおしたいとか、
インターフェイスを実装したいけど、そのメンバが
基底クラスのメンバと名前が被ってるとかいうときに使う

685:デフォルトの名無しさん
07/06/20 19:51:32
くだらない質問ですいません。
int b=1;
int c=0;
int d=b---c;
これは解釈の仕方ではインクリメント演算子にもなるし、
デクリメントにもなると思います。この場合はデクリメント演算子と
解釈して計算するそうです。なぜそうなるのでしょうか?
人間がこういう場合はこうすると決めたことなのでしょうか?

686:デフォルトの名無しさん
07/06/20 19:56:38
むしろどう解釈したらインクリメントになるのか教えてほしい

687:デフォルトの名無しさん
07/06/20 20:00:48
すいません、間違えました。前置演算子として解釈するのか
後置演算子として解釈するのかでした。

688:デフォルトの名無しさん
07/06/20 20:13:49
左から判定していくんじゃねーの

689:デフォルトの名無しさん
07/06/20 20:15:12
>>685
C言語は解釈順が決められていないが
Javaは前から評価していくと決まっていて、
単項演算子は、2項演算子の-よりも優先度が高いから
d = (b--) - c
じゃないのか?
URLリンク(www.y-adagio.com)

690:デフォルトの名無しさん
07/06/20 20:30:46
>>689
そのURLに書いてあるのは値の評価順のことでしょ
構文解析の話題とはまったく関係なくない?


691:デフォルトの名無しさん
07/06/20 20:42:20
>>689
URLリンク(www.y-adagio.com)
> Javaは,他の字句変換を行えば文法的に正しいJavaプログラムが生成される場合でも,
> 各段階で(トークンの)最長可能変換を常に使用する。例えば,入力文字a--bは,
> a,-,-,bとトークン切出し(3.5)すれば,文法的に正しいJavaプログラムの一部となるが,
> 文法的に正しくないa,--,bにトークン化される。

692:デフォルトの名無しさん
07/06/20 21:09:26
>>681
つリスコフの置換原則

693:デフォルトの名無しさん
07/06/20 21:25:57
eclipseのVisual Editorでswingを使ったGUIプログラムを作りました(main()はなし)
eclipse上からはメニューからJava Bean実行を選ぶだけで実行出来るのですが、
コマンドプロンプトや他のPCから実行したい場合どうすればよいのでしょうか?


694:デフォルトの名無しさん
07/06/20 21:28:45
エントリポイントないのにどうやって実行するんだ?

695:デフォルトの名無しさん
07/06/20 21:32:05
>>693
いったい何を言っているんだ・・・
mainメソッドを記述したクラスを作って実行すればいいじゃないか?

696:デフォルトの名無しさん
07/06/20 21:38:00
685です。回答ありがとうございました。
ホームページを見たのですが、勉強不足で理解できませんでした。
いろいろ自分で調べてわかるようにしたいと思います。

697:デフォルトの名無しさん
07/06/20 21:47:18
「左から順に解析される」
「複数の解釈が可能な場合は常に長い方が採用される」

この2点だけおさえておけばいい。
あとは理解力の問題だ。

「この条件で自分で解析するとしたらどうなるだろうか?」
というのを実際に紙にでも書いて考えてみれ。

698:デフォルトの名無しさん
07/06/20 22:30:54
見てすぐに理解できないコードは実務では不要
言語研究とか趣味ならいいが。

699:デフォルトの名無しさん
07/06/21 04:52:42
String hoge = fuga.split("regex");
if(hoge.length >= 3 && hoge[2].equals("hage")){
}
みたいに書いたときにIndexOutBoundみたいなException出る心配はないですよね


700:デフォルトの名無しさん
07/06/21 05:21:26
>>699
IndexOutOfBoundsExceptionが出る心配はない。
その前にコンパイルエラーが出る。

701:デフォルトの名無しさん
07/06/21 05:24:45
つ String[] hoge =
配列の要素数をチェックしているからhoge[2]でインデックス範囲外アクセスの例外は出ないよ

702:デフォルトの名無しさん
07/06/21 05:38:31
>>700
すみません typo です

String[] hoge = fuga.split("regex");

と解釈してください

703:デフォルトの名無しさん
07/06/21 05:39:57
必ず左から評価されると決まっていない場合は
ifを2行に分ける必要があるんだけど
Javaの場合は大丈夫だお

704:デフォルトの名無しさん
07/06/21 07:39:28
// さっき知ったJadが凄過ぎて感動して耳から鼻くそが出てきそう

705:デフォルトの名無しさん
07/06/21 08:35:10
if(hoge.length >= 3 & hoge[2].equals("hage")){
}
だとショートサーキット評価が行われないから、
hoge[2]が無ければArrayIndexOutOfBoundsExceptionが投げられる。

706:デフォルトの名無しさん
07/06/21 10:39:34
送信ボタンを押しても、反応しません・・。
どこか、間違えていますか?
初心者なので、ご指摘・修正の方を宜しくお願いいたします。

URLリンク(i-get.jp)

707:デフォルトの名無しさん
07/06/21 11:12:52
>>706
JButton button2
コンストラクタの中で定義しているローカル変数のbutton2とインスタンス変数のbutton2の名前が衝突しているのが原因。
解決方法としては、コンストラクタの方の
 JButton button2 = new JButton("送信"); /* 送信ボタン */

 button2 = new JButton("送信"); /* 送信ボタン */
とする。
それだけだとぬるぽが起こるガッ、原因は同じ。

708:デフォルトの名無しさん
07/06/21 11:18:48
>>707
ご回答ありがとうございます!
修正をさせて頂きましたが、ぬるぽが発生します。
ぬるぽを防ぐにはどの様に修正した方が良いでしょうか?
色々とぐぐったのですが、初心者なので良く分かりませんでした。
質問ばかりですみません・・。

709:デフォルトの名無しさん
07/06/21 11:29:23
>>708
原因は一緒だといってるだろうガッ
解決した理由を考えなければ、貴様は何度も同じ質問をする。

710:デフォルトの名無しさん
07/06/21 11:33:52
Java最強!?
スレリンク(tech板)

711:デフォルトの名無しさん
07/06/21 12:05:45
>>705
ぬるぽじゃないの?

712:711
07/06/21 12:23:10
あ、ああああ。すません。演算子見てませんでした。

713:デフォルトの名無しさん
07/06/21 17:08:38
StreamTokenizer って指数形式の浮動小数点数を数値として読み取ってくれないのですか?
読み取らせるにはどうしたらよいでしょうか。

714:デフォルトの名無しさん
07/06/21 20:29:36
JDBCでMySQLにデータ追加するプログラムを作っているのですが、
eclipseで実行するとデータ追加出来るのに、JavaWebStartで実行するとできません。
ドライバか何か設定してやらないといけないのですか?

715:デフォルトの名無しさん
07/06/21 20:37:51
エスパーさーーん出番ですよー

716:デフォルトの名無しさん
07/06/21 20:41:42
-classpath

717:デフォルトの名無しさん
07/06/21 23:31:34
エスパーしても要求するライブラリインスコさせてないとかセキュリティマネージャとか色々ありすぎる。

718:618
07/06/22 00:58:49
>>619
ありがとう
答えは、VK_F1でOKでしょうか?

なんかjava.awt.event.KeyEvent
の説明にあった、「定数の値に頼らないでください」の注意書きがよくわからなかったのですが…



719:デフォルトの名無しさん
07/06/22 01:19:13
定数と比較する時に数値リテラルを使うなって事。

final byte COLOR_RED=127;
と定義されてるからと言って

//赤の場合
if(getColor() == 127) System.out.println("赤です。")

と書かない。実装がいつ変更されるか分からないから。
言い方変えると実装に依存するなと言う事。

720:デフォルトの名無しさん
07/06/22 05:36:26
//赤の場合
if(getColor() == COLOR_RED) System.out.println("赤です。")

これはOK?

721:デフォルトの名無しさん
07/06/22 05:51:15
おk

場合によっちゃ型まで変更があるかも知れん。

final String COLOR_RED="#ff0000";

if(getColor()==127)...

こうなったら定数とgetColor()の定義以外にリテラルも変更する必要が出て来てバグを誘発したりする。

公開されてるAPIリファレンスの説明文から分かる情報以上の、たとえばソースコードから
得た情報に依存したコードを書くのは行儀悪い。

722:デフォルトの名無しさん
07/06/22 11:11:40
型の変更に対応できるソースなんて書けないだろ
その例だと>>720もアウトだし。

723:デフォルトの名無しさん
07/06/22 11:30:15
JDialog って、コンストラクタで作成した後で、
オーナーを変更することはできないのですか?

724:デフォルトの名無しさん
07/06/22 11:59:39
>>723
作成した後に変える必要があるのですか?
新たにnewすることはいけないことですか?
専用のPanelを作成することはできないのですか?
特定の用途であれば、それぞれのパネルを保持すればよいのではないですか?

725:723
07/06/22 12:54:17
すいません、質問を変えます。
やりたいことは、JOptionPane みたいに、
Component を受け取って、その親の Frame または Dialog を
オーナーとするダイアログを作成したいんですが、
JDialog のコンストラクタが Frame または Dialog しか受け付けないので、

class SomeDialog extends JDialog {
 public SomeDialog(Component comp) {
  super(comp); // これはできない。
 }
}

はうまくいきません。

super(SwingUtilities.windowForComponent(comp));

これも、JDialog のコンストラクタが Window を受け付けないので、だめです。

instance of で Window が Frame か Dialog かの判定はできますが、
super はコンストラクタ内の最初に呼び出さなければいけないので、これもできません。

何かいい方法はないでしょうか?

726:デフォルトの名無しさん
07/06/22 13:38:21
作成側でownerに対する参照を持っているべきだと思うな。
使い分けはオーバーロードしておきゃOK

class SomeDialog extends JDialog {
 public SomeDialog(Dialog owner) {
  super(owner);
 }
 public SomeDialog(Frame owner) {
  super(owner);
 }
}

727:デフォルトの名無しさん
07/06/22 13:41:18
>>725
createDialog みたいなメソッド作って、そこで instanceof して
2種類のコンストラクタ呼び分けるしかないのでは?

1.6以降なら JDialog のコンストラクタが Window も引数にとれるようになってるけど。

728:デフォルトの名無しさん
07/06/22 13:42:31
どうしても中で判定したい場合は、次のメソッドを追加。

static SomeDialog createInstance(Component component) {
    if(component instanceof Dialog) {
         return new SomeDialog ((Dialog) component);
    } else if(component instanceof Frame) {
         return new SomeDialog ((Frame) component);
    } else {
throw new IllegalArgumentException() // ?
    }
}


729:デフォルトの名無しさん
07/06/22 15:41:46
ローゼンのキャラが解説してるjavaのサイトがあったのですが
どなたかご存知ないですか?
クライアントサーバとかの解説がされているページです。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch