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にはどうすればいいんだろう…。記号が…。スレ違いですね、失礼。
922:デフォルトの名無しさん
08/02/28 22:49:18
>>921
>ContainerのオブジェクトをContainerのサブクラスにすると、サブクラスのメソッドが使えるということで?
いや、まさか。
JFrame#getContentPane()が返すContainerが実際にはJPanelだとわかっている場合だけ出来る。
実際にJPanelを返すからといっても、ドキュメントにそんなことは書かれていないので、良い習慣とは言えない。
923:918=921
08/02/28 22:50:58
>920
>まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・
感動した。
感動しました。
変な方言を覚える前に、920の指示の元Javaを学びたい!
自分に本か、Web資料の推薦を!
924:デフォルトの名無しさん
08/02/28 22:59:41
graphic JAVA Mastering the JFC
これ読めばSwingの仕組みは大抵わかるよ。
AWTから読むと上下*2の四冊だけどかなり勉強になる。
925:デフォルトの名無しさん
08/02/28 23:07:27
>>921
> 例外が発生しそうで危ない予感
どうしてもやりたければ、instanceof でJPanel だと確認してからキャストを行う。
というより、キャストの前には必ず instanceof で対象を確認すること。
926:デフォルトの名無しさん
08/02/29 08:02:24
質問です。
javaはビッグエンディアンという記述をよく見かけますが、
その根拠がよくわかりません。
例)URLリンク(www.geocities.jp)
ご存知の方いましたら教えてもらえないでしょうか?
927:デフォルトの名無しさん
08/02/29 08:06:33
int x = 0x12345678;
System.out.printf("%x%n", x & 0xFF);
これが 78 と出ればビッグエンディアン、12 と出ればリトルエンディアン。
928:デフォルトの名無しさん
08/02/29 08:10:58
>>927
そのコードを実行しても、実行したプラットフォームのみでしか
エンディアンは確定しないのではないですか?
929:デフォルトの名無しさん
08/02/29 08:49:18
>>926
java.io.DataInput#readInt() とか java.io.DataOutput#writeInt(int) みたいに、
標準APIの一部のクラスがビッグエンディアン使ってて、
さらに、1.3までは標準APIにリトルエンディアンで入出力できるクラスが無かったから。
930:デフォルトの名無しさん
08/02/29 08:53:43
>>928
というか、>>927のコードを(System.out.printfをprintfに置き換えたものを)
C言語でやっても、エンディアンなんかわからないけどね。
931:デフォルトの名無しさん
08/02/29 10:44:36
はいはい! 先生方に質問よろしいでしょうか!
Javaアプレットを使ってブラウザ画面の自動撮影を行いたいんですが、どういう組み方をすれば良いんでしょうか!
訪問者が来る度にスクリーンをキャプチャしてサーバーに保存、
自分の環境では確認できない動的なサイトの動作チェックに使いたいと思います!
932:デフォルトの名無しさん
08/02/29 11:13:12
>>931
セキュリティ上の問題があるので無理。
933:デフォルトの名無しさん
08/02/29 11:52:57
質問です。
URLリンク(www.techscore.com)
上記のソースにて、queue.size() == 1の時は、put()からのqueue.addFirst(obj)呼び出しと、
get()からのqueue.removeLast()呼び出しが同時に呼び出される可能性があり、
LinkedListはスレッドセーフではないから問題あり、と思うのですが認識あってますか?
notifyAll()の使い方の解説なので、ソースにケチをつけてる訳ではないです。
934:デフォルトの名無しさん
08/02/29 12:10:26
>>933
synchronized付いてるから同時には呼び出されない
935:デフォルトの名無しさん
08/02/29 15:29:18
>>932
ええ、そんな!
何とかなりませんか! 先生!
936:デフォルトの名無しさん
08/02/29 15:39:42
例えば!
Robotを使いスクリーン画像を取得!
そのデータをURLConnectionでCGIに送り、
CGIでログを保存するみたいな形でできそうな気がするんです!
問題はRobotの自動実行が可能かどうかで!
もし不可能なら利用者にボタンを押させる方法でも構いません!
やりたいのは動的なサイトの確認であって、不正行為ではないんです!
だから利用者の確認をしっかり取らなければならないというのであれば従います!
先生お願いします!
僕に僅かでも良いので知恵をお貸し下さい!
937:デフォルトの名無しさん
08/02/29 15:50:40
例えば!
Robotなんてアプレットで許したらマウスも自動で動かせる!
そしてマウスで勝手に送信ボタンを押させ、
CGIで不正取得なんかもできそうな気がするんです!
問題はその動作が利用者がやったのかRobotがやったのかで!
もし不可能なら不正取得かサイトの確認か判断が付きません!
やりたいのが動的なサイトの確認であって、不正行為ではないと証明できないんです!
だからアプレットではそんなことは許されていなくて、それにみんな従います!
先生お願いします!
僅かでもいいので理解してください!
938:デフォルトの名無しさん
08/02/29 15:57:58
javaで画面のキャプチャなんて取れるの?
939:デフォルトの名無しさん
08/02/29 16:01:16
質問者も言ってるように、Robot使えば可能
あと、ぐぐったら
URLリンク(q.hatena.ne.jp)
こんなんがでてきたよ。
これで目的は達成できるかな?
940:デフォルトの名無しさん
08/02/29 16:03:14
いつぞやの謎スクリプトを髣髴とさせるな。
// CGI を設置できるのだから、問題のSSを送ってもらえば終了。
>>938
java.awt.Robot.createScreenCapture(Rectangle) で出来ますよ。
941:デフォルトの名無しさん
08/02/29 16:12:46
>>939
ありがとうございます先生!
URLリンク(browsershots.org)
このツールでほとんどの環境が確認できました!
さすが先生です! また何かあったときよろしくお願いいたします!
942:デフォルトの名無しさん
08/02/29 16:25:28
>>937
ええ! ということは先生!
アプレットではRobotの使用ができないということなんでしょうか!
943:デフォルトの名無しさん
08/02/29 16:55:31
>>942
署名付ければ出来なくは無い
でもそんなアプレット誰も実行してくれないだろう
スクリーンショット自動送信なんて、機密情報もれまくり
お前が今見てるその秘密の画像も勝手に送信されてるよ
944:デフォルトの名無しさん
08/02/29 18:50:25
>>943
そうなんですか!
何から何までありがとうございます!
945:デフォルトの名無しさん
08/02/29 20:28:21
技術的に出来ないのと倫理的に出来ないのは分けて書こうぜ
紛らわしい
946:デフォルトの名無しさん
08/02/29 21:12:49
>>941で目的達成できてるなら、質問者には技術的にできるかできないかなんてどーでも良くなってるんじゃ?
947:デフォルトの名無しさん
08/03/01 01:39:40
Script API で実行するスクリプトだけセキュリティ制限かけられない?
今のままだとファイル消したりネットワークアクセスしたりやりたい放題なんだけど。
948:デフォルトの名無しさん
08/03/01 02:05:29
標準APIじゃ無理。
949:デフォルトの名無しさん
08/03/01 03:28:21
コメントをUTF-8で書いてるんだけど、Javadocにすると文字化けする。
何とかできないでしょうか?
950:デフォルトの名無しさん
08/03/01 03:33:02
>>949
javadoc コマンドの -encoding か -charset
これぐらいはマニュアル見て発見しよーぜ。
951:デフォルトの名無しさん
08/03/01 03:33:04
>>949
javadoc -encoding UTF-8
952:デフォルトの名無しさん
08/03/01 03:37:38
>>949
javadocだけじゃなくてコンパイルするときにも警告が出ない?
システムのデフォルトの文字エンコード以外を使うときはencodingオプションを
953:デフォルトの名無しさん
08/03/01 07:52:08
本当に基本的な質問で申し訳ありません。
フォントを変更したときに
setFontでPLAINに変更してもデフォルトのボールドのかかった
フォントが印刷に反映されません。
どこかで読んだと思い過去スレで探したのですが見つかりません。
教えていただければ幸いです。
954:デフォルトの名無しさん
08/03/01 09:02:08
public class sample69 {
public static void main(String[] args) {
p_calc.Calc calc =new p_calc.Calc();
System.out.println(calc.sum(1,2));
}
}
コンパイルすると、
955:デフォルトの名無しさん
08/03/01 09:02:59
c:\source>javac sample69.java
.\p_calc.java:3: ')' がありません。
int sum(int i; int j){
^
.\p_calc.java:3: ';' がありません。
int sum(int i; int j){
^
.\p_calc.java:8: クラス sample68 は public であり、ファイル sample68.java で宣
しなければなりません。
public class sample68 {
^
sample69.java:3: p_calc にアクセスできません。
クラスファイル .\p_calc.java は不正です。
ファイルにクラス p_calc が含まれていません。
削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。
p_calc.Calc calc =new p_calc.Calc();
^
エラー 4 個
これが出ます。原因はなんでしょうか?
956:デフォルトの名無しさん
08/03/01 09:18:13
>>955
1. 2 と同じ原因。i の後のセミコロン。
3. ファイル名と public なクラス名が違う。
4. p_calc クラスがコンパイル出来ず、実行ファイルが見つからない。
957:デフォルトの名無しさん
08/03/01 09:46:26
sample69をコンパイルしようとしているのに、sample68のことが出るって変じゃあないですか?
958:デフォルトの名無しさん
08/03/01 10:34:17
>>957
とくに変じゃないよ。
sample69 で使われている p_calc.Calc を見つけるために p_calc.java
もコンパイルしているんでしょう。
959:デフォルトの名無しさん
08/03/01 10:51:05
今日の日付を
Date date = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
String today = sdf1.format(date);
で取得して、日付2008/3/10と比較させ今の日時より前か後かという判定を
行いたいのですが、具体的にどうすればよいのでしょう?
960:デフォルトの名無しさん
08/03/01 10:57:08
>>959
Calendar#afterとCalendar#beforeを読むべし
実際はGregorianCalendarになるけどな
961:デフォルトの名無しさん
08/03/01 10:59:05
>>960
ちょっと調べてみます
962:デフォルトの名無しさん
08/03/01 11:21:03
音声認識に興味があるんだけど、Java Speech APIで実用に耐えられそうですか?
それともC++あたりに鞍替えした方がいいですか?
963:デフォルトの名無しさん
08/03/01 11:23:35
㍉
964:959
08/03/01 11:27:16
調べて書いてみたのですが、今日の時刻はこんな感じでよいのでしょうか?
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd");
Date now = new Date(); //現在時刻を取得
String today = dateformat.format(now); //変数todayに今日の時刻をyyyy/MM/dd型でいれる
965:デフォルトの名無しさん
08/03/01 12:08:15
面倒くさいから、y*10000+m*100+d同士で比較しちゃう。
966:デフォルトの名無しさん
08/03/01 12:17:14
Strutsアプリケーションを作成しているのですが
セッションIDをSHA-1でハッシュ化するにはどうしたらよいでしょうか?
967:959
08/03/01 12:20:16
ここまでできました
//今日の日付を取得
Date now = new Date(); //今日の日付
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd"); //型の指定
//日付の比較
if (now.before(dateformat.parse("2005/1/1"))) {
//今日が2005/1/1より前のときの処理
}else{
//今日が2005/1/1より後のときの処理
}
ただ、これだと1番最後の行でエラーがでてしまいます・・
エラーは 「処理されない例外の型 ParseException」です
968:959
08/03/01 12:21:38
エラーは一番最後じゃなくて
if (now.before(dateformat.parse("2005/1/1"))) { のところでした
969:デフォルトの名無しさん
08/03/01 12:41:34
>>966
Javaでダイジェストを生成する
URLリンク(www.atmarkit.co.jp)
>>967
> 数値: フォーマットには、パターン文字の数は最小桁数になります。
二文字使ってるから最低二桁なのでは?
970:959
08/03/01 12:52:53
いろいろ調べてるんですがよくわからないことばかりです
日付の比較のところがよくないとは思うのですが;;
// 今日の日付を取得
Date now = new Date(); //今日の日付
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd"); //型の指定
String today = dateformat.format(now); //変数todayに今の時刻がはいる
解約予定日を取得
SimpleDateFormat kaiyaku = new SimpleDateFormat("yyyy/MM/dd");
String kaiyakuyoteibi = kaiyaku.format(2005/10/15);
// 日付の比較
if ( ) {
//System.out.println("今日は2002/06/10よりも前の日です。");
}else{
}
971:デフォルトの名無しさん
08/03/01 13:09:40
時刻も含めて比較したいなら、Date#compareToでできる。
日付で切り捨てたいなら、Calendarに変換してsetで時刻を0にする。
ユーティリティメソッド作ってそこで比較すべし。
あちこちで比較してたら、バグの温床。
ついでに言えば、「今日の日付を取得する」もユーティリティメソッドにして、
システムプロパティなどで、「今日の日付」を設定できるようにしておくと、
わざわざシステム日付を変更しなくとも、日付が変わったときのテストができる。
972:デフォルトの名無しさん
08/03/01 13:12:13
>>947
権限の低いクラスローダでロードしたクラスを挟んでスクリプトを呼ぶといいんじゃないかな、と推測だけで言ってみる
973:デフォルトの名無しさん
08/03/01 13:39:35
スレ違いかも知れませんが…
Commons/Net 1.4.0 のFTPClientを使っていて 昨日から原因不明のエラーが多発してました
ようやく判明した原因は、FTPClient#listFiles()が返すFTPFile[]の要素が
なんと2/29のタイムスタンプのファイルについてはnullになってしまう事でした!
とりあえずサーバの関連ファイルをtouchして急場をしのぎましたが
この件について善後策を相談するのに最適のスレなどがあれば教えて下さい
974:デフォルトの名無しさん
08/03/01 13:51:14
>>973
ドキュメントにバグの報告先とかメンテナの連絡先が書いてあるはずだから、
最小の再現コード付けてレポートする。
975:デフォルトの名無しさん
08/03/01 14:50:50
勉強のためにファイル転送のプログラムを作っているのですが、
いまいち上手くいきません。流れとしては、
①(送り手) FileChannel(sourceChannel)でファイルを読み込む
②(送り手) SocketChannel(destinationChannel)で相手に送る
③(受け手) SocketChannel(sourceChannel)で受け取る
④(受け手) FileChannel(destinationChannel)でファイルに書き込む
送り手
while(destinationChannel.isConnected()){
buffer.clear();
if(sourceChannel.read(buffer) < 0)
break;
buffer.flip();
destinationChannel.write(buffer);
}
受け手
while(sourceChannel.isConnected()){
buffer.clear();
if(sourceChannel.read(buffer) < 0)
break;
buffer.flip();
destinationChannel.write(buffer);
}
bufferはByteBuffer型になっています。
これを実行すると、送り手はエラーもなく正常に終了しているのですが、受け手で
「java.io.IOException: 既存の接続はリモート ホストに強制的に切断されました。」というエラーが出てきます。
エラーが出た場所 => if(sourceChannel.read(buffer) < 0){
長文な上にわかりにくい文章かもしれませんが、
なぜこうなるのか教えてもらえないでしょうか?
976:デフォルトの名無しさん
08/03/01 15:02:45
>>975
データの受信自体は問題ないのですか?
単にデータを送るだけだと、送り手側でソケットを閉じると、
受け手側でエラーが出るはずですが…
何らかのプロトコルで「送受信完了」をやり取りする形にすれば
問題のある状態なのかどうか判断できると思います
977:デフォルトの名無しさん
08/03/01 15:11:10
勉強のためならまずCでやったほうがいいよ
Javaでやっても意味ないよ
978:デフォルトの名無しさん
08/03/01 15:27:11
質問させてください
String str = "12345";
str += "abcde";
これで連結しようとするとrangeが足りないと出ます
すでにあるStringクラスのオブジェクトに文字列を連結するための
メジャーな方法などがあれば教えてください
979:デフォルトの名無しさん
08/03/01 15:56:12
>>976
データの受信自体が出来ないみたいです。
送り手側は一通りプログラムが実行されて終了するのですが、
受け手側は if(sourceChannel.read(buffer) < 0) の部分で処理が止まっているみたいです。
受け手は、送り手が書き込むのを待っている状態になっているんでしょうか?
>>977
時間に余裕が出来ればCも勉強しようと思っています。
今は就職活動中であまり時間が無くて、息抜きでやっている状態なので...
助言ありがとうございます。
980:デフォルトの名無しさん
08/03/01 16:00:40
>>978
不可能
981:978
08/03/01 16:02:28
自己解決しました
スレ汚しごめんなさい
982:デフォルトの名無しさん
08/03/01 17:44:15
ServletContextを得るためのgetServletContext()というメソッドがありますが、
APIを見てみるとServletContextはインタフェースなのでオブジェクト化は出来ませんよね。
getServletContext()は、実際にはServletContextではなく、ServletContextを実装するサブクラスを作ってるんでしょうか?
983:デフォルトの名無しさん
08/03/01 17:46:00
ServletContext context = getServletContext();
System.out.println(context.getClass().getName());
984:デフォルトの名無しさん
08/03/01 18:13:50
次スレたててみる
985:デフォルトの名無しさん
08/03/01 18:18:51
次スレ
【初心者】Java質問・相談スレッド113【大歓迎】
スレリンク(tech板)
986:デフォルトの名無しさん
08/03/01 19:00:59
>>985
乙彼Death
987:デフォルトの名無しさん
08/03/01 21:31:24
>>975
送り側はちゃんと閉じてる?
988:デフォルトの名無しさん
08/03/02 02:22:23
PHPを学習した後だとJavaの習得は容易ですか?
989:デフォルトの名無しさん
08/03/02 02:31:14
いいえ
990:デフォルトの名無しさん
08/03/02 02:38:08
PHPの知識は役立たないの?
991:デフォルトの名無しさん
08/03/02 02:47:56
javaの勉強はじめました。
ネットワークとかGUIとか使って何か作りたいのですが、
何も思いつかないので、
パケットモニタ(?)(今どんなメッセージで通信されているか)みたいなのを作りたいのですが、
ネットワークに関しては、どの変の勉強すれば早そうでしょうか。
この辺のクラスは古いから使わないほうがいいとか、
この辺使えばすぐじゃないかとか教えていただけると助かるのですが、
助言もらえませんか。
GUIに関しては、本とWebを参考にして手をつけていたら何とかなりそうな気がしているのですが、
ネットワークは難しすぎて…。
992:デフォルトの名無しさん
08/03/02 03:16:15
Java→PHPなら簡単
993:デフォルトの名無しさん
08/03/02 03:18:43
>>991
何をしたいのか本人すら分かってないのに他の人に聞いても分かるはずないよ
ネットワークって具体的に何?サーブレットでWebアプリ作るとかじゃ駄目なの?
994:デフォルトの名無しさん
08/03/02 03:22:47
パケットモニタはドライバ組まないと無理だ。
通信なら Socket 使えばいい。
995:デフォルトの名無しさん
08/03/02 03:36:45
>>934
>synchronized付いてるから同時には呼び出されない
え?メソッドレベルの排他というのは、一つのメソッドに複数のスレッドが同時に入れないだけで、
アクセスするメソッドが別なら排他されないのでは?やば、今までずっと間違えてきたかも。。。
996:デフォルトの名無しさん
08/03/02 03:38:58
なんかいろいろ勘違いしてるなw
997:933, 995
08/03/02 03:44:36
>>934
いやいや、やっぱり同時アクセス可能ですよ。でないとnotifyAll()でwait()を解除してあげられないです。
998:デフォルトの名無しさん
08/03/02 03:47:47
インスタンスメソッドの synchronized 修飾子は synchronized(this){ } でメソッド内全てを囲ったのと等しい。
クラスメソッドの synchronized 修飾子は synchronized(Queue.class){ } と等しい。
999:デフォルトの名無しさん
08/03/02 03:51:58
URLリンク(www.amazon.co.jp)
1000:デフォルトの名無しさん
08/03/02 03:55:06
1000 なら Java 死滅確定
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。