1 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 19:48:24 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド111【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1200151522/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝のう存じます。 次スレは>>980 あたりで。
656 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:57:09 ] >>652 確保するサイズが大きいとスレッドごとのプールから取れなくなるから同期が必要になる というかそんな大きなStringBuilderをそんな頻繁に確保するってことがまずい気がする GC起きまくってないか?一度 -verbose:gc で見てみ 確保したのを使いまわすと改善するんじゃないかな
657 名前:お [2008/02/23(土) 11:14:43 ] j2dk1.4.2を使っているのですが、 javacが使えず、環境変数の設定をすると、一度できたんですが、 2回目からできなくなりました。 しかも変数の設定を変えていたので元のがどんなのだったかがわかりません…。 環境変数の、Pathを教えて下さい。
658 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:16:24 ] >>657 >>1
659 名前:お [2008/02/23(土) 11:29:59 ] 読んでもよくわかりません。どなたかー
660 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:51:13 ] >>659 本当に読んだか?具体的にどの手順がわからないんだ java.sun.com/javase/ja/6/webnotes/install/jdk/install-windows.html#path
661 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:00:48 ] >>655 >>656 なるほど!スレッドごとのプールから取れなくなるからってことですか。 このStringBuffer自体はデバッグのための文字列だったのでここの部分を取り払ったら ロック争奪がなくなってスムーズに動きました。 ありがとうございました!
662 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:05:43 ] >>647 >>650 いろいろありがとうございます Intのうち一つはflagで3種類の値しかとらないのでboolean2つで頑張って もう一つのIntをshort型にするとだいぶ減りそうな気がしました。 後で実装してみようと思います boolean2つのところはBitSet?を使えばいいのですかね。。 後でjavadoc読んでみます。
663 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 16:25:09 ] BufferedImageのディープコピーの仕方を教えてください
665 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 16:30:43 ] もう1回BufferedImageを作れ
666 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:04:50 ] Javaの初心者にExceptionのことを教えたいのですが、 J2SEのクラスの、Exceptionをthrowするメソッドで、 一番基本的で分かりやすいものって何だと思いますか? コンストラクタじゃない普通のメソッドでお願いします。
667 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:11:09 ] ぬるぽ
668 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:11:27 ] NumberFormatException
669 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:19:51 ] いや、Exception自体じゃなく、 Exceptionをスローするメソッドです。 例えば、FileOutputStream#write(byte[] b)とか。
670 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:24:40 ] >>666 // Exception 自体は throw も catch もするな。を教える 実行時例外なら、Integer.parseInt(String) で NumberFormat 普通のヤツは意図的に起こすだけなら ClassNotFound とか IO とか NumberFormat は良い例ではないのよね。 実行時例外の割りに、catchされるように組み込まれてるし。 まあ、別に無理に教える必要は無いんじゃないかな それよりも知らないメソッドは API doc で調べるように仕込むべし。
671 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:38:36 ] ありがとうございます。 実行時例外じゃなくて、 IOExceptionとか、メソッド呼び出すと絶対try catchしないといけないヤツです。
672 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:42:38 ] new FileInputStream ファイルがなければFileNotFoundExceptionを投げる
673 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:45:47 ] って、コンストラクタはだめなのか じゃあ Socket#connect 接続できなければ IOException
674 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:55:35 ] コンストラクタでないわかりやすいもの・・・ ImageIO#read(File) とか?
675 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:50:51 ] Stream系のIOExceptionじゃね? try-catch-finally と合わせて覚えるのがセオリーかと
676 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 19:40:42 ] みなさんありがとうございます。 finnalyも合わせて、Stream系で説明してみようと思います。
677 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:55:38 ] IOException もいいが ParserConfigurationException も捨てがたい
678 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:54:30 ] 学校でちょっとプログラムに興味あって色々自分で勉強してみたんですがJavaって簡単過ぎてつまらないんですがこんなので仕事になるんでうか? HTMLも簡単だったし仕事では何やってるんですか?
679 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:58:40 ] オナヌー
680 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:00:51 ] >>678 ひとつだけいえることはつまらないと思う人は これを仕事にしてはいけませんよ。
681 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:01:05 ] 簡単か難しいかと、仕事になるかならないかは、関係ないからな なにせ「単純労働」っていう言葉もあるくらいだ
682 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:01:06 ] 言語は簡単でいいんだよ
683 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:40:01 ] 27歳になってJAVAで開発チームに入る事になりました。 今までの業務開発経験は、COBOL3年あとはVBAぐらいですかね・・。 4年程前にSUNJAVA1.4の資格は取得したんで基礎的な事は大丈夫と思います。 実際に業務で役に立つ為に、他にどんな勉強しておけばいいですかね? とりあえずTOMCATとMYSQL入れて、なんか作ってみようかなと思ってますが、 業務レベルでは全く無意味なんでしょうね・・
684 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:52:48 ] tomcatとmysqlが何で無意味なの?普通に業務レベルで使うのに。 とりあえずeclipseで簡単なwebアプリでも作ってみたら?
685 名前:683 mailto:sage [2008/02/24(日) 01:06:18 ] やっぱ業務でも使うんですね。 いや、簡単な事やっても業務レベルでは通じないかなぁと。 でも基本的な事分かってると大分入りやすいですよね。 適当にDB構築してWEBアプリ作ってみます。
686 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:32:01 ] 適当にDB構築できちゃうレベルなら心配無用だと思うけど…
687 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 08:50:07 ] 普通に例外なげてるんじゃね
689 名前:デフォルトの名無しさん [2008/02/24(日) 09:23:16 ] throw ceってなんですか? もしiとJの値が同じなら、オブジェクトを作成して、その後はなんですか?
690 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 09:30:37 ] だから例外投げてるんだよ
691 名前:デフォルトの名無しさん [2008/02/24(日) 10:10:44 ] たびたび申し訳ないが、 static void calc (int i,int j) throws calcException この部分はこの式は例外を投げる式ですよってこと?
692 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 10:14:30 ] このメソッドはcalcExceptionを投げ得ますよってこと。
693 名前:お [2008/02/24(日) 10:27:48 ] >>660 [追加します]とありますが全部変えてしまいました。全部どう記述するのか聞きたいです。
694 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 10:33:26 ] >>693 つ ttp://okwave.jp/qa2940675.html
695 名前:デフォルトの名無しさん [2008/02/24(日) 11:13:00 ] >>692 ありがとうございました><
696 名前:お [2008/02/24(日) 11:30:48 ] wbemの場所ってわからないことないですか?
697 名前:お [2008/02/24(日) 11:36:33 ] 設定方法わかりませーん
698 名前:デフォルトの名無しさん [2008/02/24(日) 11:57:29 ] @F8押す→3秒待機→F8押す Bこの処理を500回ループした後 AF7押す→1秒待機→F8押す→1秒待機 C処理Aを30回繰り返し@に戻る こういうプログラムはjavaだったら可能でしょうか? ゲームに使うのでVBみたいにF8押したことにしますってのではなくて 実際に押すことが重要なんです
699 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 12:09:13 ] >>698 >>96 VB が何をやってるのか知らんが、 人がキーを押したときと同じような結果をシミュレートすることは可能。 // 自動演奏みたいにキーボードが動く……誰かそういうヤツを作ってください。
700 名前:デフォルトの名無しさん [2008/02/24(日) 12:16:39 ] VBではSENDKEYなるメソッドがあり それを使うとたとえば F8押した時、1+1の処理をするというプロシージャがあった場合 SENDKEYによって1+1を呼び出すことはできますが 実際にF8を押すという動作がウィンドウズ内で行われている というわけではないようです (押した時のようにキーをへこませるといわけではありません。念のため) ようするに、キーを押した後の処理ではなく、キーそのものを押したことを キーを押さずにウィンドウズに認識させたい
701 名前:お [2008/02/24(日) 12:22:46 ] 設定方法わかりませーん
702 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 12:25:25 ] >>700 なるほど。イベントのトリガーとして登録させてるようなものですかね。 ということで、96 を実行することで少しは感動してもらえそうな予感。
703 名前:デフォルトの名無しさん [2008/02/24(日) 12:31:18 ] どうやらjavaなら可能なようですね 勉強します
704 名前:11 mailto:sage [2008/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 mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 12:34:45 ] >>698 Javaはある程度のことしかできないし、そういうものであれば既存のソフトで腐るほどありますよ。 自分でやりたいなら何らかのスクリプトを使うことをおすすめしておきます。
707 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 12:43:52 ] 一つ一つのフレームは、その他のフレームのインスタンスを持ってないから現状では無理。 閉じさせるフレームのインスタンスを持たせて、それでactionPerformedでdisposeしてやれば実現できるけど・・・継承とかそこらへんの意味を見直した方がいいと思うよ。
708 名前:705 [2008/02/24(日) 12:53:30 ] >>707 様 ありがとうございました。 勉強しなおしてきます。
709 名前:638 mailto:sage [2008/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 名前:お [2008/02/24(日) 14:16:01 ] 設定方法わかりませーん
711 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:16:23 ] >>709 Oracle なら、詳細19とか詳細15とかマニュアル嫁 それの何処に配列が出てくるのか謎
712 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:18:34 ] 問題ない部分だけの抜粋でもいいからスタックトレース貼ったらどうか。 例外は本当にOJDBCで出てるのか?
713 名前:638 mailto:sage [2008/02/24(日) 14:29:54 ] ResultSetやPreparedStatementをデバッガで除くと、 設定したパラメータが正しい内容で格納されているのは確認しています。 出力される例外はArrayIndexOutOfBoundsExceptionです。 ここでパラメータの数が「詳細 パラメータ数」と表示されます。 >>711 まず、SQLExceptionじゃないです。 上記通り、19とか15はパラメータの総数が出力されます。 謎ですが。 >>712 そもそも業務で外部接続できないので貼れません・・・ 例外は、ResultSetのnextが11回目に呼び出されたタイミングで発生します。 ResultSetの処理の中でArrayIndexOutOfBoundsExceptionで死亡します・・・
714 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:02:57 ] test
715 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/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. [2008/02/24(日) 17:05:45 ] age
717 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:07:30 ] 固定長のちんこなんて要りません
718 名前:デフォルトの名無しさん mailto:sage [2008/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. mailto:sage [2008/02/24(日) 17:09:27 ] まぁまぁそういわず。 なんでエラーが出るのかさっぱり分からなくてね。
720 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:10:15 ] >>715 >>574-576
722 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/02/24(日) 17:16:06 ] >>721 既出でしたね。 でもそのレスを読んでも分かったよな分からんようなです。 具体的にどうすればいいか示してもらえませんか?
723 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:46:20 ] 今まで書いたソースを消してクソして寝ろ そして二度とブラウザを開かない
724 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/02/24(日) 17:47:03 ] >>723 分からないんだろ?そういえばいいのにw
725 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/02/24(日) 17:58:50 ] どう考えてもおれのコードと>>574 のコードは問題点が違います。 おれが書いた>>715 のコードはどこがミスがあるのか 指摘出来る人はいませんか?
726 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:17:40 ] >715 ジェネリックスを使用したList<E>の配列は作れない、言語仕様的に。 したがって、int[][]のように2次元配列にするか、List<List<Integer>>のようにListにListを入れるべし
727 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:21:32 ] ArrayList入れたいのかInteger入れたいのかはっきりしろ。
728 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:23:55 ] 可変長のちんこ入れたいです。
729 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:49:14 ] ArrayList<Integer>[] a = new ArrayList[10]; でいいんじゃね?
730 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/02/24(日) 18:54:02 ] 現在作成中の ダイクストラ法による最短経路探索プログラムです。 www.uploda.org/uporg1268729.zip.html うpしました。 これでListを使えると便利なので使いたいと思ったのですが、 具体的に今findShortestPath @ MainPanel というのを実装しています。 ここで、toArray周辺でエラーが出て、どういう事だかさっぱり分かりません。 エラーの原因が分かる人は教えてください。
731 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:06:16 ] 730 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
732 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/02/24(日) 19:08:57 ] さっぱり分からない。
733 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:37:52 ] ProcssBuilder にカレントディレクトリ指定できるものがあったとオモ
735 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:04:50 ] JMenuBarの中にメニューを2つ追加し、それぞれのメニューの中に 同じ名前のJMenuItem、同じActionListenerをセットした場合、 それぞれのMenuItemが選択された際の処理を変えることは可能でしょうか ネットや書籍を調べてみたところ、JMenuItemが選択されたイベントが発生した場合、 そのイベントの名前をgetActionCommandで取得し、条件分岐を行っていましたが 同じ名前のItemが存在する場合の条件分岐方法を見付けることができませんでした 諦めてそれぞれのItemに別々のActionListenerクラスをセットするしかないのでしょうか
736 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:07:51 ] getSourceとJMenuItemを==で比較するという手もある
737 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:21:18 ] 同じ名前のJMenuItemってのが設計おかしくねえか? 見た目が同じだとしても場所とか違う識別子にはなるだろ
738 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:22:28 ] マルチキャストソケットを利用した、簡易チャットルームの ようなものを作成しているのですが、現在接続中のユーザーを 表示させる部分がうまくいきません。 IPで表示させるのですが、取得の方法が悪いのでしょうか? ユーザー表示部分だけなので、宿題スレでなくこちらで質問させて いただきました。よろしくおねがいします。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/217.java
739 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:30:45 ] うまくいかないでは解らん。 例外が発生するのか、処理がそこを通らないのか、ちゃんと情報を出せ。 あと、直リンできねーぞ
740 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:50:37 ] >>734 レスありがとうございます。 できればRuntime.getRuntime().execでやりたいと思うのですが、無理でしょうか? やはりjdk1.5ならProcssBuilderを使った方が良いのかな・・・。
741 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:02:36 ] >>739 失礼しました。 特にエラーが出て処理が停止するというこはなく、 表示ボタンを押してもnullが返ってくるため ユーザーのIPが上手く取得できていないのでは ないかと思っています。 ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/main.htm の217番にUPしてあります。
742 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:09:58 ] >741 System.out.println( "ユーザー表示ボタンが押されました" ); って行は通っているのでOK? あとメッセージの表示は問題ない? System.out.println( "アドレスを新規登録しました" ); って行は通ってないのか?
743 名前:デフォルトの名無しさん [2008/02/24(日) 21:24:27 ] tomcat5.5 eclipse を使用してwebアプリを作ろうと思っています。 一つのプロジェクトで複数のTomcatを動かそうと思っています。 この場合、ルートディレクトリが複数で ソースの出力先フォルダ一つしか設定できません。 ということは片方のルートディレクトリにしか サーブレットのクラスは置けないため、 片方のtomcatからしかソースを参照できません。 こういった場合どうすればよいでしょうか。
744 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:38:05 ] 早速見ていただきありがとうございます。 >>742 >System.out.println( "ユーザー表示ボタンが押されました" ); の部分はシステムコンソールに表示されているため 通っているものと思われます。また、メッセージも ""で囲まれている部分はきちんと表示されています。 >System.out.println( "アドレスを新規登録しました" ); この行もシステムコンソールでは表示されているので 通っていると思うのですが・・。
745 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:39:48 ] すまんがだれか、>>743 をエスパーしてくれ。 何となく解る気もするが、 なんで、エクスポートしたwarファイルをもう一つのTomcatに置くのではダメなのかが解らない。
746 名前:デフォルトの名無しさん [2008/02/24(日) 21:43:33 ] >>743 何のためにそれをするのか知らないがeclispeはtomcatのラウンチャーじゃない tomcatは別途立てて、そこにDeployするべき あとeclipseの1プロジェクトで複数のWebアプリケーションを動作させようというのも間違い プロジェクトを分けなさない
747 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:50:47 ] >744 "現在の接続ユーザーは " + userlist + "\n" の部分だが、JTextAreaにまったく反映されないのか? 中身だけが空なのか、どっちだ?
748 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:53:00 ] JDK 6 Update 4が落とせないんですが何が問題なんでしょうか。 エラーは承認することができないという内容で、いくつかの環境で試しましたが同様です。
749 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:53:30 ] >747 userlistの中身がからで 現在の接続ユーザーはnullです という表示になっています。
750 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:56:26 ] >>749 Chatroom#userlistに何も代入していない
751 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 22:02:11 ] >750 回答ありがとうございます。 userlist.add(clientAddr); 上記の文でアドレスが代入されるものと思っていたのですが、 この文の書き方では代入されていないということでしょうか?
752 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 22:03:12 ] それはローカル変数のuserlistであってChatroom#userlistではない
753 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 22:28:32 ] >752 ありがとうございます。入ってると思ってたものが 別のものだったのですね。 助かりました、ありがとうございました。
754 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:45:28 ] >754 super.clone() を使うかどうかは状況次第じゃね? というか、普通はsuper.clone()は使えない方が多いと思う。 帰ってくるのはParentクラスのインスタンスだから、結局は値をコピーしなければならなくなるから。
758 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:46:09 ] >>754 何のための継承、何のためのオーバーライド。 何がスマートじゃないんだ。感覚的に言われてもな。 ちなみに、cloneを使うなら、Cloneable を implements すること。 // 詳しくは Clonable, Object.clone 参照。 >>756 同じパッケージからもアクセスできるから。以上。
759 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:47:23 ] >756 もう1つ条件があって、「同一パッケージ内からのアクセス」もOK
760 名前:756 [2008/02/25(月) 00:01:54 ] 758,759 ありがとうございます。 指摘を受けて調べました。 パッケージ化しないことには、ソースはばらばらのパッケージ的な扱いと、勝手に勘違いしていました。 デフォルトのパッケージ、という扱いになるのですね。 勉強になりました。
761 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:09:47 ] と言うかデフォルトパッケージの使用は避けてくれ。
762 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:11:27 ] >>757-758 ありがとうございます。 ちょっと理解できてきました。
763 名前:756,760 mailto:sage [2008/02/25(月) 00:18:14 ] >761 というと、必ず特定のパッケージに入れることを明示することが望ましいということでしょうか。 自分今回痛い目にあったので、761の指示に従って付いてまいりますが。
764 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:48:09 ] >>763 デフォルトパッケージ以外のパッケージに属するクラスから 一切呼び出しが出来ない。(JDK 1.4 以降) プログラミングの一般論としても 何らかの名前空間に所属させるのは 良い習慣だと思う。
765 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:00:16 ] >>754 普通はコピーコンストラクタを作る Cloneable は Java の失敗作とジョシュアっちが言ってました
766 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 04:11:37 ] これからjavaを学ぼうと考えています。 JAVAのSDK沢山種類があるようですが、 どれを使用すれば良いでしょうか?
767 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 04:28:17 ] >>766 多分新しいのを使っとけばいいんじゃないだろうか
768 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 04:54:25 ] 使う方のソースはそれで良いけど宣言する方のソースはアノテーション必要でしょ。
769 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 04:55:33 ] ↑誤爆
770 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 07:44:10 ] SE(スタンダードエディション)でおk
771 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 08:40:00 ] >>733 \→\\ それと、カレントドライブの変更まではcdで出来ないけど、 その辺は大丈夫かな?
772 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 09:14:34 ] Timestamp型の変数から"yyyy/MM/dd"といった形の文字列で 値を取り出すにはどうしたらよいでしょうか?
773 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 09:34:57 ] String s = new SimpleDateFormat("yyyy/MM/dd").format(timestamp);
774 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 09:37:02 ] >>772 SimpleDateFormat("yyyy/MM/dd")でformatすれば?
775 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 09:44:18 ] 質問です。 シングルトンを多数作りたいんですが、 private static Singleton instance = new Singleton(); public Singleton getInstance(){return instance;} private Singleton(){} といったおきまりパターンを各クラスに書かないと行けませんが面倒です AbstractSingletonを継承したらgetInstance()で各シングルトンのインスタンスが取れるようになる みたいな事ができれば便利ですけど、staticフィールドなのでそれもママなりません。 なんか旨い方法はありませんか?
776 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:01:15 ] >>773 , 774 ありがとうございます。 できました。
778 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:11:39 ] >>775 eclipse ならテンプレートを使って、少し楽が出来る。下のほうに例がある。 ttp://www.eclipsewiki.net/eclipse/index.php?%A5%C6%A5%F3%A5%D7%A5%EC%A1%BC%A5%C8 >>776 メソッドとその内部クラスとで共用で使う変数は、メソッド内 final として、コンパイルを通す。 他にも方法はあると思うけど、それ以上なら、クラス内クラスにしてちゃんと定義しましょ。
779 名前:デフォルトの名無しさん [2008/02/25(月) 16:41:22 ] String s = "ab" + \r + "cd" + \n + "ef"; 正しく直してください。
780 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 16:43:38 ] String s = "ab\rcd\nef"; 直しました。
781 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 16:43:54 ] String s = "ab\rcd\nef";
782 名前:781 mailto:sage [2008/02/25(月) 16:44:30 ] かぶった...orz
783 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 16:46:12 ] 780,781 ありがとうございます。
784 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 16:47:23 ] qa3808666 かぶってる...
785 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 17:24:32 ] それはかぶってるんじゃなくてマルチポストだろう…
786 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 17:47:04 ] tomcatのjsp-examplesにあるFORM認証のサンプルについて質問です。 まず操作を1->5の順で行った結果を書きます。 1.hostname:port/jsp-examples/security/protected/index.jsp にアクセスすると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 mailto:sage [2008/02/25(月) 17:51:39 ] 携帯のブラウザでも見るので「JavaScriptは使わない」という前提でお願いします。
788 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:37:01 ] 自作のある圧縮アーカイブの解凍ストリームを作ろうと思っています。 その圧縮形式はライブラリを持っており、InflaterInputStreamを利用すると比較的に楽に実現できると考えたのですが、 read()やread(byte[],int,int)など、いずれにせよユーザーが決めるバッファのサイズで解凍を行う必要があるため、今回のような解凍する側で単一バイト読み込み時に出力されるデータを決めるライブラリを持った圧縮形式ではどのように行うべきなのか分かりません。 解凍したデータもバッファリングして、ユーザーのサイズに合わせて出力すれば実現はできると思うのですが、何か他にいい方法はないものかと思い質問しました。 Inflaterのソースも読んでみたのですが、肝心の部分はnativeメソッドになっており結局どのような実装なのか分かりませんでした。良い方法がございましたら教えてください。
789 名前:デフォルトの名無しさん mailto:sage [2008/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 mailto:sage [2008/02/25(月) 19:27:03 ] ×return buf[pos++]; ○return buf[pos++] & 255; でした・・・
791 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:59:08 ] >>775 邪道かもしれんが。 なんか旨い方法、ということなら。 Enum の中に書く定数は1つ1つがシングルトンだ。 全定数に共通のメソッドも振る舞いが異なるメソッドも実装できるぞ。
792 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/02/25(月) 21:04:53 ] Javaにはプリミティブと参照が混在しています。 Listなどを使う時には参照型しか使えないのですが、 いっそすべてのintをIntegerに書き換えた方がいいでしょうか? プリミティブ型の扱いをみなさんどうしていますか? おれはRubyからJavaに来たので数字が参照型じゃないというのに すごく違和感を感じます。ましてや混在しているというのは非常事態です。 今すごく悩んでいます。 みなさんがどうしているかを知りたいです。
793 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:09:13 ] >>789 ネットに繋がらなくて返事が遅くなってしまいました。 聞いていた立場で申し訳ないです。 Inflaterを利用しようと思ったのは、形式に共通点が多く、いくつかをオーバーライドすればできそうな気がしたためです。 確かに本来の用途から外れますので使用すべきではありませんね。 やはりバッファかますことにします。 親切にどうもありがとうございました。
794 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:10:35 ] >>792 せっかくプリミティブ型があるのにわざわざオブジェクトにする必要はないと思います。 コストの問題ももちろんですが、何より扱いにくいです。
795 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:18:04 ] >>792 Integer って、オブジェクトだとは言っても、中のデータを書き換えられないから不便だよ。 List などには int を入れても auto boxing されるんだから、int のままでいいんじゃないかなあ。 みなさんがどうしているか、に関しては、「気にしていない」だと思う。
796 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:18:13 ] >>792 そういう言語だから受け入れるしかない Rubyは理想を重視した分遅くなってるし C#はプリミティブ型の扱いを変えて両立させてるけどその分複雑になってたりする
797 名前:デフォルトの名無しさん [2008/02/25(月) 21:42:46 ] Strint[] a = {"A","B"}; aの要素数を1にするtruncateみたいなものはありませんか?
798 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:54:32 ] 配列じゃなくてリストじゃ駄目なん?
799 名前:デフォルトの名無しさん [2008/02/25(月) 22:01:35 ] >>798 Strint[] a; という配列でやりたいです。 Strint[] a = {"A","B"}; ここで処理して"A"が不要だと分かって、 a = {"B"}; とすればよいのでしょうか? 以前のaはa = {"B"};する直前にガベコされるのでしょうか? それとも内部でtruncateみたいなことされて、aのアドレスは変わらないのでしょうか?
800 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/02/25(月) 22:04:44 ] >>795 配列のautoBoxingがないです。 例えば void methodA(int a) にInteger型を放り込んだらこれはBoxingされますが、 void methodB(int[] a) にInteger[]型を放り込むのはエラーになります。 配列からListを作る時にも参照型が強制されるので不利かと思いました。 (例えばArrayList<int>はエラーになる) >>796 JRubyもダメでしょうか?(速度に関して)
801 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:05:33 ] >>799 a = {"B"}; でよい。{"A","B"}はGCまかせ。 ちなみにGCは、不要になったら即実行される訳じゃないよ。
802 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:09:09 ] >>801 ありがとうございます。ガベコに任せます。
803 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:09:22 ] >>801 それ、初期代入でしかできないんじゃね?
804 名前:デフォルトの名無しさん [2008/02/25(月) 22:12:12 ] >>803 そうでした。 Strint[] a; という配列でやりたいです。 Strint[] a = {"A","B"}; ここで処理して"A"が不要だと分かって、 Strint[] aTemp = {"B"}; のように、もう1つ変数が必要ですか?
805 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:16:45 ] aTempの要素数はどうするの? ArrayListを作って必要な要素だけ追加していって後で配列に変換したほうが早い 配列でやるにしてもどうせ同じようなことを自分でやることになる
806 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:17:13 ] String[] a = {"A", "B"}; a = new String[1]; a[0] = "B"; でよくね?
807 名前:798, 803, 806 mailto:sage [2008/02/25(月) 22:18:52 ] >>805 んだなぁ。 ArrayList<String> a = new ArrayList<String>(); a.add("A"); a.add("B"); a.remove(0); とかでいいと思った。
808 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:25:09 ] >>806 そうできるんですね。ありがとうございます。 >>807 STLってまだよく分からないんです。でもありがとうございました。
809 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:27:18 ] STLw それはおいといて,>>806 でいいんだったら String[] a = { "B" }; と全く変わらないよ
810 名前:798, 803, 806 mailto:sage [2008/02/25(月) 22:28:13 ] STLはC++のライブラリのことじゃねーの?w ちなみに配列への変換は String[] array = a.toArray(new String[a.size()]); でいいと思う
811 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:57:41 ] >>808 おまいは勘違いしてる。Javaの配列はサイズを変更(Cで言うところのrealloc)出来ない。 配列限定で長さを変えるには、新しい別の配列を作ってコピーするしかない。 今まで挙がってた例は全て新しい別の配列を作っているだけ。 長さが変わる場合、通常はArrayList等のList系のコレクションを使い、 どうしても配列が必要な場面でだけtoArray()で変換する。
813 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:07:52 ] >>800 配列は既にオブジェクト(変数には参照が収められる)だから、auto Boxing はいらないし、 List にも add できる。 int[] を要求している所に Integer[] を放り込むとエラーになるのは型が違うから。 放り込めることを期待するのは int に対応するのが Integer、int[] に対応するのが Integer[] という感覚があるからだろうが、 この4つの中で、int だけがプリミティブ、Integer だけが値変更が不便なので、 Integer は int をオブジェクトにするためだけにある特別な存在で、 対称性はあまり無い、と考えた方がいい。
814 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:30:24 ] >812 変更不可なgetterで結構toArray使わんか?
815 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:32:42 ] 一件教えてください。 main()の中で記述していた処理を、 ほかのファイルの関数に移動したいのですが、どのようにすればよいかわからず、教えてほしいです。 (サブルーチンで処理をするような考え方で。) c言語で言えば、 main(){ 一連の処理のまとまり1 一連の処理のまとまり2 } となっていたものを main(){ func1(渡す必要のある変数) 一連の処理のまとまり2 } func1(引数){ 一連の処理のまとまり1の代替 必要があればreturn文 } といった感じ(型とか細かいことは別として。)に分割したいのですが。 今の自分の知識では、クラスを作って、メソッドを作って、 メソッドをインスタンス化して、 仮にインスタンスが設定された変数の名前がaaaとしたら、 aaa.メソッド(引数) とするくらいしか、頭が回りません。 メソッドを利用したいだけで、インスタンス化が必要なのか疑問で、やりかたがあるような気がしまして。 よろしくお願いします。
816 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:39:52 ] >>815 別クラスにする必要がないのなら、別クラスにしなくていいんじゃない? mainのほかにクラスメソッド書けばよい。 他からも使いたいけど、インスタンスを作る意味がないのなら、ユーティリティクラスという手もある。 java.lang.Mathみたいなクラス。メソッドは全て、クラスメソッドとして定義する。
817 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:45:00 ] >>815 >メソッドを利用したいだけで、インスタンス化が必要なのか オブジェクト指向の世界では必要だという前提なんだよ 原則としてすべてのメソッドはどっかのクラスに属していて、インスタンスを介して使用する事が基本 逆に言えばクラスに属するけど、インスタンスを介さないmainメソッドの方が特殊 慣れるまで、メリットを感じるまでは解らんと思うが、最初はそういう世界と思うしかない
818 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:47:04 ] >>815 メソッドはいくら分割してもメソッドだ。 その例だとオブジェクトになるのは (渡す必要のある変数) ってやつだけだな。 main() で 渡す必要のある変数の型 obj = new 渡す必要のある変数の型(); して、 obj.func1()
819 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:47:46 ] >>809 Strint[] a = {"A","B"}; ここで処理して"A"が不要だと分かって、 Strint[] a = {"B"}; ↑aが2重定義になるので>>806 の方法にしました。
820 名前:デフォルトの名無しさん mailto:sage [2008/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 mailto:sage [2008/02/25(月) 23:49:35 ] 815です。 レスありがとうございます、816,817。 >クラスメソッド(816) クラスメソッドの概念を知りませんでした。ありがとうございます。 >オブジェクト指向の世界では必要だという前提なんだよ(817) その考えを理解できるように努力していきます。 指摘ありがとうございます。
822 名前:815 mailto:sage [2008/02/25(月) 23:51:52 ] >820 レスポンス記述している最中に更新されたようで、失礼しました。 816のおっしゃる、クラスメソッドの具体例ですね。 わかりやすい説明ありがとうございます。
823 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:51:53 ] >>815 >ほかのファイルの関数に移動したい >サブルーチンで処理をするような考え方で >メソッドを利用したいだけで インスタンス化したくないなら当然インスタンス化は不要だ。
824 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:58:44 ] >>815 他の方が指摘してらっしゃるように、 メソッドは、必ずしもオブジェクトに関連付ける必要はありません。 蛇足。Javaでは「他のファイルに記述する」という概念はありません。 あくまでも、クラスを分けるかどうか、です。 それゆえか、クラス内クラスである内部クラスが4種類あります。
825 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/02/26(火) 00:30:07 ] JRubyやってみようと思う。
826 名前:815 mailto:sage [2008/02/26(火) 00:32:49 ] 815です。 821内の『>818』は『>820』の間違いですね。失礼しました。 >818 今コーディングして確認しました。 クラスメソッドを直接呼び出すか、 通常に、通常のメソッドをインスタンス化して呼び出すかですね。 >823 >インスタンス化したくないなら当然インスタンス化は不要だ。 いま確認とりたいと思いコーディングしてみたのですが、 ほかの方が示された用にstaticにするほかに方法あるのでしょうか。 staticなメソッドにするか、インスタンス化するか以外で試せませんでした。 staticにすることをおっしゃっているのでしょうか。(私の821,822のように時間差?) >824 内部クラス。理解できるよう精進します。Tipありがとうございます。 自分の質問に対して、 816の考え方、817の考え方、の二種類の意見を持つ方に分かれるように感じました。 オブジェクト化するべきとの考えと、ユーティリティメソッドでいいのではという考えと、です。 このどちらを選ぶかは、個人やGrの考え方次第ということなのでしょうか? それとも、オブジェクト指向的には後者の方が、望ましいが、面倒な手続きは好まれないので、前者が使われるということなのでしょうか。
827 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:42:12 ] >>826 おおざっぱには、 ・データが主体ならオブジェクトにする。 ・ロジックが主体ならクラスメソッドにする。 くらいで良いのではないかと思ってる。(無論例外は山ほどある)
828 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:50:08 ] こんばんわ。 eclipse使いはじめたのですが、eclipseに指摘されるエラーの意味がわからないので教えてください。 たとえば、まさに820のコードを、 eclipseでひとつのファイルに記述すると、 クラスSampleを別のファイルに書けといわれます。 Javaのルールなのでしょうか。 どういった原因なのか教えてください。 eclipse特有で指摘されるものなのでしょうか?
829 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:51:19 ] >>826 何を作っているのかによる。 なんらかの概念(伝票・取引みたいな業務概念や、ファイル・ウィンドウのようなシステム概念)の、 特定のひとつに対する操作であれば、インスタンスメソッドとすることが望ましい。 逆に、概念に属する全ての対象に対する操作や、そもそもその対象を作り出す操作などはクラスメソッドになる。 ただし、実際にはクラスという概念とは関連づかない操作もあり、 Javaの場合は全てのメソッドがクラスに定義されなければならないため、便宜的にクラスメソッドとする。
830 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:52:53 ] >>828 Javaのルール。 publicのクラスはファイル名=クラス名としなければならない。 なので、自動的にひとつのファイルにはpublicクラスは一つまでしか定義できない。
831 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:58:39 ] >>828 830 の通り、Javaの仕様です。 public を外すか、クラス内クラスにするか、 一応、一つのファイルに複数のクラスを記述する方法はあります。
832 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:03:07 ] 828です。 830氏、831氏、すばやい回答ありがとうございます。 勉強になりました。 publicがキーワードでしたか。
833 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:21:48 ] アクセス修飾子について説明もらえませんか。 アクセス修飾子には、public, protected, privateがあり、 アクセス制御の範囲としては、上記3つのほかに、修飾なしを含めた4つがあるようです。 で、最後の修飾なしなのですが、 実際に仕事でのプログラミングや、アプリケーションの作成で、使用されるのでしょうか。 範囲が修飾ありの3つと異なるのですが、何も記述しないというのが、どうにも好きになれないみたいな。 基本的に、何らかの修飾をしましょうということは無いですか?
834 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:31:30 ] >>833 たしかに気持ち悪いが、そう決まってる以上、そういうもんだと思うしかない。 使う場面はときどきあるよ。 トップレベルクラスは、publicにしたくなければ、他に選択肢もないし・・・
835 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:40:22 ] >>833 クラスは良くパッケージデフォルトにするなぁ。 パッケージをコンポーネントと見立てて、publicがインタフェースでパッケージデフォルトが実装の詳細。 メソッドやフィールドではあまり使ったことないや。
836 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:55:23 ] はじめて手に入れたIDEがeclipseで今までCとWinSDKをエディタで何とかしようと苦労してたのが嘘みたいに GUIなアプリケーションがさくさく書けてJavaマンセーな状態なのですが、 そろそろ他の言語ってかC++で同等の事ができるようになりたいと思い始めてます。 そんなぼくにお勧めのC++用のIDEを教えてくれませんか? eclipseみたいにCtrl+spaceなどでガンガン補完できるようなやつで、 リファクタリングが強力なやつがよいです。 (若干スレ違い?)
837 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:09:29 ] >>836 全くスレ違い CDT
838 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:46:20 ] >>833 派生先からだけ見えて欲しい時は多数あるけど パッケージ内からだけ見えて欲しい時がないので デフォルトスコープを使う機会がない。 継承・実装の階層とパッケージ階層とは全く別個のものなのに 1系統の修飾子で片付けようとしたのに無理がある。 パッケージ階層は無視するか2系統用意して組み合わせ可能にしたら良かったのに。 C#(.NET?) だと名前空間は無視するかわりに、 アセンブリ境界に対して internal で制限するかどうかを選べる。
839 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:20:53 ] >>833 そこそこ可視性があるが、言語的に最後の砦であるパッケージの境界でカプセル化してセーフ というのがパッケージプライベートなので、とりあえず書いてみる的に使うのは、ちょうどよいのかと。 そして、とりあえず書いてみるレベルだったら、 何も修飾子を書かなくてもええじゃないか、のような乗りかと。 なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。
840 名前:833 mailto:sage [2008/02/26(火) 03:45:25 ] 833です。 返信にただいた内容を元に、学習します。 >839 >なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。 この点について、初心者向けの説明をいただけませんか。 時間かけると理解が進む資料の場所もみつかるのでしょうが。
841 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:01:30 ] >>819 a = new String[]{"B"};
842 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 08:12:42 ] >言語的に最後の砦であるパッケージの境界でカプセル化 JDK7になったらスーパーパッケージが出来るんだけどねぇ。 JDK7は本当に完成するんだろうか。
843 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 10:47:38 ] >>841 ありがとうございます。それにしました。
844 名前:デフォルトの名無しさん [2008/02/26(火) 17:19:58 ] 出力を行うときに何でoutputstreamwriterを使わなければいけないのですか? テキストでこの章に入るまではこれを使わなくても出力できていたわけ ですから。
845 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:22:42 ] 好きなものを使えばいいんじゃない?
846 名前:デフォルトの名無しさん [2008/02/26(火) 17:25:51 ] ストリームの意味が分からん
847 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:24:48 ] >>846 ベルトコンベアみたいなものを思い浮かべろ そこに物(データ)を置くと、それはどこかに流れていく それが出力ストリームのイメージ (streamは流れという意味) どこに流れていくかは、それがどんなストリームかによる 例えば FileOutputStream だったら、ファイルに書き込まれる System.out だったら、標準出力に行く ソケットだったらネットワーク上に送信されていく 出力先が何であるにせよ、そこにデータを書き込むというのは同じ そういった、何かしらのデータの書き込み口というものを抽象化したのが、出力ストリーム >>844 別にOutputStreamWriterを使わなければならないことはない 出力を行う方法は他にもいくつかあるが、 そのテキストでは単にそのうちのひとつを紹介してるだけだろう
848 名前:デフォルトの名無しさん [2008/02/26(火) 18:42:43 ] >>847 分かりやすいな説明ありがと!!!
849 名前:デフォルトの名無しさん [2008/02/26(火) 18:51:52 ] 一通りテキスト終わったら、トレーニング用のテキスト売ってるんだけど それ買ってやったほうがいいかな? てか、なんかJAVAの勉強しても何か実感わかないな〜 やっぱ実際にもの作らんとそういうのは分からないものなのか?
850 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:59:39 ] >>849 どんなテキストか知らないけど ウィンドウ開いたりボタン押したり絵を出したりといったGUIをやると 実感をわかせるのに効果的だと思う
851 名前:デフォルトの名無しさん [2008/02/26(火) 19:07:46 ] ほうほう
852 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 19:13:33 ] >>849 何か自分で作ってみたいものはないの? 目標を決めるといいかもよ
853 名前:デフォルトの名無しさん [2008/02/26(火) 20:41:10 ] 今高校3年生だから、専門学校へ行ったときの予習をしてるんだ。 javaでどんなの作れる?とりあえず簡単なものを作ってみたい。
854 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:42:27 ] どんなものでも
855 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:44:02 ] そんなことよりもう一年勉強した方が
856 名前:ibj [2008/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 [2008/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 [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:56:49 ] 専門なんて行っても勉強してる暇ないぞ。 情報系の大学いった方がまし
860 名前:ibj [2008/02/26(火) 21:00:13 ] あう・・改行多すぎて書き込めない
861 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:44:23 ] >>856 Employee にも何故か name があって、equals で、 other.name.equals(name)で比較してるんじゃないかと。
862 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:58:27 ] 力添えください。 ttp://www.nextindex.net/java/thread/sleep.html に記述のあるソースの中で、 main()がthrows InterruptExceptionとしてある理由がわからないのですが、 どういう意味なのでしょうか。 教えてください。 今回実行してみた感じ、定義をしなくとも実行には問題がありませんでした。 どの部分が、InterruptExceptionを投げるといっているのでしょうか? 少なくともtry-catchの外しか考えられないのですが、どこかわかりませんでした。
863 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:06:39 ] そのページの赤文字で書かれてるThread.sleep(1000);の所が投げてる。 javadocに書いてあるから読むと良いよ。
864 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:16:59 ] 文字列のサイズの取得で、 String s="あ"; 2を取得する方法を教えてください。
865 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:18:11 ] s.getBytes().length
866 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:28:19 ] 3になりました
867 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:36:09 ] 862です。 レスありがとうございます、853。 自分もThread.sleep(...); がInterruptedExceptionを投げる可能性があることはなんとなく覚えたのですが、 今回の場合は、try{}catch(InterruptedEception e){}、の記述によって、 メソッドがthrowsを設定する必要は内容に感じたのです。 うーん…。
868 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:37:35 ] s.length() + 1
869 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:06:26 ] "qa3813364".length();
870 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:17:57 ] >>865 GJ!
871 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:40:21 ] >>840 >>なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。 >この点について、初心者向けの説明をいただけませんか。 なんてことはない、メソッドをオーバライドすると、親クラスがそのメソッドを呼び出している場合 その挙動にも影響を与えるため、どのような影響があるか(どのように呼び出されているか)を 知る必要があるという意味で、実装が漏れてるという見方ができる。 継承よりも委譲の方が強固だが、継承のほうがお手軽なので 最初は継承を使って、事が複雑になってきたら、委譲にリファクタリングするのがアジャイル的
872 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:44:06 ] 委譲めんどくせえ
873 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:59:17 ] >>867 InterruptedException を飲み込んでいいのは、 実行中のタスクのキャンセレーションポリシーと 実行しているスレッドのインタラクションポリシーが明記してあり (あるいはそのスレッドのライフサイクルの制御権があり)、 ちょうど両者とも、InterruptedException を飲み込んでOKな場合だけ。 インタラプトを遅延させて処理を継続したい場合は Thread.currentThread().interupt()を 処理が継続できない・放棄する場合は InterruptedException を再投げするのが定石
874 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 03:00:53 ] >>867 そうだね必要ないな たぶんどこかからコピペしてきた消し忘れかなんかだろう ちなみに、InterruptedExceptionを揉み消すのは良くない習慣だ
875 名前:873 mailto:sage [2008/02/27(水) 03:13:13 ] 間違った。 2つのポリシーが上手い具合にOKなときにやっていいのは、インタラプトの発行だった。 タスクが InterruptedExceptionを飲み込んでいいのは、 そのタスクが IntteruptedException を飲み込んでOKなポリシーを持つスレッドからしか 呼び出されないことが保証されている場合だけだな、たぶん main() は、どこからともなくやって来たスレッドで実行されるから、 基本的に飲み込んではいけないはず
876 名前:873 mailto:sage [2008/02/27(水) 03:50:52 ] 間違った。 「インタラプトすると不正な挙動をします」というポリシーを明記したタスクとして InterruptExceptionを飲み込むならば、単に、 「インタラプトしてはいけないタスク」 +「インタラプトするとエラーメッセージを吐いて終了するっぽいメインスレッド」 =「このスレッド/タスクにインタラプトしてはいけない」 となるだけだった。さあ、どんどん飲み込みましょうねぇ
877 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 05:38:33 ] >>864 s.getBytes("Windows-31J").length など。 ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#getBytes(java.lang.String)
878 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 08:04:00 ] Beanのbooleanプロパティのgetter/setterメソッドの命名について質問です。 たとえばbeautifulというプロパティとしたら規則に従いますと 単純にisBeautiful(),setBeautiful(boolean)となります。 しかし、別の例で「上書き確認を表示する」など動詞的なbooleanプロパティ、confirmOverwriteを考える場合 isConfirmOverwrite(),setConfirmOverwrite(boolean)と、とても気持ちが悪いです。 このような場合は変数名を考え直す必要があるのでしょうか? それともこういうもの、ということで割り切ったほうがいいのでしょうか?
879 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:13:57 ] 最近はokwaveとか教えてgooとかと マルチするのが流行りなのか
880 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:19:46 ] -ableをつける isConfirmOverwritable() setConfirmOverwritable(boolean)
881 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:23:42 ] その場合 confirm に able を付けるべきだと思うんだ
882 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:52:15 ] なるほどー!かなりすっきりしました。 ありがとうございます!!
883 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:17:58 ] JasperReportsで帳票毎に四角形の色を毎回変えたいんだけど どうしたらいいですか? iReoprtで rectangle、backcolorを変更するというのはわかるんですが、 毎回違うとどうしたらいいのでしょうか?
884 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:00:12 ] 毎回ってのが意味解らん。 毎ページなのか、毎項なのか、毎行なのか、毎カラムなのか。 まずは日本語でおk
885 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:20:01 ] そもそもJava以前に、自分が抱えている問題を把握できていないケースが多い気がする。 だから日本語がおかしいし、説明されても理解できない。
886 名前:デフォルトの名無しさん [2008/02/27(水) 12:41:34 ] 右シフトでどっちが高速なのか試してください。 >> >>>
887 名前:883 mailto:sage [2008/02/27(水) 13:01:04 ] 枚ページです。 コンパイルしちゃった後でも変更できるんですか?
888 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:26:21 ] sunはInterruptedExceptionは握り潰すな再スローしろってスタンスだっけ?
889 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:26:24 ] >>888 このへんが参考になるかも www.ibm.com/developerworks/jp/java/library/j-jtp05236/
890 名前:デフォルトの名無しさん [2008/02/27(水) 19:00:22 ] java sound を使うとパソコンから盗聴が可能ですか
891 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:06:52 ] こっちでやれ pc11.2ch.net/test/read.cgi/tech/1201346803/l50
892 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:56:31 ] Java の理論と実践: アトミックで行く www.ibm.com/developerworks/jp/java/library/j-jtp11234/ このページにある、リスト3: SimulatedCAS クラスの compareAndSwap について質問です。 SimulatedCAS のコードのすぐ下にある説明書きに、 「CASベースの並行アルゴリズムは、スレッドがロックを待つ必要が全くないので、lock-freeと呼ばれます」 という記述があります。 しかし SimulatedCAS の compareAndSwap メソッドは synchronized メソッドに なっています。Simulated って書いてあるから実際使うときは違うやつ使うのか なと思いきや、 リスト4 のコードで思いっきり使ってあります。 compare-and-swap アルゴリズムを真似たプログラムは、 synchronized であっても ロックされないように最適化されるということでしょうか?
893 名前:デフォルトの名無しさん [2008/02/27(水) 22:05:06 ] レンタルサーバー借りて 毎日一回株価を取得してDBに放り込むプログラムを作ろうと思ってるんだけど JAVAで時間がきたらサーバー上で実行するってことかのう? どんな仕組みでできる? それだけわかればDBにも移せるしダウンロードもできそうなだんだが
894 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:17:24 ] 普通 cron 使う。
895 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:33:28 ] 実行先のJREバージョンに応じて違う処理をさせたいと考えています。 バージョンに応じて違うクラスファイルを読み込むようにするには どうしたらよいでしょうか? JARアーカイブとMANIFESTファイルを利用しており、クラスライブラリが たくさんあるのでバージョンごとに違うJARを作成するのは避けたいのですが・・・
896 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:43:07 ] Class.forName(javaVersionName+ClassName).newInstance();
897 名前:867 mailto:sage [2008/02/28(木) 00:01:48 ] いくつかのレスポンスありがとうございます。 申し訳ないんですが、ぜんぜんわからないです。 1時間くらいgoogleしてみたのですが、 そこから派生するキーワードや、 似たような単語が、同様の意味を成しているのかもわかりませんでした。 せっかく手を差し伸べていただいたところ申し訳ありません。 飲み込む、もみ消す、握りつぶす、 非チェック例外、チェック例外、チェック済み例外、チェックされる例外… 飲み込むというのは、InterruptedExceptionを投げずに処理してしまうということなのでしょうか…
898 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:11:59 ] オブジェクト指向初心者です。 調べるの面倒です。教えてください。 このスレッドを読んでいて、初めて 委譲 を知ったのですが、 クラスの外部から、インスタンスのフィールドにアクセスできる仕様というのは、 オブジェクト指向的に、思い切り間違えなのでしょうか。 委譲 の概念が普通に使われるためには、 フィールドへのアクセスは、 クラスに所属するメソッド経由で、アクセスされる仕様である場合でないと、 アクセス方法に統一性がもたせられませんよね。 そもそも、このような質問をする原因が、 なぜフィールドの値をpublicにするなど、 所属クラス内のメソッド以外からの、フィールド変数(?)へのアクセスが許可される必要があるのか が、わからないためです。 質問の仕方が、気に入らなければ、無視してください。 たぶん調べてもまともな回答にたどり着くに、長い時間がかかりそうだと思い、怠けています。
899 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:19:18 ] 答えるの面倒です。教えません。
900 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:23:16 ] >>898 それは Java に対する質問ではない。 適当なスレを探すよろし。
902 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:29:32 ] >>898 問題ないんじゃないか。setter/getter があるってことは、すなわち public フィールドとほとんど等値なんだし。 ただ、フィールドへのアクセスと同時に何かしたい、外部からは read のみに変えたい、みたいなことってことが結構ある。 そこで、フィールドは private にして隠す。アクセスは public な getter/setter からのみ。というよくある構成に統一することで、 機能追加に対応しやすくなるからこうしましょう、という寸法。 中には「フィールドへのアクセスもオブジェクトに対する"操作"で あるから、メソッドであるべき」なんていう人もいると思う。 まぁその辺をどう割り切るかは個人個人によるのでは。 あと委譲の話と何が関係あるのかが分からなかった。
903 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:11:04 ] >>902 > 問題ないんじゃないか。setter/getter があるってことは、すなわち > public フィールドとほとんど等値なんだし。 1つ大きな違いがあるぞ。setter/getterの場合、本来は違うものを同じものに見せ掛けるのが簡単にできる。 後付けで振舞いを変えるとか、透過的に処理を割り込ませたりするとか、実体をリモートに持たせるとか。
904 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:33:31 ] setter/getterメソッドをわざわざ追加する意味がさっぱりわかなかったので publicフィールドにガンガンアクセスするコードを書いてるのですが、ひょっとして一般的じゃないんですか? >>903 さんがどういう処理を指してるのかいまいちつかめません。。
905 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:38:00 ] >>896 ,900 うわー、ありがとうございます! 早速試してみます。
906 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:38:32 ] >>877 やさしいなー
907 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:54:20 ] >>904 意味が分からなければ今のスタイルを続けていけばいい。 そのうち面倒ごとが起こったときにアクセッサの意義が分かるよ。
908 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 07:09:55 ] >>892 値を一つ変えるのに、払うコストをどれだけ小さく出来るか、という話。 この例はシミュレートだけど、ハードウェアでサポートしている CPU もあるよ、と言うこと。 「スレッドがロックを待つ必要が全くない」というのは、 リスト2で行われてるような処理をする必要がない、ということ。 リスト4で注目するべき点は、increment メソッド内の get と CAS の間で、 継続したロックが保持されていないこと。 そして、increment 自体が呼ばれてから値を戻すまでに value の get 値が 1 "以上"変わること。
909 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:16:22 ] test
910 名前:Hoge mailto:sage [2008/02/28(木) 11:32:12 ] はじめまして、質問させていただきます。 DJUnitを使って単体テストを行っているのですが、 テスト結果の確認方法として、 ○○クラスの△△メソッドが何回呼ばれたか? を確認したいのですが、方法がわかりません。 assertCalled(String, String); を使えば、メソッドが呼ばれたかどうかは確認できますが、 何回呼ばれたかは確認できません。 なにか良い方法はないでしょうか?
911 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:30:14 ] 未だに使っている所あるとは驚き
912 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:44:49 ] >>892 それらは 「振る舞いを示すコード」 というタイトルや Simulated というクラス名からわかるように、 単に動作を説明するための例にすぎない。 真似ても別に最適化されない。 実際にアトミック操作したい場合は java.util.concurrent.atomic.AtomicInteger を使う。 リスト5では AtomicInteger 使ってるだろ。
913 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:46:34 ] だって柏原だって経済学部じゃん
914 名前:Hoge [2008/02/28(木) 13:47:56 ] >>910 すいません。自己解決しました。 調査不足でした。 getCallCount(String, String) という便利なメソッドがありました。 ありがとうございました。
915 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:33:08 ] FileInputStream fis = new FileInputStream(in); // in : 入力ファイル fis.read(); .... fis.getChannel().position(0); fis.read(); ... fis.close(); 今までFileChannelを知らず、一方通行なInputStreamでランダムにアクセスできるのは気持ちが悪いのですが、こんな感じでポインター移動するのって安全ですか?
916 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:36:04 ] そのストリームがファイルだと分かってるから良いんじゃねーの。
917 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:20:24 ] そうですよね。おーかなり自由度が増しますね。 ありがとうございました。
918 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:11:27 ] swingについて、教えてください。 PaneとPanelの違いがよくわからないのですが、 JComponentを継承しているコンテナに関して、 付加機能が一番小さいものがJPanelで、 JPanel以上の何らかの機能が付け加わったものがPaneなのでしょうか? コンテナの中でPanelだけ、PaneでなくてPanelと呼ばれる理由は何なのでしょうか? あと、もうひとつ。 Containerクラスのオブジェクト(というかJFrame.setContentPane())をJPanelにキャストして、 コンテナとしている参考コードがあったのですが、 サブクラスの変数にキャストさせ(て代入する)理由がわかりませんでした。 なぜなのでしょうか?
919 名前:918 mailto:sage [2008/02/28(木) 22:13:40 ] 918です。 918で記述ミスしました。 >JFrame.setContentPane() JFrame.getContentPane() でした。 (JFrame#getContentPane() と記述するとどういう意味なのでしょうか…。) よろしく御願い致します。
920 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:29:34 ] >>918 さぁ? 名前なんて付ける人の趣味みたいなもんだし、深く考えても仕方ないような ちなみに、JComponentを継承してるコンテナ、というが JComponentはContainerのサブクラスだから、JComponent自体がコンテナだよ まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・ ContainerになくてJPanelにあるメソッドを何か使いたかったんじゃないかね コード見てわからなければ書いた人に聞くしかない JFrame#getContentPane()はJFrameクラスのgetContentPane()メソッドのこと JFrame.getContentPane()と書くと、staticメソッドを呼んだ戻り値について言ってるようにも見えるので、区別のために
921 名前:918 mailto:sage [2008/02/28(木) 22:38:34 ] >まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・ !!!え? そうか、継承しているから継承もとの機能はあるのか…。 無効になっていて然り、とか、どこかで思っていたのか、気がつきませんでした。 ContainerのオブジェクトをContainerのサブクラスにすると、サブクラスのメソッドが使えるということで? これは、例外が発生しそうで危ない予感もするのですが、 そういうコードを意識して使うような設計もあるのですか? >JFrame#getContentPane() ありがとうございます。自力だとどれだけ時間かかったかわかりません。 これをgoogleにはどうすればいいんだろう…。記号が…。スレ違いですね、失礼。
922 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:49:18 ] >>921 >ContainerのオブジェクトをContainerのサブクラスにすると、サブクラスのメソッドが使えるということで? いや、まさか。 JFrame#getContentPane()が返すContainerが実際にはJPanelだとわかっている場合だけ出来る。 実際にJPanelを返すからといっても、ドキュメントにそんなことは書かれていないので、良い習慣とは言えない。
923 名前:918=921 mailto:sage [2008/02/28(木) 22:50:58 ] >920 >まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・ 感動した。 感動しました。 変な方言を覚える前に、920の指示の元Javaを学びたい! 自分に本か、Web資料の推薦を!
924 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:59:41 ] graphic JAVA Mastering the JFC これ読めばSwingの仕組みは大抵わかるよ。 AWTから読むと上下*2の四冊だけどかなり勉強になる。
925 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 23:07:27 ] >>921 > 例外が発生しそうで危ない予感 どうしてもやりたければ、instanceof でJPanel だと確認してからキャストを行う。 というより、キャストの前には必ず instanceof で対象を確認すること。
926 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 08:02:24 ] 質問です。 javaはビッグエンディアンという記述をよく見かけますが、 その根拠がよくわかりません。 例)ttp://www.geocities.jp/flame_freezing_charm/Works/Memo/JAVA/prog.htm ご存知の方いましたら教えてもらえないでしょうか?
927 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 08:06:33 ] int x = 0x12345678; System.out.printf("%x%n", x & 0xFF); これが 78 と出ればビッグエンディアン、12 と出ればリトルエンディアン。
928 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 08:10:58 ] >>927 そのコードを実行しても、実行したプラットフォームのみでしか エンディアンは確定しないのではないですか?
929 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 08:49:18 ] >>926 java.io.DataInput#readInt() とか java.io.DataOutput#writeInt(int) みたいに、 標準APIの一部のクラスがビッグエンディアン使ってて、 さらに、1.3までは標準APIにリトルエンディアンで入出力できるクラスが無かったから。
930 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 08:53:43 ] >>928 というか、>>927 のコードを(System.out.printfをprintfに置き換えたものを) C言語でやっても、エンディアンなんかわからないけどね。
931 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 10:44:36 ] はいはい! 先生方に質問よろしいでしょうか! Javaアプレットを使ってブラウザ画面の自動撮影を行いたいんですが、どういう組み方をすれば良いんでしょうか! 訪問者が来る度にスクリーンをキャプチャしてサーバーに保存、 自分の環境では確認できない動的なサイトの動作チェックに使いたいと思います!
932 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:13:12 ] >>931 セキュリティ上の問題があるので無理。
933 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:52:57 ] 質問です。 www.techscore.com/tech/J2SE/Thread/5-2.html 上記のソースにて、queue.size() == 1の時は、put()からのqueue.addFirst(obj)呼び出しと、 get()からのqueue.removeLast()呼び出しが同時に呼び出される可能性があり、 LinkedListはスレッドセーフではないから問題あり、と思うのですが認識あってますか? notifyAll()の使い方の解説なので、ソースにケチをつけてる訳ではないです。
934 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:10:26 ] >>933 synchronized付いてるから同時には呼び出されない
935 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:29:18 ] >>932 ええ、そんな! 何とかなりませんか! 先生!
936 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:39:42 ] 例えば! Robotを使いスクリーン画像を取得! そのデータをURLConnectionでCGIに送り、 CGIでログを保存するみたいな形でできそうな気がするんです! 問題はRobotの自動実行が可能かどうかで! もし不可能なら利用者にボタンを押させる方法でも構いません! やりたいのは動的なサイトの確認であって、不正行為ではないんです! だから利用者の確認をしっかり取らなければならないというのであれば従います! 先生お願いします! 僕に僅かでも良いので知恵をお貸し下さい!
937 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:50:40 ] 例えば! Robotなんてアプレットで許したらマウスも自動で動かせる! そしてマウスで勝手に送信ボタンを押させ、 CGIで不正取得なんかもできそうな気がするんです! 問題はその動作が利用者がやったのかRobotがやったのかで! もし不可能なら不正取得かサイトの確認か判断が付きません! やりたいのが動的なサイトの確認であって、不正行為ではないと証明できないんです! だからアプレットではそんなことは許されていなくて、それにみんな従います! 先生お願いします! 僅かでもいいので理解してください!
938 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:57:58 ] javaで画面のキャプチャなんて取れるの?
939 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:01:16 ] 質問者も言ってるように、Robot使えば可能 あと、ぐぐったら q.hatena.ne.jp/1138377277 こんなんがでてきたよ。 これで目的は達成できるかな?
940 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:03:14 ] いつぞやの謎スクリプトを髣髴とさせるな。 // CGI を設置できるのだから、問題のSSを送ってもらえば終了。 >>938 java.awt.Robot.createScreenCapture(Rectangle) で出来ますよ。
941 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:12:46 ] >>939 ありがとうございます先生! ttp://browsershots.org/ このツールでほとんどの環境が確認できました! さすが先生です! また何かあったときよろしくお願いいたします!
942 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:25:28 ] >>937 ええ! ということは先生! アプレットではRobotの使用ができないということなんでしょうか!
943 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:55:31 ] >>942 署名付ければ出来なくは無い でもそんなアプレット誰も実行してくれないだろう スクリーンショット自動送信なんて、機密情報もれまくり お前が今見てるその秘密の画像も勝手に送信されてるよ
944 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:50:25 ] >>943 そうなんですか! 何から何までありがとうございます!
945 名前:デフォルトの名無しさん [2008/02/29(金) 20:28:21 ] 技術的に出来ないのと倫理的に出来ないのは分けて書こうぜ 紛らわしい
946 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:12:49 ] >>941 で目的達成できてるなら、質問者には技術的にできるかできないかなんてどーでも良くなってるんじゃ?
947 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:39:40 ] Script API で実行するスクリプトだけセキュリティ制限かけられない? 今のままだとファイル消したりネットワークアクセスしたりやりたい放題なんだけど。
948 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:05:29 ] 標準APIじゃ無理。
949 名前:デフォルトの名無しさん [2008/03/01(土) 03:28:21 ] コメントをUTF-8で書いてるんだけど、Javadocにすると文字化けする。 何とかできないでしょうか?
950 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 03:33:02 ] >>949 javadoc コマンドの -encoding か -charset これぐらいはマニュアル見て発見しよーぜ。
951 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 03:33:04 ] >>949 javadoc -encoding UTF-8
952 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 03:37:38 ] >>949 javadocだけじゃなくてコンパイルするときにも警告が出ない? システムのデフォルトの文字エンコード以外を使うときはencodingオプションを
953 名前:デフォルトの名無しさん [2008/03/01(土) 07:52:08 ] 本当に基本的な質問で申し訳ありません。 フォントを変更したときに setFontでPLAINに変更してもデフォルトのボールドのかかった フォントが印刷に反映されません。 どこかで読んだと思い過去スレで探したのですが見つかりません。 教えていただければ幸いです。
954 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 09:18:13 ] >>955 1. 2 と同じ原因。i の後のセミコロン。 3. ファイル名と public なクラス名が違う。 4. p_calc クラスがコンパイル出来ず、実行ファイルが見つからない。
957 名前:デフォルトの名無しさん [2008/03/01(土) 09:46:26 ] sample69をコンパイルしようとしているのに、sample68のことが出るって変じゃあないですか?
958 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:34:17 ] >>957 とくに変じゃないよ。 sample69 で使われている p_calc.Calc を見つけるために p_calc.java もコンパイルしているんでしょう。
959 名前:デフォルトの名無しさん [2008/03/01(土) 10:51:05 ] 今日の日付を Date date = new Date(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); String today = sdf1.format(date); で取得して、日付2008/3/10と比較させ今の日時より前か後かという判定を 行いたいのですが、具体的にどうすればよいのでしょう?
960 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:57:08 ] >>959 Calendar#afterとCalendar#beforeを読むべし 実際はGregorianCalendarになるけどな
961 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:59:05 ] >>960 ちょっと調べてみます
962 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:21:03 ] 音声認識に興味があるんだけど、Java Speech APIで実用に耐えられそうですか? それともC++あたりに鞍替えした方がいいですか?
963 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:23:35 ] _
964 名前:959 mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 12:08:15 ] 面倒くさいから、y*10000+m*100+d同士で比較しちゃう。
966 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 12:17:14 ] Strutsアプリケーションを作成しているのですが セッションIDをSHA-1でハッシュ化するにはどうしたらよいでしょうか?
967 名前:959 mailto:sage [2008/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 [2008/03/01(土) 12:21:38 ] エラーは一番最後じゃなくて if (now.before(dateformat.parse("2005/1/1"))) { のところでした
969 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 12:41:34 ] >>966 Javaでダイジェストを生成する ttp://www.atmarkit.co.jp/fjava/javatips/117java021.html >>967 > 数値: フォーマットには、パターン文字の数は最小桁数になります。 二文字使ってるから最低二桁なのでは?
970 名前:959 [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:09:40 ] 時刻も含めて比較したいなら、Date#compareToでできる。 日付で切り捨てたいなら、Calendarに変換してsetで時刻を0にする。 ユーティリティメソッド作ってそこで比較すべし。 あちこちで比較してたら、バグの温床。 ついでに言えば、「今日の日付を取得する」もユーティリティメソッドにして、 システムプロパティなどで、「今日の日付」を設定できるようにしておくと、 わざわざシステム日付を変更しなくとも、日付が変わったときのテストができる。
972 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:12:13 ] >>947 権限の低いクラスローダでロードしたクラスを挟んでスクリプトを呼ぶといいんじゃないかな、と推測だけで言ってみる
973 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:39:35 ] スレ違いかも知れませんが… Commons/Net 1.4.0 のFTPClientを使っていて 昨日から原因不明のエラーが多発してました ようやく判明した原因は、FTPClient#listFiles()が返すFTPFile[]の要素が なんと2/29のタイムスタンプのファイルについてはnullになってしまう事でした! とりあえずサーバの関連ファイルをtouchして急場をしのぎましたが この件について善後策を相談するのに最適のスレなどがあれば教えて下さい
974 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:51:14 ] >>973 ドキュメントにバグの報告先とかメンテナの連絡先が書いてあるはずだから、 最小の再現コード付けてレポートする。
975 名前:デフォルトの名無しさん [2008/03/01(土) 14:50:50 ] 勉強のためにファイル転送のプログラムを作っているのですが、 いまいち上手くいきません。流れとしては、 @(送り手) FileChannel(sourceChannel)でファイルを読み込む A(送り手) SocketChannel(destinationChannel)で相手に送る B(受け手) SocketChannel(sourceChannel)で受け取る C(受け手) 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 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 15:02:45 ] >>975 データの受信自体は問題ないのですか? 単にデータを送るだけだと、送り手側でソケットを閉じると、 受け手側でエラーが出るはずですが… 何らかのプロトコルで「送受信完了」をやり取りする形にすれば 問題のある状態なのかどうか判断できると思います
977 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 15:11:10 ] 勉強のためならまずCでやったほうがいいよ Javaでやっても意味ないよ
978 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 15:27:11 ] 質問させてください String str = "12345"; str += "abcde"; これで連結しようとするとrangeが足りないと出ます すでにあるStringクラスのオブジェクトに文字列を連結するための メジャーな方法などがあれば教えてください
979 名前:デフォルトの名無しさん [2008/03/01(土) 15:56:12 ] >>976 データの受信自体が出来ないみたいです。 送り手側は一通りプログラムが実行されて終了するのですが、 受け手側は if(sourceChannel.read(buffer) < 0) の部分で処理が止まっているみたいです。 受け手は、送り手が書き込むのを待っている状態になっているんでしょうか? >>977 時間に余裕が出来ればCも勉強しようと思っています。 今は就職活動中であまり時間が無くて、息抜きでやっている状態なので... 助言ありがとうございます。
980 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:00:40 ] >>978 不可能
981 名前:978 mailto:sage [2008/03/01(土) 16:02:28 ] 自己解決しました スレ汚しごめんなさい
982 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 17:44:15 ] ServletContextを得るためのgetServletContext()というメソッドがありますが、 APIを見てみるとServletContextはインタフェースなのでオブジェクト化は出来ませんよね。 getServletContext()は、実際にはServletContextではなく、ServletContextを実装するサブクラスを作ってるんでしょうか?
983 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 17:46:00 ] ServletContext context = getServletContext(); System.out.println(context.getClass().getName());
984 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:13:50 ] 次スレたててみる
985 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:18:51 ] 次スレ 【初心者】Java質問・相談スレッド113【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1204363011/
986 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:00:59 ] >>985 乙彼Death
987 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:31:24 ] >>975 送り側はちゃんと閉じてる?
988 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 02:22:23 ] PHPを学習した後だとJavaの習得は容易ですか?
989 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 02:31:14 ] いいえ
990 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 02:38:08 ] PHPの知識は役立たないの?
991 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 02:47:56 ] javaの勉強はじめました。 ネットワークとかGUIとか使って何か作りたいのですが、 何も思いつかないので、 パケットモニタ(?)(今どんなメッセージで通信されているか)みたいなのを作りたいのですが、 ネットワークに関しては、どの変の勉強すれば早そうでしょうか。 この辺のクラスは古いから使わないほうがいいとか、 この辺使えばすぐじゃないかとか教えていただけると助かるのですが、 助言もらえませんか。 GUIに関しては、本とWebを参考にして手をつけていたら何とかなりそうな気がしているのですが、 ネットワークは難しすぎて…。
992 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:16:15 ] Java→PHPなら簡単
993 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:18:43 ] >>991 何をしたいのか本人すら分かってないのに他の人に聞いても分かるはずないよ ネットワークって具体的に何?サーブレットでWebアプリ作るとかじゃ駄目なの?
994 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:22:47 ] パケットモニタはドライバ組まないと無理だ。 通信なら Socket 使えばいい。
995 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:36:45 ] >>934 >synchronized付いてるから同時には呼び出されない え?メソッドレベルの排他というのは、一つのメソッドに複数のスレッドが同時に入れないだけで、 アクセスするメソッドが別なら排他されないのでは?やば、今までずっと間違えてきたかも。。。
996 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:38:58 ] なんかいろいろ勘違いしてるなw
997 名前:933, 995 mailto:sage [2008/03/02(日) 03:44:36 ] >>934 いやいや、やっぱり同時アクセス可能ですよ。でないとnotifyAll()でwait()を解除してあげられないです。
998 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:47:47 ] インスタンスメソッドの synchronized 修飾子は synchronized(this){ } でメソッド内全てを囲ったのと等しい。 クラスメソッドの synchronized 修飾子は synchronized(Queue.class){ } と等しい。
999 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:51:58 ] www.amazon.co.jp/dp/4797337206
1000 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:55:06 ] 1000 なら Java 死滅確定
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。