08/02/21 22:12:11
>>594
data[i] = buffer.getShort() & 0xffff
でダメかね?
597:デフォルトの名無しさん
08/02/21 22:33:16
>>595
ファイル読み込むときのエンコーディング正しく指定してる?
598:デフォルトの名無しさん
08/02/21 22:33:39
JAVAとC#どっちがリバースエンジニアリングに強い?
どっちも変わらない?
599:デフォルトの名無しさん
08/02/21 22:46:14
そんな高度なことできるやつがそんな質問するとは思えないのだが
600:デフォルトの名無しさん
08/02/21 22:47:40
強いってのはやりやすいって意味か?
それともやられにくいって意味か?
基本的にJavaはネイティブにしない限りソースへ復元は簡単な方
C#はどんだけネイティブ系使っているか次第
601:デフォルトの名無しさん
08/02/21 22:53:41
逆コンパイルはどっちも超簡単でほぼ完璧だよ
602:582
08/02/21 23:00:01
>>593
ありがとうございます。
色んなベンダから別々に色んな技術が生まれてカオスな状態という感じでしょうか
デフォになってるものも無いようなので自分で色々試してみます。
603:594
08/02/21 23:02:25
>>596
ああ、なるほどー。と思って実装してみたら、逆に少し遅くなりました。(データは正しく読めてました)
以下のようなコードを書いてベンチマークしても、やっぱり遅くなってましたorz
public class ReadTest {
public static final int length = 3800 * 2600;
public static int[] data = new int[length];
public static ByteBuffer buffer;
public static void main(String[] args){
try{
buffer = ByteBuffer.allocateDirect(length * 16);
buffer.order(ByteOrder.LITTLE_ENDIAN);
for(int i = 0; i < 20; i++){ read1(); read2(); read2(); read1(); System.out.print(".");}
long t = System.currentTimeMillis();
for(int i = 0; i < 10; i++){ read1(); }
System.out.println("\r\n" + (System.currentTimeMillis() - t) + " ms");
t = System.currentTimeMillis();
for(int i = 0; i < 10; i++){ read2(); }
System.out.println((System.currentTimeMillis() - t) + " ms");
} catch (Exception e){}
}
public static void read1() throws Exception{
FileInputStream fis = new FileInputStream(new File("hoge"));
FileChannel srcChannel = fis.getChannel();
for(int i = 0; i < 4; i++) fis.read(); // ヘッダ
buffer.rewind();
srcChannel.read(buffer); srcChannel.close(); fis.close(); // 読み込み
buffer.clear();
for(int i = 0; i < length; i++){ data[i++] = buffer.getShort() & 0xffff;}
}
/* read2 は読み込み部分が古いほう(省略) */
うーん、不思議ですねえ。 getShort() は遅いんでしょうか。。。
でかい画像を大量に処理していて、読み込みが25%くらい閉めているので、短くしたい・・
604:594
08/02/21 23:04:31
最終行の data[i++] は data[i] のミスです
605:デフォルトの名無しさん
08/02/21 23:05:21
>>600
やられにくいって意味でとらえてください
>>601
そうですか、使いやすくて良い言語だけど自分が作ったソフトが逆コンパイル
されるのは困るな
企業で開発するときは何か対策しているのでしょうか?
606:デフォルトの名無しさん
08/02/21 23:17:50
なんで困るんだ?
607:デフォルトの名無しさん
08/02/21 23:28:14
>>597
ありがとうございます
UTF-8で読み込んでいます
System.out.println("แอมเพอร์แซนด์");
これでエラーになるのはなんででしょうか
608:デフォルトの名無しさん
08/02/21 23:29:10
แอมเพอร์แซนด に一致する情報は見つかりませんでした。
609:デフォルトの名無しさん
08/02/21 23:57:00
こんばんは。
CDを管理するプログラムを作っているのですが、mainクラスとCDクラスがあります。
管理する数は、5つでその分のCDインスタンスをつくり、価格と名前のを入力しコレクションで管理すると言うプログラムです。(重複可で名前でソートさせます)
このプログラムを作ってみたのですが、Collections.sort(list);としたのですが、下線のびっくりマークのエラーが出てしまいます。
内容は、『型の安全性:型Collectionの総称メソッドsort(List<T>の未検査の呼び出しsort(List)がありました』と表示されてしまいます。
このようなエラー表示にはどのような対処をしたら良いのでしょうか?
アドバイスお願いします。
610:デフォルトの名無しさん
08/02/21 23:59:26
>>609
-source 1.4
をコンパイルオプションに付ける
611:デフォルトの名無しさん
08/02/22 00:01:32
ああ、IDE使ってるのか
JDKレベルを1.4にする
612:デフォルトの名無しさん
08/02/22 00:06:39
>>609です。
Eclipse 3.1を使ってます。5.0から1.4にするという感じでよいのでしょうか?
コンパイルオプションの変え方がわからないので調べてみます。
613:デフォルトの名無しさん
08/02/22 00:42:51
>>612
JDK5以降で言語仕様に入れられたジェネリクスというものに関わるエラー。
「java ジェネリクス」で調べてみて。
eclipseならリファクタリング機能の中に、
ジェネリクスを使用していないソースを使用するように変更してくれる機能もあるけど、
とりあえず、ジェネリクスを理解してからにしたほうがいい。
614:デフォルトの名無しさん
08/02/22 00:45:18
>>612です。
アドバイス、ありがとうございます。
ひとまず、1.4に変更したところちゃんと動作しました。ジェネリクスの勉強もしてみます。
615:デフォルトの名無しさん
08/02/22 01:30:47
java覚えて女性関係のメリットになったことってありますか?
真剣な質問です
また、女性関係に強い言語は何でしょうか?
616:デフォルトの名無しさん
08/02/22 02:04:39
つまんね
他でやれ
617:デフォルトの名無しさん
08/02/22 03:18:36
Javaの勉強をしている初心者なのですが
今コードを書くためのエディタを探しています。
よいエディタを紹介していただけませんか?
618:デフォルトの名無しさん
08/02/22 05:53:51
vivi
619:デフォルトの名無しさん
08/02/22 09:05:49
>>605
Javaと.NETどちらとも、逆コンパイラはある。
どっちも中間言語を使うタイプなので、逆コンパイラを作りやすいらしい。
そしてその対策として、obfuscator(難読化ツール)がどちらにもある。
単に、シンボル名(クラス名、メソッド名、変数名)をランダムな文字列に
置き換えて、逆コンパイラが出力したソースを読みにくくする、
ってだけだけど。
620:デフォルトの名無しさん
08/02/22 10:00:34
ジェネリクスについての質問が多いのは
初心者には難しいので入門書の段階では取り扱わないからか
それとも基本1.4で5.0要素は申し訳程度にしか書いてない本が
未だに主流だからか
621:デフォルトの名無しさん
08/02/22 10:21:52
直観的でなくて罠が多いからな
622:デフォルトの名無しさん
08/02/22 11:27:58
URLリンク(www.xlsoft.com)
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
623:デフォルトの名無しさん
08/02/22 11:38:09
>>620
俺のとこでは依頼される仕事も未だに1.4全盛なんだよなー。他の会社の人に聞いてもそうだという。5.0に移行するのはいつになることやら。。
624:デフォルトの名無しさん
08/02/22 11:43:56
>>622
Javaをネイティブ化したいだけならGCJもあるよ
速くなるとは限らないが
Javaが見た感じ重いのはSwingとかライブラリのせいもあるから…
625:デフォルトの名無しさん
08/02/22 11:48:02
165 名前: 以下、名無しにかわりましてVIPがお送りします。 [sage] 投稿日: 2008/02/22(金) 11:45:46.56 ID:Q0PQrlKw0
お前らに朗報
URLリンク(pc11.2ch.net)
この板の適当なスレに
URLリンク(www.xlsoft.com)
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
と書き込んだらデブスがデブゲバうpするってよお
626:デフォルトの名無しさん
08/02/22 11:50:08
170 名前:以下、名無しにかわりましてVIPがお送りします。[sage] 投稿日:2008/02/22(金) 11:47:31.63 ID:Q0PQrlKw0
お前らに朗報
URLリンク(pc11.2ch.net)
この板の適当なスレに
URLリンク(www.xlsoft.com)
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
こう書き込まないとお前らがキーボード打ってる指があさって腐るそうだ
腐って死ぬぞ??
627:デフォルトの名無しさん
08/02/22 12:37:40
ジェネリクスを使うだけなら難しいか?
Foo[] と ArrayList<Foo> が初心者的には理解しやすくなると思うんだけど
単なる入門書の怠慢だと思う
628:デフォルトの名無しさん
08/02/22 14:03:27
始めるんだけど、どの本がオススメですか?
629:デフォルトの名無しさん
08/02/22 15:01:06
初心者で失礼します。どう修正していいかわかりません。宜しくお願いします。
import java.util.Scanner;
public class tes
{
public static void main(String[] args)
{
char stuname;
Scanner kb = new Scanner(System.in);
stuname = getStuN("Please enter the student name: ", kb);
}
//get studnt name
public static char getStuN(String str, Scanner kb)
{
System.out.print(str);
char sname = kb.nextLine();
System.out.print(sname);
return sname;
}
}
---------
tes.java:15: 互換性のない型
検出値 : java.lang.String
期待値 : char
char sname = kb.nextLine();
^
630:デフォルトの名無しさん
08/02/22 15:08:50
>>629
URLリンク(java.sun.com)
nextLine の戻り値型は String です。
よって sname の型宣言を String にして、それ以降の記述を適切に修正してください。
631:デフォルトの名無しさん
08/02/22 15:26:12
>>630
できました! ありがとうございましたm(_ _)m
632:デフォルトの名無しさん
08/02/22 15:42:51
625 名前:デフォルトの名無しさん[sage] 投稿日:2008/02/22(金) 11:48:02
165 名前: 以下、名無しにかわりましてVIPがお送りします。 [sage] 投稿日: 2008/02/22(金) 11:45:46.56 ID:Q0PQrlKw0
お前らに朗報
URLリンク(pc11.2ch.net)
この板の適当なスレに
URLリンク(www.xlsoft.com)
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
と書き込んだらデブスがデブゲバうpするってよお
626 名前:デフォルトの名無しさん[] 投稿日:2008/02/22(金) 11:50:08
170 名前:以下、名無しにかわりましてVIPがお送りします。[sage] 投稿日:2008/02/22(金) 11:47:31.63 ID:Q0PQrlKw0
お前らに朗報
URLリンク(pc11.2ch.net)
この板の適当なスレに
URLリンク(www.xlsoft.com)
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか?
もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
こう書き込まないとお前らがキーボード打ってる指があさって腐るそうだ
腐って死ぬぞ??
633:デフォルトの名無しさん
08/02/22 18:03:04
JAVAからpostgresSQLを操作するプログラムを作成しております。
JAVAからpostgresのでーたをバックアップする方法を知りたいのですが、
JDBCを利用して、postgreSQLのpg_dumpを操作する方法はあるのでしょうか。
また、pg_dump以外にも、JDBCにてデータのバックアップを出来る方法があれば、
ご教授お願いいたします。
634:デフォルトの名無しさん
08/02/22 18:19:27
>>633
DatabaseMetaData#getTablesで全テーブルを取得して全行クエリしてファイルに書き出すとか・・・
それですべて復元できるかわからないけど
Runtime#execでpg_dump呼び出す方が簡単な気がする
635:デフォルトの名無しさん
08/02/22 18:33:59
>>634
>DatabaseMetaData#getTablesで全テーブルを取得して全行クエリしてファイルに書き出すとか・・・
それは遅そうだw
>Runtime#execでpg_dump呼び出す方が簡単な気がする
わしもそう思う。
何かの操作が必要だったら、シェルかバッチの中でJavaプログラムで操作したのちに
バックアップを走らせた方が効率が良さそうだが。
636:633
08/02/22 18:44:15
634,635
どうもありがとうございます。
早速、試してみます。
637:デフォルトの名無しさん
08/02/22 19:07:30
今どきJDBCなんて使う必要あるの?
638:デフォルトの名無しさん
08/02/22 21:32:33
教えてください。
環境:Oracle JDBC
PreparedStatementとResultSetを使用し、
SELECTを実行しています。
通常問題ないのですが、バインド変数(?)が11個以上あるSQLを実行した場合、
かつ、レコードのヒット件数が11件以上を超えている場合、
11件目のデータ取得時に「配列の範囲」を超えた、という例外が発生します。
バインド変数はsetStringで1から順に設定し、
設定内容についても問題ないです。
※デバッガで確認済み
SQL自身は問題なく、SQLExceptionが発生しているわけでもありません。
何か回避策はあるのでしょうか?
639:デフォルトの名無しさん
08/02/22 22:03:15
まずスタックトレースを貼れ。その話し振りだと単なるバグの可能性が素敵連
640:デフォルトの名無しさん
08/02/22 22:09:44
Cで言うところの構造体の代わりにクラスを使っています。
内部変数はInt型が2つ、Boolean型が1つの小さなクラスです。
クラスの2次元配列として2000x2000のインスタンスを生成するコードを書いたら
インスタンスを生成する箇所(以下)で
for(int j=0;j<2000;j++){
for(int i=0;i<2000;i++){
box[i][j] = new Box();
}
}
java.lang.OutOfMemoryError: Java heap space
というエラーが出てしまいました。
メモリの使い方が下手なんだと思うのですが、
よい対処法が思いつきません。
何か手はあるでしょうか?
641:デフォルトの名無しさん
08/02/22 22:32:58
>>640
簡単に計算。integer型として。
4byte * 2 * 2000 * 2000 => 32byte * k * k => 32Mbyte
boolean型はどれだけ食うのか分からないが、さらに4-16Mbyte
ということで、先の値を目安にし、ヒープを明示的に確保します。
以下ページから java のページ、-Xmx や -Xms オプションを参照のこと。
URLリンク(java.sun.com)
他の方法もあるとは思いますが、安易な解決法として。
642:デフォルトの名無しさん
08/02/22 23:23:53
>>641
ありがとうございます。
そういうやり方もありそうですが、
もう少しコードの書き方について考えてみます。
643:デフォルトの名無しさん
08/02/22 23:24:12
tomcatは内部でjspをコンパイルするためにjdkを使っていると聞いたのですが
tomcatをインストールする場面ではjdkではなくjreのパスを指定しますよね
その後もtomcatの設定でjdkの場所を教えたつもりは無いのですが
jspをちゃんとコンパイルしてくれてるみたいです。
tomcatはどうやってjdkを認識してるんでしょうか?
644:デフォルトの名無しさん
08/02/23 00:47:22
>>644
JSPのコンパイル用にIBMのJDK積むようになった。
昔はJDKの指定が必須だった。4までだったっけ?
645:643
08/02/23 00:52:46
>>644
なるほど~そういうことだったんですね。
モヤモヤしてたのがスッキリしました。
ありがとうございました。
646:デフォルトの名無しさん
08/02/23 02:17:56
>>640
Int型というのは存在しない
Booleanの代わりにbooleanを使ったらどうか?
647:デフォルトの名無しさん
08/02/23 03:40:02
>>640
試してみた
Sun JRE 1.6.0_04
Box[2000][2000] の場合 107MB
int[2000][2000][2] + boolean[2000][2000] の場合 110 MB
648:デフォルトの名無しさん
08/02/23 03:59:50
new って複数のスレッドから同時に実行できるんですか?
649:デフォルトの名無しさん
08/02/23 04:06:06
>>648
意味が分からん
どういう状況を想定しているのか擬似コードでもいいからシンプルな例で示せ
650:デフォルトの名無しさん
08/02/23 04:06:21
>>647
まあなんですか、[2000][2000][2] ではなく、[2][2000][2000] をお勧めします。
ついでに用途が合えば boolean[][] ではなく、java.util.BitSet を。
651:デフォルトの名無しさん
08/02/23 04:10:57
>>648
コンストラクタはスレッドセーフかって意味なら答えは一般的にはノー
652:648
08/02/23 04:16:48
作ったプログラムのどうも動作が遅くて、スレッドダンプをみてみたらほとんどのスレッドが
コンストラクタ
java.lang.AbstractStringBuilder.AbstractStringBuilder(int capacity)内の
value = new char[capacity];
↑のところでブロックしてたので、非同期でnewは呼べないのかなと思ったんですが
ひょっとするとcapacityが大きいときだけ同期呼び出しだったりします?
653:648
08/02/23 04:18:31
>>651
つまり非同期には呼ばれないってことですね。
654:デフォルトの名無しさん
08/02/23 04:40:17
hou
655:デフォルトの名無しさん
08/02/23 04:46:29
>>652
ヒープに配列を生成する過程でロックされてそうだ。
仮に非同期に実行できたとしても体感時間は変わらないと思う。
仮にヒープの拡張に時間が掛かってるなら、
最初からヒープを必要な分大きくしておけば少しは早くなる。
あとは初期にやたら時間が掛かるなら、確保するサイズを小さくして、
最大確保を遅延させるのはどうか。
確保するたびに前のゴミが出るのと時間が掛かるけど。
656:デフォルトの名無しさん
08/02/23 09:57:09
>>652
確保するサイズが大きいとスレッドごとのプールから取れなくなるから同期が必要になる
というかそんな大きなStringBuilderをそんな頻繁に確保するってことがまずい気がする
GC起きまくってないか?一度 -verbose:gc で見てみ
確保したのを使いまわすと改善するんじゃないかな
657:お
08/02/23 11:14:43
j2dk1.4.2を使っているのですが、
javacが使えず、環境変数の設定をすると、一度できたんですが、
2回目からできなくなりました。
しかも変数の設定を変えていたので元のがどんなのだったかがわかりません…。
環境変数の、Pathを教えて下さい。
658:デフォルトの名無しさん
08/02/23 11:16:24
>>657
>>1
659:お
08/02/23 11:29:59
読んでもよくわかりません。どなたかー
660:デフォルトの名無しさん
08/02/23 11:51:13
>>659
本当に読んだか?具体的にどの手順がわからないんだ
URLリンク(java.sun.com)
661:デフォルトの名無しさん
08/02/23 14:00:48
>>655
>>656
なるほど!スレッドごとのプールから取れなくなるからってことですか。
このStringBuffer自体はデバッグのための文字列だったのでここの部分を取り払ったら
ロック争奪がなくなってスムーズに動きました。
ありがとうございました!
662:デフォルトの名無しさん
08/02/23 14:05:43
>>647
>>650
いろいろありがとうございます
Intのうち一つはflagで3種類の値しかとらないのでboolean2つで頑張って
もう一つのIntをshort型にするとだいぶ減りそうな気がしました。
後で実装してみようと思います
boolean2つのところはBitSet?を使えばいいのですかね。。
後でjavadoc読んでみます。
663:デフォルトの名無しさん
08/02/23 16:05:39
下記の構造でメインクラスtestから、VelocityのgetTemplateをコールしたところ、エラーが出ました。
test.jar
+-dir1
+-test.class
+-templ.properties
これで、
> java -jar test.jar
と実行すると
ResourceManager : unable to find resource 'templ.properties' in any resource loader.
というエラーが出ています。
test.jarのおかれているディレクトリにtempl.propertiesがあるか?を探しているようで、
test.jarの中を探していないみたいです。
Main-Class:はdir1.testと指定してあるのでmainはコールできてます。
なにか指定し忘れてることあるんでしょうか。。。お願いします。
664:デフォルトの名無しさん
08/02/23 16:25:09
BufferedImageのディープコピーの仕方を教えてください
665:デフォルトの名無しさん
08/02/23 16:30:43
もう1回BufferedImageを作れ
666:デフォルトの名無しさん
08/02/23 17:04:50
Javaの初心者にExceptionのことを教えたいのですが、
J2SEのクラスの、Exceptionをthrowするメソッドで、
一番基本的で分かりやすいものって何だと思いますか?
コンストラクタじゃない普通のメソッドでお願いします。
667:デフォルトの名無しさん
08/02/23 17:11:09
ぬるぽ
668:デフォルトの名無しさん
08/02/23 17:11:27
NumberFormatException
669:デフォルトの名無しさん
08/02/23 17:19:51
いや、Exception自体じゃなく、
Exceptionをスローするメソッドです。
例えば、FileOutputStream#write(byte[] b)とか。
670:デフォルトの名無しさん
08/02/23 17:24:40
>>666
// Exception 自体は throw も catch もするな。を教える
実行時例外なら、Integer.parseInt(String) で NumberFormat
普通のヤツは意図的に起こすだけなら ClassNotFound とか IO とか
NumberFormat は良い例ではないのよね。
実行時例外の割りに、catchされるように組み込まれてるし。
まあ、別に無理に教える必要は無いんじゃないかな
それよりも知らないメソッドは API doc で調べるように仕込むべし。
671:デフォルトの名無しさん
08/02/23 17:38:36
ありがとうございます。
実行時例外じゃなくて、
IOExceptionとか、メソッド呼び出すと絶対try catchしないといけないヤツです。
672:デフォルトの名無しさん
08/02/23 17:42:38
new FileInputStream
ファイルがなければFileNotFoundExceptionを投げる
673:デフォルトの名無しさん
08/02/23 17:45:47
って、コンストラクタはだめなのか
じゃあ Socket#connect
接続できなければ IOException
674:デフォルトの名無しさん
08/02/23 17:55:35
コンストラクタでないわかりやすいもの・・・
ImageIO#read(File) とか?
675:デフォルトの名無しさん
08/02/23 18:50:51
Stream系のIOExceptionじゃね?
try-catch-finally と合わせて覚えるのがセオリーかと
676:デフォルトの名無しさん
08/02/23 19:40:42
みなさんありがとうございます。
finnalyも合わせて、Stream系で説明してみようと思います。
677:デフォルトの名無しさん
08/02/23 20:55:38
IOException もいいが ParserConfigurationException も捨てがたい
678:デフォルトの名無しさん
08/02/23 23:54:30
学校でちょっとプログラムに興味あって色々自分で勉強してみたんですがJavaって簡単過ぎてつまらないんですがこんなので仕事になるんでうか?
HTMLも簡単だったし仕事では何やってるんですか?
679:デフォルトの名無しさん
08/02/23 23:58:40
オナヌー
680:デフォルトの名無しさん
08/02/24 00:00:51
>>678
ひとつだけいえることはつまらないと思う人は
これを仕事にしてはいけませんよ。
681:デフォルトの名無しさん
08/02/24 00:01:05
簡単か難しいかと、仕事になるかならないかは、関係ないからな
なにせ「単純労働」っていう言葉もあるくらいだ
682:デフォルトの名無しさん
08/02/24 00:01:06
言語は簡単でいいんだよ
683:デフォルトの名無しさん
08/02/24 00:40:01
27歳になってJAVAで開発チームに入る事になりました。
今までの業務開発経験は、COBOL3年あとはVBAぐらいですかね・・。
4年程前にSUNJAVA1.4の資格は取得したんで基礎的な事は大丈夫と思います。
実際に業務で役に立つ為に、他にどんな勉強しておけばいいですかね?
とりあえずTOMCATとMYSQL入れて、なんか作ってみようかなと思ってますが、
業務レベルでは全く無意味なんでしょうね・・
684:デフォルトの名無しさん
08/02/24 00:52:48
tomcatとmysqlが何で無意味なの?普通に業務レベルで使うのに。
とりあえずeclipseで簡単なwebアプリでも作ってみたら?
685:683
08/02/24 01:06:18
やっぱ業務でも使うんですね。
いや、簡単な事やっても業務レベルでは通じないかなぁと。
でも基本的な事分かってると大分入りやすいですよね。
適当にDB構築してWEBアプリ作ってみます。
686:デフォルトの名無しさん
08/02/24 01:32:01
適当にDB構築できちゃうレベルなら心配無用だと思うけど…
687:デフォルトの名無しさん
08/02/24 08:34:52
class calcException extends Exception {
}
public class sample53 {
public static void main(String[] args) {
try {
calc(2,2);
}catch (calcException e) {
System.out.println("calcExceptionが"+"throwされました");
}
}
static void calc (int i,int j) throws calcException {
if(i == j) {
calcException ce = new
calcException();
throw ce;
}
System.out.println(i*j);
}
}
これなんですけど、
if(i == j) {
calcException ce = new
calcException();
throw ce;
この部分でどういう処理を行っているのですか?
688:デフォルトの名無しさん
08/02/24 08:50:07
普通に例外なげてるんじゃね
689:デフォルトの名無しさん
08/02/24 09:23:16
throw ceってなんですか?
もしiとJの値が同じなら、オブジェクトを作成して、その後はなんですか?
690:デフォルトの名無しさん
08/02/24 09:30:37
だから例外投げてるんだよ
691:デフォルトの名無しさん
08/02/24 10:10:44
たびたび申し訳ないが、
static void calc (int i,int j) throws calcException
この部分はこの式は例外を投げる式ですよってこと?
692:デフォルトの名無しさん
08/02/24 10:14:30
このメソッドはcalcExceptionを投げ得ますよってこと。
693:お
08/02/24 10:27:48
>>660
[追加します]とありますが全部変えてしまいました。全部どう記述するのか聞きたいです。
694:デフォルトの名無しさん
08/02/24 10:33:26
>>693
つ URLリンク(okwave.jp)
695:デフォルトの名無しさん
08/02/24 11:13:00
>>692ありがとうございました><
696:お
08/02/24 11:30:48
wbemの場所ってわからないことないですか?
697:お
08/02/24 11:36:33
設定方法わかりませーん
698:デフォルトの名無しさん
08/02/24 11:57:29
①F8押す→3秒待機→F8押す
③この処理を500回ループした後
②F7押す→1秒待機→F8押す→1秒待機
④処理②を30回繰り返し①に戻る
こういうプログラムはjavaだったら可能でしょうか?
ゲームに使うのでVBみたいにF8押したことにしますってのではなくて
実際に押すことが重要なんです
699:デフォルトの名無しさん
08/02/24 12:09:13
>>698
>>96
VB が何をやってるのか知らんが、
人がキーを押したときと同じような結果をシミュレートすることは可能。
// 自動演奏みたいにキーボードが動く……誰かそういうヤツを作ってください。
700:デフォルトの名無しさん
08/02/24 12:16:39
VBではSENDKEYなるメソッドがあり
それを使うとたとえば
F8押した時、1+1の処理をするというプロシージャがあった場合
SENDKEYによって1+1を呼び出すことはできますが
実際にF8を押すという動作がウィンドウズ内で行われている
というわけではないようです
(押した時のようにキーをへこませるといわけではありません。念のため)
ようするに、キーを押した後の処理ではなく、キーそのものを押したことを
キーを押さずにウィンドウズに認識させたい
701:お
08/02/24 12:22:46
設定方法わかりませーん
702:デフォルトの名無しさん
08/02/24 12:25:25
>>700
なるほど。イベントのトリガーとして登録させてるようなものですかね。
ということで、96 を実行することで少しは感動してもらえそうな予感。
703:デフォルトの名無しさん
08/02/24 12:31:18
どうやらjavaなら可能なようですね
勉強します
704:11
08/02/24 12:31:27
画面A,B,Cとあり画面CのB画面終了ボタンを押すとB画面のみ終了させたいと考えてますが
さっぱりわかりません。どなたかご教授願います。
/*ソースここから*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Gamen extends JFrame implements ActionListener{
private JButton b1 = new JButton("B画面表示");
private JButton b2 = new JButton("終了");
private JButton b3 = new JButton("C画面表示");
private JButton b4 = new JButton("B画面終了");
public void GamenA() {
getContentPane().setLayout(new FlowLayout());
getContentPane().add(b1);
getContentPane().add(b2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("A画面");
setSize(200, 100);
setVisible(true);
b1.addActionListener(this);
b2.addActionListener(this);}
public void GamenB() {
getContentPane().setLayout(new FlowLayout());
getContentPane().add(b3);
getContentPane().add(b2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("B画面");
setSize(200, 100);
setVisible(true);
b3.addActionListener(this);
b2.addActionListener(this);} //続きます
705:704
08/02/24 12:33:21
すみません>>704は11さんとは無関係です。 続き
public void GamenC() {
getContentPane().setLayout(new FlowLayout());
getContentPane().add(b4);
getContentPane().add(b2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("C画面");
setSize(200, 100);
setVisible(true);
b4.addActionListener(this);
b2.addActionListener(this);}
public void actionPerformed(ActionEvent e){
if(e.getSource() == b1){
Gamen bb = new Gamen();
bb.GamenB();
}else if(e.getSource() == b2){
System.exit(0);
}else if(e.getSource() == b3){
Gamen cc = new Gamen();
cc.GamenC();
}else if(e.getSource() == b4){
//B画面終了ボタンを押してBのみ画面を終了させたい。
}
}
public static void main(String[] args) {
Gamen aa = new Gamen();
aa.GamenA();
}
}
/*ソースここまで*/
よろしくお願いします。
706:デフォルトの名無しさん
08/02/24 12:34:45
>>698
Javaはある程度のことしかできないし、そういうものであれば既存のソフトで腐るほどありますよ。
自分でやりたいなら何らかのスクリプトを使うことをおすすめしておきます。
707:デフォルトの名無しさん
08/02/24 12:43:52
一つ一つのフレームは、その他のフレームのインスタンスを持ってないから現状では無理。
閉じさせるフレームのインスタンスを持たせて、それでactionPerformedでdisposeしてやれば実現できるけど・・・継承とかそこらへんの意味を見直した方がいいと思うよ。
708:705
08/02/24 12:53:30
>>707様
ありがとうございました。
勉強しなおしてきます。
709:638
08/02/24 13:30:03
>>639
業務なのでスタックとレースはちょっと貼れません・・・
実際に発生している問題は
パターン1
setStringでパラメータを19個設定
検索ヒット件数が10件以下
→問題なし
パターン2
setStringでパラメータを19個設定
検索ヒット件数が11件以上
→ResultSetでlastや、11件目のnextで例外発生
スタックとレースに配列の範囲外を指定(詳細19)というエラーが出力される。
※パラメータを15や11にした場合も同様に(詳細15)のように出力される。
パターン1と2で使用しているSQLは全く同一。
パターン1と2の違いはパラメータの1つの日付の範囲を数ヶ月広げているだけ。
パラメータを全て直接SQLに埋め込んだ場合、データが件数分正しく取得できます。
パラメータに上限とかあるのでしょうか?
SQLはそれなりに大きいです。100行程度。
710:お
08/02/24 14:16:01
設定方法わかりませーん
711:デフォルトの名無しさん
08/02/24 14:16:23
>>709
Oracle なら、詳細19とか詳細15とかマニュアル嫁
それの何処に配列が出てくるのか謎
712:デフォルトの名無しさん
08/02/24 14:18:34
問題ない部分だけの抜粋でもいいからスタックトレース貼ったらどうか。
例外は本当にOJDBCで出てるのか?
713:638
08/02/24 14:29:54
ResultSetやPreparedStatementをデバッガで除くと、
設定したパラメータが正しい内容で格納されているのは確認しています。
出力される例外はArrayIndexOutOfBoundsExceptionです。
ここでパラメータの数が「詳細 パラメータ数」と表示されます。
>>711
まず、SQLExceptionじゃないです。
上記通り、19とか15はパラメータの総数が出力されます。
謎ですが。
>>712
そもそも業務で外部接続できないので貼れません・・・
例外は、ResultSetのnextが11回目に呼び出されたタイミングで発生します。
ResultSetの処理の中でArrayIndexOutOfBoundsExceptionで死亡します・・・
714:デフォルトの名無しさん
08/02/24 17:02:57
test
715:ちんこ ◆GbXlaaQNk.
08/02/24 17:05:15
固定長*可変長の配列を作りたいです。
(i方向が固定でj方向が可変、初期は空)
import java.util.*;
public class Test2{
public static void main(String[] args){
ArrayList<Integer>[] a = new ArrayList<Integer>[10];
for(int i=0; i<a.length; i++){
a[i] = new ArrayList<Integer>();
}
a[0].add(3);
System.out.println(a[0]);
}
}
こう書きましたがエラーが出ます。
どこがおかしいのでしょうか?
716:ちんこ ◆GbXlaaQNk.
08/02/24 17:05:45
age
717:デフォルトの名無しさん
08/02/24 17:07:30
固定長のちんこなんて要りません
718:デフォルトの名無しさん
08/02/24 17:09:04
1~nの整数の順列をすべて表示するプログラムを書いてみたのですが
もっと簡単にやる方法とかここはこうしたらいいとかあったらアドバイスお願いします
import java.util.*;
class PermutationTest {
public static void main(String[] args) {
Permutation perm1 = new Permutation(4);
perm1.PrintPermutation();
return;
}
}
class Permutation {
private int N;
private int[] ans;
Permutation(int N){
this.N = N;
this.ans = new int[N];
}
void PrintPermutation() {
int[] a = new int[N];
for (int i = 0; i < N; i++) {
a[i] = i+1;
}
this.subPrintPerm(a,0);
}
続く
719:ちんこ ◆GbXlaaQNk.
08/02/24 17:09:27
まぁまぁそういわず。
なんでエラーが出るのかさっぱり分からなくてね。
720:デフォルトの名無しさん
08/02/24 17:09:46
>>718の続き
private void subPrintPerm(int[] a, int idx) { // 配列a[]から1つ取り出して残りで再帰呼び出し
if (a.length == 1) {
ans[idx] = a[0];
ansを表示;
return;
}
for (int i = 0; i < a.length; i++) {
int[] b = new int[a.length-1];
ans[idx] = a[i];
int j=0;
while (j < b.length) {
if (j < i) {
b[j] = a[j];
} else {
b[j] = a[j+1];
}
j++;
}
this.subPrintPerm(b,idx+1);
}
}
}
721:デフォルトの名無しさん
08/02/24 17:10:15
>>715
>>574-576
722:ちんこ ◆GbXlaaQNk.
08/02/24 17:16:06
>>721
既出でしたね。
でもそのレスを読んでも分かったよな分からんようなです。
具体的にどうすればいいか示してもらえませんか?
723:デフォルトの名無しさん
08/02/24 17:46:20
今まで書いたソースを消してクソして寝ろ
そして二度とブラウザを開かない
724:ちんこ ◆GbXlaaQNk.
08/02/24 17:47:03
>>723
分からないんだろ?そういえばいいのにw
725:ちんこ ◆GbXlaaQNk.
08/02/24 17:58:50
どう考えてもおれのコードと>>574のコードは問題点が違います。
おれが書いた>>715のコードはどこがミスがあるのか
指摘出来る人はいませんか?
726:デフォルトの名無しさん
08/02/24 18:17:40
>715
ジェネリックスを使用したList<E>の配列は作れない、言語仕様的に。
したがって、int[][]のように2次元配列にするか、List<List<Integer>>のようにListにListを入れるべし
727:デフォルトの名無しさん
08/02/24 18:21:32
ArrayList入れたいのかInteger入れたいのかはっきりしろ。
728:デフォルトの名無しさん
08/02/24 18:23:55
可変長のちんこ入れたいです。
729:デフォルトの名無しさん
08/02/24 18:49:14
ArrayList<Integer>[] a = new ArrayList[10];
でいいんじゃね?
730:ちんこ ◆GbXlaaQNk.
08/02/24 18:54:02
現在作成中の
ダイクストラ法による最短経路探索プログラムです。
URLリンク(www.uploda.org)
うpしました。
これでListを使えると便利なので使いたいと思ったのですが、
具体的に今findShortestPath @ MainPanel
というのを実装しています。
ここで、toArray周辺でエラーが出て、どういう事だかさっぱり分かりません。
エラーの原因が分かる人は教えてください。
731:デフォルトの名無しさん
08/02/24 19:06:16
730 名前:あぼ~ん[あぼ~ん] 投稿日:あぼ~ん
732:ちんこ ◆GbXlaaQNk.
08/02/24 19:08:57
さっぱり分からない。
733:デフォルトの名無しさん
08/02/24 19:34:33
カレントディレクトリを移動してからEXEを実行したいのですが、下のように書いてもhoge.exeが実行されません。
どう書けばよろしいでしょうか?
Runtime.getRuntime().exce(new String[]{"cmd.exe","/C","cd C:\hoge","hoge.exe"})
hoge.exeが自分のルートにファイルを出力する為、カレントディレクトリを移動しなければならず
この処理を含む実行ファイルをhoge.exeのフォルダに置くのは避けたいです。
734:デフォルトの名無しさん
08/02/24 19:37:52
ProcssBuilder にカレントディレクトリ指定できるものがあったとオモ
735:デフォルトの名無しさん
08/02/24 20:04:50
JMenuBarの中にメニューを2つ追加し、それぞれのメニューの中に
同じ名前のJMenuItem、同じActionListenerをセットした場合、
それぞれのMenuItemが選択された際の処理を変えることは可能でしょうか
ネットや書籍を調べてみたところ、JMenuItemが選択されたイベントが発生した場合、
そのイベントの名前をgetActionCommandで取得し、条件分岐を行っていましたが
同じ名前のItemが存在する場合の条件分岐方法を見付けることができませんでした
諦めてそれぞれのItemに別々のActionListenerクラスをセットするしかないのでしょうか
736:デフォルトの名無しさん
08/02/24 20:07:51
getSourceとJMenuItemを==で比較するという手もある
737:デフォルトの名無しさん
08/02/24 20:21:18
同じ名前のJMenuItemってのが設計おかしくねえか?
見た目が同じだとしても場所とか違う識別子にはなるだろ
738:デフォルトの名無しさん
08/02/24 20:22:28
マルチキャストソケットを利用した、簡易チャットルームの
ようなものを作成しているのですが、現在接続中のユーザーを
表示させる部分がうまくいきません。
IPで表示させるのですが、取得の方法が悪いのでしょうか?
ユーザー表示部分だけなので、宿題スレでなくこちらで質問させて
いただきました。よろしくおねがいします。
URLリンク(rg550.hp.infoseek.co.jp)
739:デフォルトの名無しさん
08/02/24 20:30:45
うまくいかないでは解らん。
例外が発生するのか、処理がそこを通らないのか、ちゃんと情報を出せ。
あと、直リンできねーぞ
740:デフォルトの名無しさん
08/02/24 20:50:37
>>734
レスありがとうございます。
できればRuntime.getRuntime().execでやりたいと思うのですが、無理でしょうか?
やはりjdk1.5ならProcssBuilderを使った方が良いのかな・・・。
741:デフォルトの名無しさん
08/02/24 21:02:36
>>739
失礼しました。
特にエラーが出て処理が停止するというこはなく、
表示ボタンを押してもnullが返ってくるため
ユーザーのIPが上手く取得できていないのでは
ないかと思っています。
URLリンク(rg550.hp.infoseek.co.jp)
の217番にUPしてあります。
742:デフォルトの名無しさん
08/02/24 21:09:58
>741
System.out.println( "ユーザー表示ボタンが押されました" );
って行は通っているのでOK?
あとメッセージの表示は問題ない?
System.out.println( "アドレスを新規登録しました" );
って行は通ってないのか?
743:デフォルトの名無しさん
08/02/24 21:24:27
tomcat5.5
eclipse
を使用してwebアプリを作ろうと思っています。
一つのプロジェクトで複数のTomcatを動かそうと思っています。
この場合、ルートディレクトリが複数で
ソースの出力先フォルダ一つしか設定できません。
ということは片方のルートディレクトリにしか
サーブレットのクラスは置けないため、
片方のtomcatからしかソースを参照できません。
こういった場合どうすればよいでしょうか。
744:デフォルトの名無しさん
08/02/24 21:38:05
早速見ていただきありがとうございます。
>>742
>System.out.println( "ユーザー表示ボタンが押されました" );
の部分はシステムコンソールに表示されているため
通っているものと思われます。また、メッセージも
""で囲まれている部分はきちんと表示されています。
>System.out.println( "アドレスを新規登録しました" );
この行もシステムコンソールでは表示されているので
通っていると思うのですが・・。
745:デフォルトの名無しさん
08/02/24 21:39:48
すまんがだれか、>>743をエスパーしてくれ。
何となく解る気もするが、
なんで、エクスポートしたwarファイルをもう一つのTomcatに置くのではダメなのかが解らない。
746:デフォルトの名無しさん
08/02/24 21:43:33
>>743
何のためにそれをするのか知らないがeclispeはtomcatのラウンチャーじゃない
tomcatは別途立てて、そこにDeployするべき
あとeclipseの1プロジェクトで複数のWebアプリケーションを動作させようというのも間違い
プロジェクトを分けなさない
747:デフォルトの名無しさん
08/02/24 21:50:47
>744
"現在の接続ユーザーは " + userlist + "\n"
の部分だが、JTextAreaにまったく反映されないのか?
中身だけが空なのか、どっちだ?
748:デフォルトの名無しさん
08/02/24 21:53:00
JDK 6 Update 4が落とせないんですが何が問題なんでしょうか。
エラーは承認することができないという内容で、いくつかの環境で試しましたが同様です。
749:デフォルトの名無しさん
08/02/24 21:53:30
>747
userlistの中身がからで
現在の接続ユーザーはnullです という表示になっています。
750:デフォルトの名無しさん
08/02/24 21:56:26
>>749
Chatroom#userlistに何も代入していない
751:デフォルトの名無しさん
08/02/24 22:02:11
>750
回答ありがとうございます。
userlist.add(clientAddr);
上記の文でアドレスが代入されるものと思っていたのですが、
この文の書き方では代入されていないということでしょうか?
752:デフォルトの名無しさん
08/02/24 22:03:12
それはローカル変数のuserlistであってChatroom#userlistではない
753:デフォルトの名無しさん
08/02/24 22:28:32
>752
ありがとうございます。入ってると思ってたものが
別のものだったのですね。
助かりました、ありがとうございました。
754:デフォルトの名無しさん
08/02/24 23:29:39
Class Parent {
private int val;
public getVal() { return val; }
public setVal(int val) { this.val = val; }
public Parent clone() {...}
}
みたいに、clone() を実装したクラスParentがあったとして、
これを継承した子クラス Child を作ります。
で、この Child でも clone() を実装したいのですが、
その Child#clone() はどうやって実装するのが普通ですか?
public Child clone() {
Child c = new Child();
c.setVal ( this.getVal() );
...
return c;
}
と、親クラスの Parent#clone() の存在を完全に無視してもいいもんですか?
これだとどうもスマートじゃないような気がして、protected なコンストラクタを
親クラスに追加する、なんて方法も考えたんですけど、
典型的な手法があるのならばご教示ください。
755:デフォルトの名無しさん
08/02/24 23:35:47
>>754
class Parent implements Cloneable {
private int val;
public getVal() { return val; }
public setVal(int val) { this.val = val; }
public Parent clone() {
try{
return (Parent)super.clone();
} catch(CloneNotSupportedException e){
throw new RuntimeException(e);
}
}
}
class Child extends Parent {
public Child clone() {
return (Child)super.clone();
}
}
756:デフォルトの名無しさん
08/02/24 23:40:36
Javaの勉強始めました。
アクセス就職子protectedについて理解が足りないので教えてください。
protectedつけることで、
『自分のクラス内のメソッド 又は 継承されたサブクラス内のメソッドからしかアクセスできない』
そのように直感的に感じたのですが、
間違っているようで。
public class Purotekuto {
public static void main(String[] args) {
Test21 hogehoge = new Test21();
System.out.println( "値を出力:" + hogehoge.protectedInteger );
}}
public class Test21 {
protected int protectedInteger;
Test21() {
this.protectedInteger = 0;
}
public void setValue( int value ) {
this.protectedInteger = value;
}
public int getValue( int value ) {
return this.protectedInteger;
}}
このコードでは、main()から、クラスTest21のメンバ、protectedIntegerにアクセスできずに、
エラーか何かになると思ったのですが、普通に動きました。
自分の考えの何がまずいのでしょうか。。。
757:デフォルトの名無しさん
08/02/24 23:45:28
>754
super.clone() を使うかどうかは状況次第じゃね?
というか、普通はsuper.clone()は使えない方が多いと思う。
帰ってくるのはParentクラスのインスタンスだから、結局は値をコピーしなければならなくなるから。
758:デフォルトの名無しさん
08/02/24 23:46:09
>>754
何のための継承、何のためのオーバーライド。
何がスマートじゃないんだ。感覚的に言われてもな。
ちなみに、cloneを使うなら、Cloneable を implements すること。
// 詳しくは Clonable, Object.clone 参照。
>>756
同じパッケージからもアクセスできるから。以上。
759:デフォルトの名無しさん
08/02/24 23:47:23
>756
もう1つ条件があって、「同一パッケージ内からのアクセス」もOK
760:756
08/02/25 00:01:54
758,759 ありがとうございます。
指摘を受けて調べました。
パッケージ化しないことには、ソースはばらばらのパッケージ的な扱いと、勝手に勘違いしていました。
デフォルトのパッケージ、という扱いになるのですね。
勉強になりました。
761:デフォルトの名無しさん
08/02/25 00:09:47
と言うかデフォルトパッケージの使用は避けてくれ。
762:デフォルトの名無しさん
08/02/25 00:11:27
>>757-758
ありがとうございます。
ちょっと理解できてきました。
763:756,760
08/02/25 00:18:14
>761
というと、必ず特定のパッケージに入れることを明示することが望ましいということでしょうか。
自分今回痛い目にあったので、761の指示に従って付いてまいりますが。
764:デフォルトの名無しさん
08/02/25 00:48:09
>>763
デフォルトパッケージ以外のパッケージに属するクラスから
一切呼び出しが出来ない。(JDK 1.4 以降)
プログラミングの一般論としても
何らかの名前空間に所属させるのは
良い習慣だと思う。
765:デフォルトの名無しさん
08/02/25 01:00:16
>>754
普通はコピーコンストラクタを作る
Cloneable は Java の失敗作とジョシュアっちが言ってました
766:デフォルトの名無しさん
08/02/25 04:11:37
これからjavaを学ぼうと考えています。
JAVAのSDK沢山種類があるようですが、
どれを使用すれば良いでしょうか?
767:デフォルトの名無しさん
08/02/25 04:28:17
>>766
多分新しいのを使っとけばいいんじゃないだろうか
768:デフォルトの名無しさん
08/02/25 04:54:25
使う方のソースはそれで良いけど宣言する方のソースはアノテーション必要でしょ。
769:デフォルトの名無しさん
08/02/25 04:55:33
↑誤爆
770:デフォルトの名無しさん
08/02/25 07:44:10
SE(スタンダードエディション)でおk
771:デフォルトの名無しさん
08/02/25 08:40:00
>>733
\→\\
それと、カレントドライブの変更まではcdで出来ないけど、
その辺は大丈夫かな?
772:デフォルトの名無しさん
08/02/25 09:14:34
Timestamp型の変数から"yyyy/MM/dd"といった形の文字列で
値を取り出すにはどうしたらよいでしょうか?
773:デフォルトの名無しさん
08/02/25 09:34:57
String s = new SimpleDateFormat("yyyy/MM/dd").format(timestamp);
774:デフォルトの名無しさん
08/02/25 09:37:02
>>772
SimpleDateFormat("yyyy/MM/dd")でformatすれば?
775:デフォルトの名無しさん
08/02/25 09:44:18
質問です。
シングルトンを多数作りたいんですが、
private static Singleton instance = new Singleton();
public Singleton getInstance(){return instance;}
private Singleton(){}
といったおきまりパターンを各クラスに書かないと行けませんが面倒です
AbstractSingletonを継承したらgetInstance()で各シングルトンのインスタンスが取れるようになる
みたいな事ができれば便利ですけど、staticフィールドなのでそれもママなりません。
なんか旨い方法はありませんか?
776:デフォルトの名無しさん
08/02/25 09:49:44
ド素人質問ですみません;;
テキストフィールドに入力された文字列を
ボタンが押されたときに変数com_defに入力する
プログラムを作りたいのですが、
下のようにやるとローカル変数 i は内部クラスからアクセスされます。final で宣言される必要があります。
とエラーが出ます。
対処法を教えてください。よろしくお願いします。
text[i] = new JTextField("",2);
button1[i] = new JButton("変更");
button1[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
int com_def = Integer.parseInt(text[i].getText());
System.out.println(""+com_def);
}
});
777:デフォルトの名無しさん
08/02/25 10:01:15
>>773, 774
ありがとうございます。
できました。
778:デフォルトの名無しさん
08/02/25 10:11:39
>>775
eclipse ならテンプレートを使って、少し楽が出来る。下のほうに例がある。
URLリンク(www.eclipsewiki.net)
>>776
メソッドとその内部クラスとで共用で使う変数は、メソッド内 final として、コンパイルを通す。
他にも方法はあると思うけど、それ以上なら、クラス内クラスにしてちゃんと定義しましょ。
779:デフォルトの名無しさん
08/02/25 16:41:22
String s = "ab" + \r + "cd" + \n + "ef";
正しく直してください。
780:デフォルトの名無しさん
08/02/25 16:43:38
String s = "ab\rcd\nef";
直しました。
781:デフォルトの名無しさん
08/02/25 16:43:54
String s = "ab\rcd\nef";
782:781
08/02/25 16:44:30
かぶった...orz
783:デフォルトの名無しさん
08/02/25 16:46:12
780,781 ありがとうございます。
784:デフォルトの名無しさん
08/02/25 16:47:23
qa3808666 かぶってる...
785:デフォルトの名無しさん
08/02/25 17:24:32
それはかぶってるんじゃなくてマルチポストだろう…
786:デフォルトの名無しさん
08/02/25 17:47:04
tomcatのjsp-examplesにあるFORM認証のサンプルについて質問です。
まず操作を1->5の順で行った結果を書きます。
1.URLリンク(hostname:port)にアクセスするとFORM認証機能が働きlogin.jspが表示される。
2.login.jsp -> Username/Passwordを間違えて入力->error.jspが表示される。
3.error.jsp -> "try again"をクリック -> login.jspが表示される。
4.login.jsp -> Username/Passwordを正しく入力 -> login.jspが再表示される。
5.login.jsp -> Username/Passwordを正しく入力 -> HTTPステータス 404 - /jsp-examples/security/protected/j_security_check
4でUsername/Passwordを正しく入力しているので1のindex.jspに飛ぶことを期待したのですが、login.jspが再表示されました。
login.jspの出力内容がブラウザに表示された時に、ソースを表示してみると
□2のlogin.jsp
<form method="POST" action='j_security_check;jsessionid=74394043647C95BAC48CC67ECDFFEFB7' >
□4のlogin.jsp
<form method="POST" action='j_security_check' >
比較してみると、4のソースではセッションIDが付加されていない為に、本来の遷移先のURLを見失ってしまっている、ということでしょうか?
jspソースファイルを見ると、login.jspもerror.jspもresponse.encodeURL()の結果をセットしていました。
login.jspのリクエスト箇所
<form method="POST" action='<%= response.encodeURL("j_security_check") %>' >
error.jspからlogin.jspを表示するリンク箇所
<a href='<%= response.encodeURL("login.jsp") %>'>again</a>.
今のままだとerror.jspからブラウザの戻るボタンで前画面(login.jsp)に戻らないと、認証後に期待したURLへ遷移してくれません。
error.jspにあるアンカータグでlogin.jspに戻った時も同じ動きにさせたいのですが、どのように修正すれば対応できるでしょうか?
787:786
08/02/25 17:51:39
携帯のブラウザでも見るので「JavaScriptは使わない」という前提でお願いします。
788:デフォルトの名無しさん
08/02/25 18:37:01
自作のある圧縮アーカイブの解凍ストリームを作ろうと思っています。
その圧縮形式はライブラリを持っており、InflaterInputStreamを利用すると比較的に楽に実現できると考えたのですが、
read()やread(byte[],int,int)など、いずれにせよユーザーが決めるバッファのサイズで解凍を行う必要があるため、今回のような解凍する側で単一バイト読み込み時に出力されるデータを決めるライブラリを持った圧縮形式ではどのように行うべきなのか分かりません。
解凍したデータもバッファリングして、ユーザーのサイズに合わせて出力すれば実現はできると思うのですが、何か他にいい方法はないものかと思い質問しました。
Inflaterのソースも読んでみたのですが、肝心の部分はnativeメソッドになっており結局どのような実装なのか分かりませんでした。良い方法がございましたら教えてください。
789:デフォルトの名無しさん
08/02/25 19:24:42
>>788
>解凍したデータもバッファリングして、ユーザーのサイズに合わせて出力すれば実現はできると思うのですが
それしかないのでは・・・
1バイトだけ返すread()を実装すればあとはデフォルトの実装があるので、
class MyInputStream extends InputStream {
private byte[] buf;
private int pos, size;
public int read() throws IOException {
if (pos == size) {
// 解凍データをbufに詰めてsizeをセット
pos = 0;
}
return buf[pos++];
}
}
これだけでも一応動くよ
InflaterInputStreamをどう利用しようとしてるのかよくわからんが、あれはzlibストリーム専用
790:789
08/02/25 19:27:03
×return buf[pos++];
○return buf[pos++] & 255;
でした・・・
791:デフォルトの名無しさん
08/02/25 20:59:08
>>775
邪道かもしれんが。 なんか旨い方法、ということなら。
Enum の中に書く定数は1つ1つがシングルトンだ。
全定数に共通のメソッドも振る舞いが異なるメソッドも実装できるぞ。
792:ちんこ ◆GbXlaaQNk.
08/02/25 21:04:53
Javaにはプリミティブと参照が混在しています。
Listなどを使う時には参照型しか使えないのですが、
いっそすべてのintをIntegerに書き換えた方がいいでしょうか?
プリミティブ型の扱いをみなさんどうしていますか?
おれはRubyからJavaに来たので数字が参照型じゃないというのに
すごく違和感を感じます。ましてや混在しているというのは非常事態です。
今すごく悩んでいます。
みなさんがどうしているかを知りたいです。
793:デフォルトの名無しさん
08/02/25 21:09:13
>>789
ネットに繋がらなくて返事が遅くなってしまいました。
聞いていた立場で申し訳ないです。
Inflaterを利用しようと思ったのは、形式に共通点が多く、いくつかをオーバーライドすればできそうな気がしたためです。
確かに本来の用途から外れますので使用すべきではありませんね。
やはりバッファかますことにします。
親切にどうもありがとうございました。
794:デフォルトの名無しさん
08/02/25 21:10:35
>>792
せっかくプリミティブ型があるのにわざわざオブジェクトにする必要はないと思います。
コストの問題ももちろんですが、何より扱いにくいです。
795:デフォルトの名無しさん
08/02/25 21:18:04
>>792
Integer って、オブジェクトだとは言っても、中のデータを書き換えられないから不便だよ。
List などには int を入れても auto boxing されるんだから、int のままでいいんじゃないかなあ。
みなさんがどうしているか、に関しては、「気にしていない」だと思う。
796:デフォルトの名無しさん
08/02/25 21:18:13
>>792
そういう言語だから受け入れるしかない
Rubyは理想を重視した分遅くなってるし
C#はプリミティブ型の扱いを変えて両立させてるけどその分複雑になってたりする
797:デフォルトの名無しさん
08/02/25 21:42:46
Strint[] a = {"A","B"};
aの要素数を1にするtruncateみたいなものはありませんか?
798:デフォルトの名無しさん
08/02/25 21:54:32
配列じゃなくてリストじゃ駄目なん?
799:デフォルトの名無しさん
08/02/25 22:01:35
>>798
Strint[] a; という配列でやりたいです。
Strint[] a = {"A","B"};
ここで処理して"A"が不要だと分かって、
a = {"B"};
とすればよいのでしょうか?
以前のaはa = {"B"};する直前にガベコされるのでしょうか?
それとも内部でtruncateみたいなことされて、aのアドレスは変わらないのでしょうか?
800:ちんこ ◆GbXlaaQNk.
08/02/25 22:04:44
>>795
配列のautoBoxingがないです。
例えば
void methodA(int a)
にInteger型を放り込んだらこれはBoxingされますが、
void methodB(int[] a)
にInteger[]型を放り込むのはエラーになります。
配列からListを作る時にも参照型が強制されるので不利かと思いました。
(例えばArrayList<int>はエラーになる)
>>796
JRubyもダメでしょうか?(速度に関して)
801:デフォルトの名無しさん
08/02/25 22:05:33
>>799
a = {"B"};
でよい。{"A","B"}はGCまかせ。
ちなみにGCは、不要になったら即実行される訳じゃないよ。
802:デフォルトの名無しさん
08/02/25 22:09:09
>>801
ありがとうございます。ガベコに任せます。
803:デフォルトの名無しさん
08/02/25 22:09:22
>>801
それ、初期代入でしかできないんじゃね?
804:デフォルトの名無しさん
08/02/25 22:12:12
>>803
そうでした。
Strint[] a; という配列でやりたいです。
Strint[] a = {"A","B"};
ここで処理して"A"が不要だと分かって、
Strint[] aTemp = {"B"};
のように、もう1つ変数が必要ですか?
805:デフォルトの名無しさん
08/02/25 22:16:45
aTempの要素数はどうするの?
ArrayListを作って必要な要素だけ追加していって後で配列に変換したほうが早い
配列でやるにしてもどうせ同じようなことを自分でやることになる
806:デフォルトの名無しさん
08/02/25 22:17:13
String[] a = {"A", "B"};
a = new String[1];
a[0] = "B";
でよくね?
807:798, 803, 806
08/02/25 22:18:52
>>805
んだなぁ。
ArrayList<String> a = new ArrayList<String>();
a.add("A"); a.add("B");
a.remove(0);
とかでいいと思った。
808:デフォルトの名無しさん
08/02/25 22:25:09
>>806
そうできるんですね。ありがとうございます。
>>807
STLってまだよく分からないんです。でもありがとうございました。
809:デフォルトの名無しさん
08/02/25 22:27:18
STLw
それはおいといて,>>806でいいんだったら
String[] a = { "B" };
と全く変わらないよ
810:798, 803, 806
08/02/25 22:28:13
STLはC++のライブラリのことじゃねーの?w
ちなみに配列への変換は
String[] array = a.toArray(new String[a.size()]);
でいいと思う
811:デフォルトの名無しさん
08/02/25 22:51:19
>>807
配列モドキとコレクション
List<String> list = Arrays.asList("A", "B");
System.out.println(list);
list = ArrayList<String>(list); // 編集可能化
list.remove(0);
System.out.println(list);
812:デフォルトの名無しさん
08/02/25 22:57:41
>>808
おまいは勘違いしてる。Javaの配列はサイズを変更(Cで言うところのrealloc)出来ない。
配列限定で長さを変えるには、新しい別の配列を作ってコピーするしかない。
今まで挙がってた例は全て新しい別の配列を作っているだけ。
長さが変わる場合、通常はArrayList等のList系のコレクションを使い、
どうしても配列が必要な場面でだけtoArray()で変換する。
813:デフォルトの名無しさん
08/02/25 23:07:52
>>800
配列は既にオブジェクト(変数には参照が収められる)だから、auto Boxing はいらないし、
List にも add できる。
int[] を要求している所に Integer[] を放り込むとエラーになるのは型が違うから。
放り込めることを期待するのは
int に対応するのが Integer、int[] に対応するのが Integer[] という感覚があるからだろうが、
この4つの中で、int だけがプリミティブ、Integer だけが値変更が不便なので、
Integer は int をオブジェクトにするためだけにある特別な存在で、
対称性はあまり無い、と考えた方がいい。
814:デフォルトの名無しさん
08/02/25 23:30:24
>812
変更不可なgetterで結構toArray使わんか?
815:デフォルトの名無しさん
08/02/25 23:32:42
一件教えてください。
main()の中で記述していた処理を、
ほかのファイルの関数に移動したいのですが、どのようにすればよいかわからず、教えてほしいです。
(サブルーチンで処理をするような考え方で。)
c言語で言えば、
main(){
一連の処理のまとまり1
一連の処理のまとまり2
}
となっていたものを
main(){
func1(渡す必要のある変数)
一連の処理のまとまり2
}
func1(引数){
一連の処理のまとまり1の代替
必要があればreturn文
}
といった感じ(型とか細かいことは別として。)に分割したいのですが。
今の自分の知識では、クラスを作って、メソッドを作って、
メソッドをインスタンス化して、
仮にインスタンスが設定された変数の名前がaaaとしたら、
aaa.メソッド(引数) とするくらいしか、頭が回りません。
メソッドを利用したいだけで、インスタンス化が必要なのか疑問で、やりかたがあるような気がしまして。
よろしくお願いします。
816:デフォルトの名無しさん
08/02/25 23:39:52
>>815
別クラスにする必要がないのなら、別クラスにしなくていいんじゃない?
mainのほかにクラスメソッド書けばよい。
他からも使いたいけど、インスタンスを作る意味がないのなら、ユーティリティクラスという手もある。
java.lang.Mathみたいなクラス。メソッドは全て、クラスメソッドとして定義する。
817:デフォルトの名無しさん
08/02/25 23:45:00
>>815
>メソッドを利用したいだけで、インスタンス化が必要なのか
オブジェクト指向の世界では必要だという前提なんだよ
原則としてすべてのメソッドはどっかのクラスに属していて、インスタンスを介して使用する事が基本
逆に言えばクラスに属するけど、インスタンスを介さないmainメソッドの方が特殊
慣れるまで、メリットを感じるまでは解らんと思うが、最初はそういう世界と思うしかない
818:デフォルトの名無しさん
08/02/25 23:47:04
>>815
メソッドはいくら分割してもメソッドだ。
その例だとオブジェクトになるのは (渡す必要のある変数) ってやつだけだな。
main() で
渡す必要のある変数の型 obj = new 渡す必要のある変数の型();
して、
obj.func1()
819:デフォルトの名無しさん
08/02/25 23:47:46
>>809
Strint[] a = {"A","B"};
ここで処理して"A"が不要だと分かって、
Strint[] a = {"B"};
↑aが2重定義になるので>>806の方法にしました。
820:デフォルトの名無しさん
08/02/25 23:49:18
>>815
// メインクラス(Main.java)
public class Main {
public static void main(String[] args){
Sample.func();
}
}
// サブルーチンクラス(Sample.java)
public class Sample {
public static void func(){
// ↑staticでメソッドを宣言すれば<クラス名>.<メソッド名>でアクセスできる。
System.out.println("Hello, world!");
}
}
821:815
08/02/25 23:49:35
815です。
レスありがとうございます、816,817。
>クラスメソッド(816)
クラスメソッドの概念を知りませんでした。ありがとうございます。
>オブジェクト指向の世界では必要だという前提なんだよ(817)
その考えを理解できるように努力していきます。
指摘ありがとうございます。
822:815
08/02/25 23:51:52
>820
レスポンス記述している最中に更新されたようで、失礼しました。
816のおっしゃる、クラスメソッドの具体例ですね。
わかりやすい説明ありがとうございます。
823:デフォルトの名無しさん
08/02/25 23:51:53
>>815
>ほかのファイルの関数に移動したい
>サブルーチンで処理をするような考え方で
>メソッドを利用したいだけで
インスタンス化したくないなら当然インスタンス化は不要だ。
824:デフォルトの名無しさん
08/02/25 23:58:44
>>815
他の方が指摘してらっしゃるように、
メソッドは、必ずしもオブジェクトに関連付ける必要はありません。
蛇足。Javaでは「他のファイルに記述する」という概念はありません。
あくまでも、クラスを分けるかどうか、です。
それゆえか、クラス内クラスである内部クラスが4種類あります。
825:ちんこ ◆GbXlaaQNk.
08/02/26 00:30:07
JRubyやってみようと思う。
826:815
08/02/26 00:32:49
815です。
821内の『>818』は『>820』の間違いですね。失礼しました。
>818
今コーディングして確認しました。
クラスメソッドを直接呼び出すか、
通常に、通常のメソッドをインスタンス化して呼び出すかですね。
>823
>インスタンス化したくないなら当然インスタンス化は不要だ。
いま確認とりたいと思いコーディングしてみたのですが、
ほかの方が示された用にstaticにするほかに方法あるのでしょうか。
staticなメソッドにするか、インスタンス化するか以外で試せませんでした。
staticにすることをおっしゃっているのでしょうか。(私の821,822のように時間差?)
>824
内部クラス。理解できるよう精進します。Tipありがとうございます。
自分の質問に対して、
816の考え方、817の考え方、の二種類の意見を持つ方に分かれるように感じました。
オブジェクト化するべきとの考えと、ユーティリティメソッドでいいのではという考えと、です。
このどちらを選ぶかは、個人やGrの考え方次第ということなのでしょうか?
それとも、オブジェクト指向的には後者の方が、望ましいが、面倒な手続きは好まれないので、前者が使われるということなのでしょうか。
827:デフォルトの名無しさん
08/02/26 00:42:12
>>826
おおざっぱには、
・データが主体ならオブジェクトにする。
・ロジックが主体ならクラスメソッドにする。
くらいで良いのではないかと思ってる。(無論例外は山ほどある)
828:デフォルトの名無しさん
08/02/26 00:50:08
こんばんわ。
eclipse使いはじめたのですが、eclipseに指摘されるエラーの意味がわからないので教えてください。
たとえば、まさに820のコードを、
eclipseでひとつのファイルに記述すると、
クラスSampleを別のファイルに書けといわれます。
Javaのルールなのでしょうか。
どういった原因なのか教えてください。
eclipse特有で指摘されるものなのでしょうか?
829:デフォルトの名無しさん
08/02/26 00:51:19
>>826
何を作っているのかによる。
なんらかの概念(伝票・取引みたいな業務概念や、ファイル・ウィンドウのようなシステム概念)の、
特定のひとつに対する操作であれば、インスタンスメソッドとすることが望ましい。
逆に、概念に属する全ての対象に対する操作や、そもそもその対象を作り出す操作などはクラスメソッドになる。
ただし、実際にはクラスという概念とは関連づかない操作もあり、
Javaの場合は全てのメソッドがクラスに定義されなければならないため、便宜的にクラスメソッドとする。
830:デフォルトの名無しさん
08/02/26 00:52:53
>>828
Javaのルール。
publicのクラスはファイル名=クラス名としなければならない。
なので、自動的にひとつのファイルにはpublicクラスは一つまでしか定義できない。
831:デフォルトの名無しさん
08/02/26 00:58:39
>>828
830 の通り、Javaの仕様です。
public を外すか、クラス内クラスにするか、
一応、一つのファイルに複数のクラスを記述する方法はあります。
832:デフォルトの名無しさん
08/02/26 01:03:07
828です。
830氏、831氏、すばやい回答ありがとうございます。
勉強になりました。
publicがキーワードでしたか。
833:デフォルトの名無しさん
08/02/26 01:21:48
アクセス修飾子について説明もらえませんか。
アクセス修飾子には、public, protected, privateがあり、
アクセス制御の範囲としては、上記3つのほかに、修飾なしを含めた4つがあるようです。
で、最後の修飾なしなのですが、
実際に仕事でのプログラミングや、アプリケーションの作成で、使用されるのでしょうか。
範囲が修飾ありの3つと異なるのですが、何も記述しないというのが、どうにも好きになれないみたいな。
基本的に、何らかの修飾をしましょうということは無いですか?
834:デフォルトの名無しさん
08/02/26 01:31:30
>>833
たしかに気持ち悪いが、そう決まってる以上、そういうもんだと思うしかない。
使う場面はときどきあるよ。
トップレベルクラスは、publicにしたくなければ、他に選択肢もないし・・・
835:デフォルトの名無しさん
08/02/26 01:40:22
>>833
クラスは良くパッケージデフォルトにするなぁ。
パッケージをコンポーネントと見立てて、publicがインタフェースでパッケージデフォルトが実装の詳細。
メソッドやフィールドではあまり使ったことないや。
836:デフォルトの名無しさん
08/02/26 01:55:23
はじめて手に入れたIDEがeclipseで今までCとWinSDKをエディタで何とかしようと苦労してたのが嘘みたいに
GUIなアプリケーションがさくさく書けてJavaマンセーな状態なのですが、
そろそろ他の言語ってかC++で同等の事ができるようになりたいと思い始めてます。
そんなぼくにお勧めのC++用のIDEを教えてくれませんか?
eclipseみたいにCtrl+spaceなどでガンガン補完できるようなやつで、
リファクタリングが強力なやつがよいです。
(若干スレ違い?)
837:デフォルトの名無しさん
08/02/26 02:09:29
>>836
全くスレ違い
CDT
838:デフォルトの名無しさん
08/02/26 02:46:20
>>833
派生先からだけ見えて欲しい時は多数あるけど
パッケージ内からだけ見えて欲しい時がないので
デフォルトスコープを使う機会がない。
継承・実装の階層とパッケージ階層とは全く別個のものなのに
1系統の修飾子で片付けようとしたのに無理がある。
パッケージ階層は無視するか2系統用意して組み合わせ可能にしたら良かったのに。
C#(.NET?) だと名前空間は無視するかわりに、
アセンブリ境界に対して internal で制限するかどうかを選べる。
839:デフォルトの名無しさん
08/02/26 03:20:53
>>833
そこそこ可視性があるが、言語的に最後の砦であるパッケージの境界でカプセル化してセーフ
というのがパッケージプライベートなので、とりあえず書いてみる的に使うのは、ちょうどよいのかと。
そして、とりあえず書いてみるレベルだったら、
何も修飾子を書かなくてもええじゃないか、のような乗りかと。
なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。
840:833
08/02/26 03:45:25
833です。
返信にただいた内容を元に、学習します。
>839
>なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。
この点について、初心者向けの説明をいただけませんか。
時間かけると理解が進む資料の場所もみつかるのでしょうが。
841:デフォルトの名無しさん
08/02/26 07:01:30
>>819
a = new String[]{"B"};
842:デフォルトの名無しさん
08/02/26 08:12:42
>言語的に最後の砦であるパッケージの境界でカプセル化
JDK7になったらスーパーパッケージが出来るんだけどねぇ。
JDK7は本当に完成するんだろうか。
843:デフォルトの名無しさん
08/02/26 10:47:38
>>841
ありがとうございます。それにしました。
844:デフォルトの名無しさん
08/02/26 17:19:58
出力を行うときに何でoutputstreamwriterを使わなければいけないのですか?
テキストでこの章に入るまではこれを使わなくても出力できていたわけ
ですから。
845:デフォルトの名無しさん
08/02/26 17:22:42
好きなものを使えばいいんじゃない?
846:デフォルトの名無しさん
08/02/26 17:25:51
ストリームの意味が分からん
847:デフォルトの名無しさん
08/02/26 18:24:48
>>846
ベルトコンベアみたいなものを思い浮かべろ
そこに物(データ)を置くと、それはどこかに流れていく
それが出力ストリームのイメージ (streamは流れという意味)
どこに流れていくかは、それがどんなストリームかによる
例えば FileOutputStream だったら、ファイルに書き込まれる
System.out だったら、標準出力に行く
ソケットだったらネットワーク上に送信されていく
出力先が何であるにせよ、そこにデータを書き込むというのは同じ
そういった、何かしらのデータの書き込み口というものを抽象化したのが、出力ストリーム
>>844
別にOutputStreamWriterを使わなければならないことはない
出力を行う方法は他にもいくつかあるが、
そのテキストでは単にそのうちのひとつを紹介してるだけだろう
848:デフォルトの名無しさん
08/02/26 18:42:43
>>847分かりやすいな説明ありがと!!!
849:デフォルトの名無しさん
08/02/26 18:51:52
一通りテキスト終わったら、トレーニング用のテキスト売ってるんだけど
それ買ってやったほうがいいかな?
てか、なんかJAVAの勉強しても何か実感わかないな~
やっぱ実際にもの作らんとそういうのは分からないものなのか?
850:デフォルトの名無しさん
08/02/26 18:59:39
>>849
どんなテキストか知らないけど
ウィンドウ開いたりボタン押したり絵を出したりといったGUIをやると
実感をわかせるのに効果的だと思う
851:デフォルトの名無しさん
08/02/26 19:07:46
ほうほう
852:デフォルトの名無しさん
08/02/26 19:13:33
>>849
何か自分で作ってみたいものはないの?
目標を決めるといいかもよ
853:デフォルトの名無しさん
08/02/26 20:41:10
今高校3年生だから、専門学校へ行ったときの予習をしてるんだ。
javaでどんなの作れる?とりあえず簡単なものを作ってみたい。
854:デフォルトの名無しさん
08/02/26 20:42:27
どんなものでも
855:デフォルトの名無しさん
08/02/26 20:44:02
そんなことよりもう一年勉強した方が
856:ibj
08/02/26 20:55:19
以下のソースコードで
alice1 == alice2:true
alice1 == alice3:false
Chapter5.Employee[name = null, salary = 75000.0, hireDay = Tue Dec 15 00:00:00 JST 1987]
Exception in thread "main" java.lang.NullPointerException
at Chapter5.Employee.equals(Employee.java:48)
at Chapter5.EqualsTest.main(EqualsTest.java:17)
と ぬるぽが出てしまいます。
2時間ほど考えたのですが原因がわかりません・・・。super(name)の部分で
どうにかなっていると思うのですがロジック的に正しいと思うのですが・・・。
教えていただけたら幸いです。
857:ibj
08/02/26 20:56:07
package Chapter5;
public class EqualsTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice2 = alice1;
Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);
System.out.println("alice1 == alice2:" + (alice1 == alice2));
System.out.println("alice1 == alice3:" + (alice1 == alice3));
System.out.println("alice1.equals(alice3):" + alice1.equals(alice3));
System.out.println("alice1.equals(bob):" + alice1.equals(bob));
Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 25);
Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 25);
boss.setBonus(5000);
System.out.println("boss.toString():" + boss.toString());
System.out.println("carl.equals(boss):" + carl.equals(boss));
}
}
858:ibj
08/02/26 20:56:36
package Chapter5;
abstract class Person{
private String name;
public Person(String name){
this.name = name;
}
public abstract String getDescription();
public String getName(){
return this.name;
}
}
859:デフォルトの名無しさん
08/02/26 20:56:49
専門なんて行っても勉強してる暇ないぞ。
情報系の大学いった方がまし
860:ibj
08/02/26 21:00:13
あう・・改行多すぎて書き込めない
861:デフォルトの名無しさん
08/02/26 21:44:23
>>856
Employee にも何故か name があって、equals で、
other.name.equals(name)で比較してるんじゃないかと。
862:デフォルトの名無しさん
08/02/27 00:58:27
力添えください。
URLリンク(www.nextindex.net)
に記述のあるソースの中で、
main()がthrows InterruptExceptionとしてある理由がわからないのですが、
どういう意味なのでしょうか。
教えてください。
今回実行してみた感じ、定義をしなくとも実行には問題がありませんでした。
どの部分が、InterruptExceptionを投げるといっているのでしょうか?
少なくともtry-catchの外しか考えられないのですが、どこかわかりませんでした。
863:デフォルトの名無しさん
08/02/27 01:06:39
そのページの赤文字で書かれてるThread.sleep(1000);の所が投げてる。
javadocに書いてあるから読むと良いよ。
864:デフォルトの名無しさん
08/02/27 01:16:59
文字列のサイズの取得で、
String s="あ";
2を取得する方法を教えてください。
865:デフォルトの名無しさん
08/02/27 01:18:11
s.getBytes().length
866:デフォルトの名無しさん
08/02/27 01:28:19
3になりました
867:デフォルトの名無しさん
08/02/27 01:36:09
862です。
レスありがとうございます、853。
自分もThread.sleep(...);
がInterruptedExceptionを投げる可能性があることはなんとなく覚えたのですが、
今回の場合は、try{}catch(InterruptedEception e){}、の記述によって、
メソッドがthrowsを設定する必要は内容に感じたのです。
うーん…。
868:デフォルトの名無しさん
08/02/27 01:37:35
s.length() + 1
869:デフォルトの名無しさん
08/02/27 02:06:26
"qa3813364".length();
870:デフォルトの名無しさん
08/02/27 02:17:57
>>865
GJ!
871:デフォルトの名無しさん
08/02/27 02:40:21
>>840
>>なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。
>この点について、初心者向けの説明をいただけませんか。
なんてことはない、メソッドをオーバライドすると、親クラスがそのメソッドを呼び出している場合
その挙動にも影響を与えるため、どのような影響があるか(どのように呼び出されているか)を
知る必要があるという意味で、実装が漏れてるという見方ができる。
継承よりも委譲の方が強固だが、継承のほうがお手軽なので
最初は継承を使って、事が複雑になってきたら、委譲にリファクタリングするのがアジャイル的
872:デフォルトの名無しさん
08/02/27 02:44:06
委譲めんどくせえ
873:デフォルトの名無しさん
08/02/27 02:59:17
>>867
InterruptedException を飲み込んでいいのは、
実行中のタスクのキャンセレーションポリシーと
実行しているスレッドのインタラクションポリシーが明記してあり
(あるいはそのスレッドのライフサイクルの制御権があり)、
ちょうど両者とも、InterruptedException を飲み込んでOKな場合だけ。
インタラプトを遅延させて処理を継続したい場合は
Thread.currentThread().interupt()を
処理が継続できない・放棄する場合は
InterruptedException を再投げするのが定石
874:デフォルトの名無しさん
08/02/27 03:00:53
>>867
そうだね必要ないな
たぶんどこかからコピペしてきた消し忘れかなんかだろう
ちなみに、InterruptedExceptionを揉み消すのは良くない習慣だ
875:873
08/02/27 03:13:13
間違った。
2つのポリシーが上手い具合にOKなときにやっていいのは、インタラプトの発行だった。
タスクが InterruptedExceptionを飲み込んでいいのは、
そのタスクが IntteruptedException を飲み込んでOKなポリシーを持つスレッドからしか
呼び出されないことが保証されている場合だけだな、たぶん
main() は、どこからともなくやって来たスレッドで実行されるから、
基本的に飲み込んではいけないはず
876:873
08/02/27 03:50:52
間違った。
「インタラプトすると不正な挙動をします」というポリシーを明記したタスクとして
InterruptExceptionを飲み込むならば、単に、
「インタラプトしてはいけないタスク」
+「インタラプトするとエラーメッセージを吐いて終了するっぽいメインスレッド」
=「このスレッド/タスクにインタラプトしてはいけない」
となるだけだった。さあ、どんどん飲み込みましょうねぇ
877:デフォルトの名無しさん
08/02/27 05:38:33
>>864
s.getBytes("Windows-31J").length
など。
URLリンク(sdc.sun.co.jp)(java.lang.String)
878:デフォルトの名無しさん
08/02/27 08:04:00
Beanのbooleanプロパティのgetter/setterメソッドの命名について質問です。
たとえばbeautifulというプロパティとしたら規則に従いますと
単純にisBeautiful(),setBeautiful(boolean)となります。
しかし、別の例で「上書き確認を表示する」など動詞的なbooleanプロパティ、confirmOverwriteを考える場合
isConfirmOverwrite(),setConfirmOverwrite(boolean)と、とても気持ちが悪いです。
このような場合は変数名を考え直す必要があるのでしょうか?
それともこういうもの、ということで割り切ったほうがいいのでしょうか?
879:デフォルトの名無しさん
08/02/27 09:13:57
最近はokwaveとか教えてgooとかと
マルチするのが流行りなのか
880:デフォルトの名無しさん
08/02/27 09:19:46
-ableをつける
isConfirmOverwritable()
setConfirmOverwritable(boolean)
881:デフォルトの名無しさん
08/02/27 09:23:42
その場合 confirm に able を付けるべきだと思うんだ
882:デフォルトの名無しさん
08/02/27 09:52:15
なるほどー!かなりすっきりしました。
ありがとうございます!!
883:デフォルトの名無しさん
08/02/27 11:17:58
JasperReportsで帳票毎に四角形の色を毎回変えたいんだけど
どうしたらいいですか?
iReoprtで
rectangle、backcolorを変更するというのはわかるんですが、
毎回違うとどうしたらいいのでしょうか?
884:デフォルトの名無しさん
08/02/27 12:00:12
毎回ってのが意味解らん。
毎ページなのか、毎項なのか、毎行なのか、毎カラムなのか。
まずは日本語でおk
885:デフォルトの名無しさん
08/02/27 12:20:01
そもそもJava以前に、自分が抱えている問題を把握できていないケースが多い気がする。
だから日本語がおかしいし、説明されても理解できない。
886:デフォルトの名無しさん
08/02/27 12:41:34
右シフトでどっちが高速なのか試してください。
>> >>>
887:883
08/02/27 13:01:04
枚ページです。
コンパイルしちゃった後でも変更できるんですか?
888:デフォルトの名無しさん
08/02/27 13:26:21
sunはInterruptedExceptionは握り潰すな再スローしろってスタンスだっけ?
889:デフォルトの名無しさん
08/02/27 14:26:24
>>888
このへんが参考になるかも
URLリンク(www.ibm.com)
890:デフォルトの名無しさん
08/02/27 19:00:22
java sound を使うとパソコンから盗聴が可能ですか
891:デフォルトの名無しさん
08/02/27 19:06:52
こっちでやれ
スレリンク(tech板)l50
892:デフォルトの名無しさん
08/02/27 21:56:31
Java の理論と実践: アトミックで行く
URLリンク(www.ibm.com)
このページにある、リスト3: SimulatedCAS クラスの compareAndSwap について質問です。
SimulatedCAS のコードのすぐ下にある説明書きに、
「CASベースの並行アルゴリズムは、スレッドがロックを待つ必要が全くないので、lock-freeと呼ばれます」
という記述があります。
しかし SimulatedCAS の compareAndSwap メソッドは synchronized メソッドに
なっています。Simulated って書いてあるから実際使うときは違うやつ使うのか
なと思いきや、 リスト4 のコードで思いっきり使ってあります。
compare-and-swap アルゴリズムを真似たプログラムは、 synchronized であっても
ロックされないように最適化されるということでしょうか?
893:デフォルトの名無しさん
08/02/27 22:05:06
レンタルサーバー借りて
毎日一回株価を取得してDBに放り込むプログラムを作ろうと思ってるんだけど
JAVAで時間がきたらサーバー上で実行するってことかのう?
どんな仕組みでできる?
それだけわかればDBにも移せるしダウンロードもできそうなだんだが
894:デフォルトの名無しさん
08/02/27 22:17:24
普通 cron 使う。
895:デフォルトの名無しさん
08/02/27 23:33:28
実行先のJREバージョンに応じて違う処理をさせたいと考えています。
バージョンに応じて違うクラスファイルを読み込むようにするには
どうしたらよいでしょうか?
JARアーカイブとMANIFESTファイルを利用しており、クラスライブラリが
たくさんあるのでバージョンごとに違うJARを作成するのは避けたいのですが・・・
896:デフォルトの名無しさん
08/02/27 23:43:07
Class.forName(javaVersionName+ClassName).newInstance();
897:867
08/02/28 00:01:48
いくつかのレスポンスありがとうございます。
申し訳ないんですが、ぜんぜんわからないです。
1時間くらいgoogleしてみたのですが、
そこから派生するキーワードや、
似たような単語が、同様の意味を成しているのかもわかりませんでした。
せっかく手を差し伸べていただいたところ申し訳ありません。
飲み込む、もみ消す、握りつぶす、
非チェック例外、チェック例外、チェック済み例外、チェックされる例外…
飲み込むというのは、InterruptedExceptionを投げずに処理してしまうということなのでしょうか…
898:デフォルトの名無しさん
08/02/28 00:11:59
オブジェクト指向初心者です。
調べるの面倒です。教えてください。
このスレッドを読んでいて、初めて 委譲 を知ったのですが、
クラスの外部から、インスタンスのフィールドにアクセスできる仕様というのは、
オブジェクト指向的に、思い切り間違えなのでしょうか。
委譲 の概念が普通に使われるためには、
フィールドへのアクセスは、
クラスに所属するメソッド経由で、アクセスされる仕様である場合でないと、
アクセス方法に統一性がもたせられませんよね。
そもそも、このような質問をする原因が、
なぜフィールドの値をpublicにするなど、
所属クラス内のメソッド以外からの、フィールド変数(?)へのアクセスが許可される必要があるのか
が、わからないためです。
質問の仕方が、気に入らなければ、無視してください。
たぶん調べてもまともな回答にたどり着くに、長い時間がかかりそうだと思い、怠けています。
899:デフォルトの名無しさん
08/02/28 00:19:18
答えるの面倒です。教えません。
900:デフォルトの名無しさん
08/02/28 00:21:29
>>895
interface AnythingExecutor{
public void doAnything();
}
public class AnythingExecutor14 implements AnythingExecutor{
public void doAnything(){
// JRE 1.4 用の処理
}
}
public class AnythingExecutorFactory{
public static AnythingExecutor create(){
// JRE のバージョンを取得する
if( 1.4 だった){
return new AnythingExecutor14 ();
}
else if( 1.5 だった){
return new AnythingExecutor15 ();
}
...
}
}
// 実際の処理
AnythingExecutor executor = AnythingExecutorFactory.create();
executor.doAnything();
901:デフォルトの名無しさん
08/02/28 00:23:16
>>898
それは Java に対する質問ではない。
適当なスレを探すよろし。
902:デフォルトの名無しさん
08/02/28 00:29:32
>>898
問題ないんじゃないか。setter/getter があるってことは、すなわち
public フィールドとほとんど等値なんだし。
ただ、フィールドへのアクセスと同時に何かしたい、外部からは
read のみに変えたい、みたいなことってことが結構ある。
そこで、フィールドは private にして隠す。アクセスは public な
getter/setter からのみ。というよくある構成に統一することで、
機能追加に対応しやすくなるからこうしましょう、という寸法。
中には「フィールドへのアクセスもオブジェクトに対する"操作"で
あるから、メソッドであるべき」なんていう人もいると思う。
まぁその辺をどう割り切るかは個人個人によるのでは。
あと委譲の話と何が関係あるのかが分からなかった。
903:デフォルトの名無しさん
08/02/28 01:11:04
>>902
> 問題ないんじゃないか。setter/getter があるってことは、すなわち
> public フィールドとほとんど等値なんだし。
1つ大きな違いがあるぞ。setter/getterの場合、本来は違うものを同じものに見せ掛けるのが簡単にできる。
後付けで振舞いを変えるとか、透過的に処理を割り込ませたりするとか、実体をリモートに持たせるとか。
904:デフォルトの名無しさん
08/02/28 01:33:31
setter/getterメソッドをわざわざ追加する意味がさっぱりわかなかったので
publicフィールドにガンガンアクセスするコードを書いてるのですが、ひょっとして一般的じゃないんですか?
>>903さんがどういう処理を指してるのかいまいちつかめません。。
905:デフォルトの名無しさん
08/02/28 01:38:00
>>896,900
うわー、ありがとうございます!
早速試してみます。
906:デフォルトの名無しさん
08/02/28 01:38:32
>>877
やさしいなー
907:デフォルトの名無しさん
08/02/28 01:54:20
>>904
意味が分からなければ今のスタイルを続けていけばいい。
そのうち面倒ごとが起こったときにアクセッサの意義が分かるよ。
908:デフォルトの名無しさん
08/02/28 07:09:55
>>892
値を一つ変えるのに、払うコストをどれだけ小さく出来るか、という話。
この例はシミュレートだけど、ハードウェアでサポートしている CPU もあるよ、と言うこと。
「スレッドがロックを待つ必要が全くない」というのは、
リスト2で行われてるような処理をする必要がない、ということ。
リスト4で注目するべき点は、increment メソッド内の get と CAS の間で、
継続したロックが保持されていないこと。
そして、increment 自体が呼ばれてから値を戻すまでに
value の get 値が 1 "以上"変わること。
909:デフォルトの名無しさん
08/02/28 09:16:22
test
910:Hoge
08/02/28 11:32:12
はじめまして、質問させていただきます。
DJUnitを使って単体テストを行っているのですが、
テスト結果の確認方法として、
○○クラスの△△メソッドが何回呼ばれたか?
を確認したいのですが、方法がわかりません。
assertCalled(String, String);
を使えば、メソッドが呼ばれたかどうかは確認できますが、
何回呼ばれたかは確認できません。
なにか良い方法はないでしょうか?
911:デフォルトの名無しさん
08/02/28 12:30:14
未だに使っている所あるとは驚き
912:デフォルトの名無しさん
08/02/28 12:44:49
>>892
それらは 「振る舞いを示すコード」 というタイトルや Simulated というクラス名からわかるように、
単に動作を説明するための例にすぎない。 真似ても別に最適化されない。
実際にアトミック操作したい場合は java.util.concurrent.atomic.AtomicInteger を使う。
リスト5では AtomicInteger 使ってるだろ。
913:デフォルトの名無しさん
08/02/28 13:46:34
だって柏原だって経済学部じゃん
914:Hoge
08/02/28 13:47:56
>>910
すいません。自己解決しました。
調査不足でした。
getCallCount(String, String)
という便利なメソッドがありました。
ありがとうございました。
915:デフォルトの名無しさん
08/02/28 16:33:08
FileInputStream fis = new FileInputStream(in); // in : 入力ファイル
fis.read();
....
fis.getChannel().position(0);
fis.read();
...
fis.close();
今までFileChannelを知らず、一方通行なInputStreamでランダムにアクセスできるのは気持ちが悪いのですが、こんな感じでポインター移動するのって安全ですか?
916:デフォルトの名無しさん
08/02/28 16:36:04
そのストリームがファイルだと分かってるから良いんじゃねーの。
917:デフォルトの名無しさん
08/02/28 17:20:24
そうですよね。おーかなり自由度が増しますね。
ありがとうございました。
918:デフォルトの名無しさん
08/02/28 22:11:27
swingについて、教えてください。
PaneとPanelの違いがよくわからないのですが、
JComponentを継承しているコンテナに関して、
付加機能が一番小さいものがJPanelで、
JPanel以上の何らかの機能が付け加わったものがPaneなのでしょうか?
コンテナの中でPanelだけ、PaneでなくてPanelと呼ばれる理由は何なのでしょうか?
あと、もうひとつ。
Containerクラスのオブジェクト(というかJFrame.setContentPane())をJPanelにキャストして、
コンテナとしている参考コードがあったのですが、
サブクラスの変数にキャストさせ(て代入する)理由がわかりませんでした。
なぜなのでしょうか?
919:918
08/02/28 22:13:40
918です。
918で記述ミスしました。
>JFrame.setContentPane()
JFrame.getContentPane()
でした。
(JFrame#getContentPane() と記述するとどういう意味なのでしょうか…。)
よろしく御願い致します。
920:デフォルトの名無しさん
08/02/28 22:29:34
>>918
さぁ?
名前なんて付ける人の趣味みたいなもんだし、深く考えても仕方ないような
ちなみに、JComponentを継承してるコンテナ、というが
JComponentはContainerのサブクラスだから、JComponent自体がコンテナだよ
まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・
ContainerになくてJPanelにあるメソッドを何か使いたかったんじゃないかね
コード見てわからなければ書いた人に聞くしかない
JFrame#getContentPane()はJFrameクラスのgetContentPane()メソッドのこと
JFrame.getContentPane()と書くと、staticメソッドを呼んだ戻り値について言ってるようにも見えるので、区別のために
921:918
08/02/28 22:38:34
>まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・
!!!え?
そうか、継承しているから継承もとの機能はあるのか…。
無効になっていて然り、とか、どこかで思っていたのか、気がつきませんでした。
ContainerのオブジェクトをContainerのサブクラスにすると、サブクラスのメソッドが使えるということで?
これは、例外が発生しそうで危ない予感もするのですが、
そういうコードを意識して使うような設計もあるのですか?
>JFrame#getContentPane()
ありがとうございます。自力だとどれだけ時間かかったかわかりません。
これをgoogleにはどうすればいいんだろう…。記号が…。スレ違いですね、失礼。