1 名前:デフォルトの名無しさん [2008/01/13(日) 00:25:22 ] プログラミング言語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質問・相談スレッド110【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1197710566/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝のう存じます。 次スレは>>980 あたりで。
477 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:51:29 ] 失礼します。初心者です。 ユーザーの入力する数値を年月日で区切って取得したいのですが、どのようにすればよろしいでしょうか? 宜しくお願いします。 public static int readBirdate(Scanner kb) { System.out.print("誕生日を入力してください(年 月 日: "); int ubir = kb.nextInt(); return ubir; }
478 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:53:40 ] DateFormat df = new SimpleDateFormat("yy'年'MM'月'dd'日'"); Date date = df.parse(ubir);
479 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:07:08 ] >>478 ありがとう、ございます!
480 名前:477 mailto:sage [2008/01/28(月) 13:32:15 ] すみません。良いヒントもらったので頑張ってみたけど、やっぱり無理でしたorz 実は宿題でして、ユーザーに今日の日付と誕生日を入力してもらって、年齢を割り出すというプログラムです。 >>477 の式で、 今年: 2008(←入力) 誕生年: 1980(←入力) (計算) 年齢: 28 といった感じで年だけの計算はできるのですが 今日(mmddyyyy): 1 28 2008 誕生日(mmddyyyy): 2 17 1980 といった一度に年月日全ての値を得るやりかたが、どうしても分かりません。 すみません、ご教授お願い致します。
481 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:38:12 ] >>480 指示された入力形式は mmddyyyy、入力例が 1 28 2008、 一貫してないのでなんとも。全角半角もごっちゃだし。 スペース区切りならば mmddyyyy は [m]m [d]d yyyy とかすべきじゃね? もしスペース区切りでないのなら、入力例は 01282008 みたいに 最初は0つけないとダメだし、スペースが間に入っちゃメでしょ。
482 名前:477 mailto:sage [2008/01/28(月) 13:54:09 ] >>481 すみません。スペース区切りです。 //出力例 今日の日付を入力してください(mm dd yyyy): 1 28 2008 (←入力) あなたの誕生日を入力してください(mm dd yyyy): 2 17 1980 (←入力) 貴方の年齢は 28才です。 // 支持されている出力例はこんな感じです。
483 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:09:50 ] 1980年生まれって誕生日くるまでは 27歳じゃね? 28表示していいのか?
484 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:11:20 ] 数え年なんじゃね?
485 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:12:55 ] ちなみに、数え年だと29才のはず。
486 名前:477 mailto:sage [2008/01/28(月) 14:13:15 ] 無視してくださいorz
487 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:32:24 ] >>477 文字列の取得自体はできるみたいなので、続きだけやるとこんな感じか? //文字列をCalendarに変換 String now, birth; //"1 28 2008" と "2 17 1980" を入力させる。 DateFormat df = new SimpleDateFormat("M d yyyy"); Calendar today = Calendar.getInstance(); today.setTime(df.parse(now)); Calendar birthday = Calendar.getInstance(); birthday.setTime(df.parse(birth)); //Calendarから年齢計算 int age = today.get(Calendar.YEAR) - birthday.get(Calendar.YEAR); birthday.set(Calendar.YEAR, today.get(Calendar.YEAR)); if (today.before(birthday)) age--;
488 名前:477 mailto:sage [2008/01/28(月) 14:35:29 ] >>487 ありがとうございます!やってみますw
489 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 16:13:22 ] JSPを読んでswing系の画面に出すような事は出来るのでしょうか? とりあえずHTMLならJTextPane.setContentType()で表示できるようになるのですが、JSPのスクリプトレットは対応しておらず見る事が出来ません。 何か方法があったら教えてください。 よろしくお願いします。
490 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 16:19:09 ] SWT 使え
491 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 16:44:36 ] JSPってサーバ側で処理するもんでは? それをクライアントで処理したいってこと? 自分で実装するのは大変そうだから、なんか適当なwebサーバ内蔵してループバックでhttpするのが楽かも
492 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:06:53 ] そういう意味か。 Tomcat でもビルトインしないとできねぇから、JSP の代わりに 動的な XML + XSL で HTML 作って JTextPane にでも食わせろ。
493 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:49:44 ] public static<T, A> void a(String s) { T data = A.suru(s); } ということをやりたいのですが、エラーが出て実行できません こういうことは出来ないのでしょうか?
494 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:50:50 ] できません
495 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:52:36 ] >>494 出来ませんか… ありがとうございました
496 名前:デフォルトの名無しさん [2008/01/29(火) 01:10:43 ] なにをやりたいんだ? public static T <T> a(String s) { return A.suru(s); } ならまだ意味が解るが・・・
497 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:04:02 ] >>496 昨日ファンクタというものを知りまして… それをやってみたかったのです
498 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:13:32 ] それならジェネリクスじゃなくて手抜かずにインターフェース使ってヤレ。 ちなみに次のバージョンからクロージャーが入る。
499 名前:489 mailto:sage [2008/01/29(火) 09:04:22 ] >>490-492 そちらの方向で色々試してみます。 ありがとうございました。
500 名前:デフォルトの名無しさん [2008/01/29(火) 09:47:26 ] java言語の書き方(例:if やfor文の書き方)が全部書いてある 日本語のダウンロードできるドキュメントを教えてください
501 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 10:47:50 ] java 言語仕様 でググレカス
502 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 11:04:04 ] 任意のTaskを前回のTaskが終了した時点から一定時間経過後に実行してくれる、 SingleThreadなExecutorServiceって存在しますか?
503 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 11:47:20 ] >>502 Executors#newSingleThreadScheduledExecutor
504 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:56:54 ] JTreeとJTextAreaを2カラム形式で配置し、 JTreeで異なるノードを選択した時に、JTextAreaの内容を切り替える プログラムを作ろうとしているのですが、上手くいきません。 JTextAreaやJFrameを設定しているクラスと、JTreeを設定しているクラスを 別々に分けているせいか、mouseListenerが上手く動かなかったり、 変数のやり取りが上手くいかなかったりしています。 どういった手順で切り替えるよう組めばいいでしょうか。
505 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:03:25 ] 本にうっかりヨダレたらしてしまって 後日そのページがごわごわになってて萎えんfg9あぷ9j;:
506 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:17:28 ] Excelを出力するのにjakarta poiを使おうと思うんですが サーブレットから使っても大丈夫でしょうか? スレッドセーフというかなんというか、同時に複数動いても 大丈夫なものでしょうか?
507 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:26:26 ] >>503 それだとscheduleWithFixedDelayとかで、決まったTaskしか定期実行しかできませんが、 まとめてexecuteしたTaskを必ず一定間隔を空けて実行するような奴とかないでしょうか。 とりあえず自分で実装してしまったのですが、既存実装があったら悲しいなぁと思いまして。
508 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:55:49 ] >>504 まず問題点を分けてみないと。 >mouseListenerが巧く動かない 実装が悪いんだろう。 classを分けてるってソース(なんとか.java)を分けてるって意味だよね? >変数のやりとりが巧くいかない >クラスを別々に分けているせいか ひとつのソースで動くプログラムならソースを分けても動く道理。 classから違うソースのclassの呼び出し方が判らないとか変数が読めないとかなのか。 単純化したひとつのソースで試してみる。
509 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:24:09 ] 質問です。 「演算子+は引数の型double,Graphicsで未定義です。」 というエラーがでます。これを解決するにはどうすればよいでしょうか?
510 名前:デフォルトの名無しさん [2008/01/29(火) 14:30:54 ] Date currentTime = calendar.getTime(); ↑コンパイルエラーでした。シンボルを解釈処理できません。 何をimportしたらよいですか? sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/Date.html を見てimport java.util.Date.*;を書きましたがだめでした。 どうやって必要なimportを調べたらよいのですか?
511 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:32:56 ] >509 double a = ???; Graphics b = ???; a + b; こんなことは出来ないってことを言ってるんだよ。 とりあえず、プログラム見直せ。 >510 import java.util.Date; でOK
512 名前:509 mailto:sage [2008/01/29(火) 14:39:11 ] >>511 ありがとうございます。見直してみます
513 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:47:09 ] >>511 コンパイルしたいです。 import java.util.Date; import java.text.SimpleDateFormat; import java.util.Locale; public class a { public static void main (String args[]) { Date d = calendar.getTime(); SimpleDateFormat f = new SimpleDateFormat("EEE", Locale.JAPANESE); String s = f.format(d); System.out.println(s); } }
514 名前:デフォルトの名無しさん [2008/01/29(火) 14:53:52 ] >513 calendarってのが定義されてないからコンパイル出来ない。
515 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:47:28 ] CSVを解析するプログラムを作っていて「java CSV」で検索したのですがあまりよいものがなく 「CSV 正規表現」で検索したらPerlのサイトが出てきて自分なりに作ってみたんですけど疑問がいくつかあるので質問させてください。 ========================================== import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.regex.Pattern; import java.util.regex.Matcher; public class CsvSplit { private static final String CSV_SPLIT_REGEX = "(\"(?:[^\"]|\"\")*\"|[^,]*)"; private Pattern _pattern; /** * 実行用のメイン */ public static void main(String[] args) { CsvSplit aaa = new CsvSplit(); ArrayList csvArray = aaa.readCsvFile("C:\\zzzzzzzzzz.csv", "JISAutoDetect"); Iterator ite = csvArray.iterator(); while(ite.hasNext()) { String[] csvData = (String[])ite.next(); for (int i = 0; i < csvData.length; i++) { System.out.println("-------------"); System.out.println(csvData[i]); System.out.println("-------------"); } } }
516 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:49:47 ] /** * コンストラクタ */ public CsvSplit() { this._pattern = Pattern.compile(CSV_SPLIT_REGEX); } private ArrayList readCsvFile(String fileName, String charsetName) { try { // ファイルの取得 BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream(fileName), charsetName)); ArrayList csvArray = new ArrayList(); String columnValue = ""; try { // ファイルから1行ずつ読み込む while (br.ready()) { String lineData = br.readLine(); // ダブルコーテーション以外の文字をすべて削除しダブルコーテーションの数を数える。 // ダブルコーテーションの数が奇数の場合は次の行も読み、再び奇数になるまで読み込む if (lineData.replaceAll("[^\"]", "").length() % 2 == 0 && columnValue.equals("") || lineData.replaceAll("[^\"]", "").length() % 2 == 1 && !columnValue.equals("")) { columnValue += lineData; String[] splitData = splitCsvData(columnValue); columnValue = ""; csvArray.add(splitData);
517 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:51:05 ] } else { columnValue += lineData + "\r\n"; } } return csvArray; } finally { br.close(); } } catch (Exception ex) { ex.printStackTrace(); return null; } } /** * CSVデータの1行を分割して配列にして返却する。 * 改行が含まれるデータの場合は必ず奇数となるので、奇数である限り取得処理を繰り返す。 * ただし、CSVデータは以下の条件で保存されている場合に限る。 * 1.基本的にコンマで区切った部分がスペースを含めて値である。 * 2.値にコンマ、ダブルクウォート、改行が含まれる場合は、値全体をダブルクウォートで囲む * (コンマやダブルクウォートがない場合に値全体がダブルクウォートで囲まれていても問題ない) * 3.値に含まれるダブルクウォートは "" となる。 * @param csvLine * @return */ private String[] splitCsvData(String csvLine) { ArrayList csvDataArray = new ArrayList(30); Matcher matcher = this._pattern.matcher(csvLine); boolean isDataSkip = false; String columnValue = "";
518 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:51:11 ] このまま俺らにデバッグしろと言う気か
519 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:51:37 ] // 正規表現に従い取得する。 while(matcher.find()) { // なぜか値が取得できた場合の次の値が空文字として取得できるのでスキップする if( isDataSkip ) { isDataSkip = false; continue; } String result = matcher.group(); // 値が取得できたかどうか if( !result.equals("") ) { isDataSkip = true; } // データの前後がダブルクウォートで囲まれている場合は省く if(result.startsWith("\"") && result.endsWith("\"") ) { result = result.substring(1, result.length() - 1); // データにダブルクウォートがあれば1つに置換する result = result.replaceAll("\"\"", "\""); } // セット csvDataArray.add(result); } String[] splitData = new String[csvDataArray.size()]; csvDataArray.toArray(splitData); return splitData; } } ==========================================
520 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:01:23 ] >>518 長くてすいません。。。 質問なんですけど、 1.readLineで1行ずつ取得していると改行データを含む行が分割されてしまうので本当はCRLFが 正しいデータかわからずreadLine以外に効率よく確実に読み取る方法ってありますでしょうか? 2.perlのサイトだと正規表現でダブルコーテーションの数を直接数えてるんですけどjavaの正規表現だと どうやるのでしょうか? 3.正規表現で値を取得した場合次の値が空文字として取得できてしまうのですが 正規表現がいまいちよくわからず・・・。パターンの悪いところや正しいパターンを教えていただけないでしょうか。 4.@ITでC#で「^(?:(?<1>"[^"]*"),?|(?<1>[^,]+),?|,)*」というの見つけたのですが動かず。。。C#とjavaってそこまで違うのですか? 長文駄文ですいません。お手数おかけしますが宜しくお願い致します。
521 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:10:20 ] よくググレCSVライブラリあるぞ。 ところでThe Java Virtual Machine Specificationの和訳って本しかないかな? 本買おうか悩んでるんだけど。
522 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:15:29 ] ネットにあってもどうせ広告すらクリックしないだろ乞食
523 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:34:01 ] >>520 これをコピペしてコンパイルして自分で色々実験してみるがよろし。 あと、JavaのとPerlの正規表現はほぼ別物と考えた方がいい。 public class RegExp { public static void main(String args[]){ String patStr = null; String text = null; if(args.length <= 0) { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Pattern: "); patStr = br.readLine(); System.out.print("Text : "); text = br.readLine(); } catch(IOException e) { e.printStackTrace(); } } else { patStr = args[0]; text = args[1]; } Pattern pattern = Pattern.compile( patStr ); Matcher matcher = pattern.matcher( text ); if(matcher.matches()==true) System.out.println("match"); else System.out.println("not match"); } }
524 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:51:24 ] ある文章から指定した正規表現に一致するもののみを抽出したいのですが、そのものずばりな方法ってありませんかね? 一致するものをひとつずつ探して、それらを結合する、といった方法しか思いつかないのですが、もっとスマートな方法があったら教えてください。
525 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:58:20 ] >>522 広告クリックしてもらえなかったのか。よしよし。
526 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:17:49 ] >>524 それぐらいならスマートな方じゃないかなと。(というかスマートって何さ 貴方の理想が魔法のステッキなら話は別ですが… 便利な魔法のステッキも最終的にはどこかで地道な作業をやってるわけで。
527 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 20:00:31 ] ありがとうございます、ひとつずつで実装することにします。 Lispから入った捻くれなので、リストは一括操作でないとどうにも落ち着かないのです。
528 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:22:21 ] 「Lispから入った捻くれなので、リストは一括操作でないとどうにも落ち着かないのです。」 今年に入って一番説得力のある発言を見た
529 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:28:15 ] やっぱりLisp使いはJava厨とはわけが違うな
530 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:39:49 ] 以上、自作自演でした
531 名前:515 mailto:sage [2008/01/29(火) 22:35:42 ] >>521 CSVTokenizerだと正規表現を使っておらず参考になりませんでした。 ほかにもそういったもので参考になるものがあれば教えていただけないでしょうか。 >>523 だいたい同じようなものを作ってようやく形になったのが上記のソースです。。。orz
532 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 22:43:18 ] >>507 まとめてexecuteするときに間にsleepタスクを挟めばいいんじゃない
533 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:49:04 ] 16進数の文字列表現をintまたはIntegerに変換したいのですけど、 まさにこういった機能をもったAPIがあったら教えてください。 結構探し回ったんですけど見つかりませんでした。
534 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:53:35 ] >>533 つ Integer.parseInt(String, int) ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/Integer.html
535 名前:デフォルトの名無しさん [2008/01/29(火) 23:55:52 ] すいません、メモリ(ヒープ)サイズについて質問です。 java実行時に-XX:+PrintGCDetailsオプションを指定してgcのログを出しています。 そのログに記録される結果のヒープサイズと psコマンド(ps alxなど)の結果(RSS)が一致しないんですが、 プロセスサイズ=ヒープサイズ+JVM自身が利用するメモリサイズ ってことであってますか?
536 名前:533 mailto:sage [2008/01/29(火) 23:57:21 ] >>534 parseIntは散々試してみましたけどだめでした。 なむふぉでまくりです。 decodeがまだだったので試してみます。
537 名前:533 mailto:sage [2008/01/30(水) 00:04:07 ] うまくいきまんた
538 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:04:41 ] >>524 あらかじめずばり抽出できる構造で文章を保持しておけばスマートじゃね?
539 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:10:28 ] >>531 なんでそこまで正規表現を使いたがるのかな? 正規表現って便利だけど実行速度はすごく遅いよ。
540 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:16:53 ] >>521 和訳は本しかない VMの対応バージョンは1.3か1.4あたりだったかな 5.0でバイトコードのフォーマットが変わったから、買おうか悩む
541 名前:デフォルトの名無しさん [2008/01/30(水) 00:33:30 ] 伝わりにくいと思うんですが、文字列を相手に入力してもらう方法と、その入力してもらったいくつかの文字列をランダムに組み合わせるってできますかね?
542 名前:デフォルトの名無しさん [2008/01/30(水) 00:35:36 ] >>541 文字列というのは日本語です。
543 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:39:59 ] 伝わりにくいね。 〜してもらう方法と、〜をランダムに組み合わせるってできますかね? ・・・日本語がおかしいから伝わりにくいんだろうね。
544 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:40:32 ] List に突っ込んで Collection#suffle() して連結。
545 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:40:35 ] ×伝わりにくいと思うのですが ○伝わらないと思うのですが
546 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:42:38 ] 入力:いくつかの文字列 出力:入力をランダムに並べ替えたもの もしくは 入力:いくつかの文字列 出力:入力のいくつかをランダムに並べ替えたもの 他にもいろいろ考えられるけど?
547 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:44:48 ] 入力:文字列 出力:入力の部分文字列をいくつか作り、それを並び替える とかか。
548 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:53:58 ] 方法ってできますかね??? なんだかできないきがするんですががが
549 名前:507 mailto:sage [2008/01/30(水) 00:55:31 ] >>532 なるほど、その手が・・・勉強になりました。
550 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:58:19 ] 時期的に学校の課題なんだろうけど、少しは自分の頭で考えないと勉強にならない、 とか言うのは野暮なのかねやっぱり。
551 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:13:34 ] ここは将来の脅威の摘むためにバカを増やすスレですが。
552 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 01:24:19 ] >>540 SE 7でもバイトコードのフォーマット変わるんだよね。 本の内容がどんどん古くなるから買おうか悩むんだよ。
553 名前:デフォルトの名無しさん [2008/01/30(水) 02:49:09 ] (当方、本職プログラマーでなく初心者です) すみません、アプリケーションスコープの使い方で迷ってます。 具体的に書くと、 ショップサイトにて商品ジャンルごとにアクセス数の集積を取りたい と考えたのですが、データベースへのアクセス頻度を減らすためにも、 商品ジャンルのデータベースをそのままアプリケーションスコープに 入れてしまおうかと思っています。ただその場合には10000個数近くの インスタンスを入れることになってしまうのですが、初心者なために これが大丈夫なことなのかよくわかりません。 オブジェクトにはintとStringとが半々ずつ、合わせて10個のメンバ 変数があり、Stringには全部でだいたい64文字程度入ります。中身だけ で計算するとサイズは160kbyte程度かと思うのですが、この程度ならば 全然気にしなくても大丈夫な感じでしょうか? その何万倍いっとけ、 とかそういったレベルならいいのですが、よくわからなくて……。 指針となるドキュメントを見つけられなかったのでこちらで質問させて もらいましたが、皆さん、アプリケーションスコープに入れるデータ サイズはどれくらいまでにしてますか? サーバーのスペック如何なところではあると思うのですが、アドバイス あればどうぞお願い致します。
554 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 03:00:24 ] それは実際に商品ジャンルのアクセスがネックになってることが明らかで、これを メモリ上にキャッシュすればどれくらいの改善が見込めるという見積もりができている 上で言ってるのか? 普通に考えればその程度のアクセスがネックになるようなら他の処理もウンコチンチンで マシン選定間違えてるだろ。商品ジャンルにメンテ入っても反映されないし、整合性が 保障できないなら下手に SQL で結合もできやしない。
555 名前:デフォルトの名無しさん [2008/01/30(水) 03:14:09 ] なるほど、それもそうですね。 ありがとうございました。
556 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 06:20:12 ] Logging API の設定ファイルって、出力先のファイル分けるためにわざわざ Handler クラス作らなきゃいかんのか? 何で出力先の指定が「クラス名」に 紐づいてるんだ? インスタンスだろjk
557 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 09:00:31 ] 慣例としてクラス名を使っているだけで、名前には何でも使用できたと思うが?
558 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 12:20:13 ] >>535 >プロセスサイズ=ヒープサイズ+JVM自身が利用するメモリサイズ >ってことであってますか? ヒープもJVMが利用するメモリなわけだが・・・ ヒープは、Javaから見えるメモリ空間だけど JVMは、実行用のスタックメモリを持っていてこれは ヒープメモリに入ってこない。(ヒープじゃないし) あと、Hotspot用とかあるし。 ヒープサイズを越えてどれくらいメモリを使うかは決まっていない。 (スタックとかはある程度判るが・・・)
559 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 12:58:03 ] unicodeのソースでreplaceAllで"\\t"(TAB)が置換できない。どうやってやるの?
560 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:37:52 ] >>559 ふつーにできるよ? System.out.println("aaa\tbbb\tccc".replaceAll("\t", "[TAB]")); 結果: aaa[TAB]bbb[TAB]ccc
561 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 13:41:04 ] >>559 分からないので、ひとつえsp replace を始め、String系の変換で良くある間違い。(てか、今やって見て久々に… Stringは不変オブジェクトです… 要は、インスタンスメソッドで値が変わってるかのように見えても、 単に新たなStringを生成して返してるだけ、という…
562 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 14:03:26 ] >>557 # "handlers" specifies a comma separated list of log Handler # classes. These handlers will be installed during VM startup. Log4j のおっさんがアジ文章で 「JSR47の設定ファイルはハンドラクラスに 1 インスタンスしか指定できねーじゃんよ ファイル分けらんねーよ!!」 と ブチ切れてるのも見つけた。 www.ingrid.org/jajakarta/log4j/jakarta-log4j-1.1.3/docs-ja/critique.html 実際 JSR47 の仕様書読んでもクラス名だったアルヨ。Formatter にしても Log4j に 慣れてると 「この程度のもん用意しとけYO!」 と言いたくなるなぁ。
563 名前:559 mailto:sage [2008/01/30(水) 14:10:08 ] わかりました。 正 s = s.replaceAll("\t", ""); 誤 s.replaceAll("\t", ""); ありがとうございました。
564 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 14:32:00 ] >>563 ここのクイズと同じところで引っかかってるね。 blogs.sun.com/javaev/date/20080120
565 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 18:49:40 ] オブジェクトを直列化して受け渡しする際のImageIconの仕組みについて質問です。 java.awt.ImageクラスはSerializableインターフェースを実装していないため、swingのImageIconでラップして直列化しているのですが、なぜImageIconが画像を正しく直列化出来るのかが理解出来ません。 ソースをざっと見たのですが、画像を保持しているフィールドには、transient修飾子がついている上、他の部分でも特にこれという箇所は見つけられませんでした。 ImageIconがどのように画像を直列化しているのか、解説かヒントをいただけるとありがたいのです。 よろしくお願いします。
566 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 19:26:14 ] >>565 private void writeObject(ObjectOutputStream) メソッドがあるだろう そのメソッドがあると、直列化するときに呼ばれる
567 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:44:36 ] beanshell classpathを使いたいのですが、一昨日からサイトが落ちたまま(ドメイン更新忘れ??)です。 beanshell classpathを持っている方、アップしていただけませんか。 www.beanshell.org/
568 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 21:13:31 ] bugparade にバグ投稿すると確認メールか何か返ってくるもんかえ? 何日たってもまったく検索にヒットせんのう。
569 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:02:53 ] >>568 俺のときは投稿直後(数分後とか)に自動確認メールが来たけど。 BugDatabaseに登録されたら、その時にもメールが来るはず。 登録されない時は自動確認メールの後、音沙汰がなくなったような。
570 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 22:27:25 ] >>569 そーなのか、じゃどっかでロストしたな。 センキューベイベー
571 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:52:28 ] ExecutorServiceって、一度shutdownすると再利用はできない?
572 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 02:26:07 ] >>558 プロセスサイズ=ヒープサイズ+スタック+Hotspotってことすね。 thx ってか今、遊びで作ってるプログラムなんだけど、 プロセスサイズが右肩上がりで肥えていく・・・ ヒープは正常(増減を繰り返す)っぽく見えるのよね・ もうよく分からん。javaは難しいな・・・
573 名前:デフォルトの名無しさん [2008/01/31(木) 02:36:01 ] rt.jar変えずにString.toString()の挙動を return this; ↓ return "hoge" + this; に変更したいんだけど、これって可能? Javassistとかバイトコードいじる以外で。
574 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 02:43:48 ] >>573 私は出来る方法を知らない。 が、何に使うのか。そこには興味がある。
575 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 07:46:16 ] 実行時のAOPで出来ないの?
576 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 07:59:22 ] >>575 AOP… 私の知ってるAOPはバイトコードをいじるのですが、何か別の方法があるのでしょうか
577 名前:デフォルトの名無しさん [2008/01/31(木) 09:36:44 ] ちょいと質問です。 TBNって個人のニュースサイトなんですが、 ttp://tbn2.blog50.fc2.com/ タブブラウザのJavaScript実行を切ってても ページが表示されると勝手に実行に切り替わってしまいます。 というかoffにすることが出来ません。 これってどいゆう仕掛けなんでしょう?