1 名前:Javaが初心者 mailto:sage [2008/05/12(月) 03:05:27 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 pc11.2ch.net/hp/ Webプログラミング pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド114【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1207385614/ 次スレは>>990 あたりで。 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/
623 名前:デフォルトの名無しさん [2008/05/31(土) 01:13:40 ] 二つの文字列を表示する時 一つめの文字列を表示させたあと 2秒ほど間を開けて 二つめの文字列を表示するにはどうすればいいですか?
624 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 01:17:34 ] >>623 簡単に言うと、間に Thread.sleep(2000); を挟む。
625 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 01:22:30 ] JNIでCと連携してるんだけど、特定のnativeメソッドを使用した時に UnsatisfiedLinkErrorが投げられてしまう。 環境変数は通っているし、 ヘッダファイルが最新の状態で問題なくビルドできたのに、 そのメソッドだけ蹴られる。 ためしに問題の部分をコメントアウトして実行したら、問題なく動いた。 だから他のnativeメソッドは、たぶん普通に呼び出せてるんだよね。 DLLの中身をのぞいて見ても、件のメソッドは他のメソッドと同じようにちゃんと存在している。 これはいったいどういうことなんだろう…?
626 名前:620 [2008/05/31(土) 01:30:52 ] >>621 ローカル変数では定義してませんね・・・ 下のelse if文には入ります >>622 obj表示してみました。 今もうその文字列のcontainsメソッド使ってごり押しでif文に入りました! ただなんで前の状態じゃ入れないか疑問に残って仕方がない・・
627 名前:デフォルトの名無しさん [2008/05/31(土) 01:40:57 ] >>624 やってみます、ありがと
628 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 01:47:32 ] >>626 ありそうなのは、JButton ret;と、実際に追加されているボタンが異なるケース。 同名のローカル変数が追加されて、メンバのretに値が入っていない。 JButton ret=new JButton();とかやってないか?
629 名前:620 [2008/05/31(土) 02:42:15 ] >>628 ぁぁぁ・・・ご名答です・・ コンストラクタでやってしまってました・・・ わざわざありがとうございます。 今ブラウザの戻る、進む、ホームに戻るが作成できました。 あとは履歴とブックマークくらいしたいなー。 他なにか機能ないかなー。 なんか学校の課題とはいえ、がっつり便利なブラウザ作ってみたいなー。
630 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 02:50:40 ] >>629 > がっつり便利なブラウザ作ってみたい ってことは今使っているブラウザに不満な点があるということだから、 その不満を解消する機能をつければいい。 既にあるものを再生産するのは詰まらんだろう。
631 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 03:08:05 ] >>629 そういうミスを防ぐために、メンバ変数に特殊な命名規則を導入するス タイルもある。 m_ret mRet f_ret fRet ret_ または常にthis.retで使うとか。
632 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 03:58:37 ] short と byte[] の相互変換ってどうやるんですか? private byte[] ShortToByte( short s ) { byte [] b = { (byte)((s >> 8) & 0xFF), (byte)((s >> 0) & 0xFF) } ; return b; } private int ByteToShort( byte []b ) { return ((b[0] & 0xff) << 8) | (b[1] & 0xff); } こんなのを作ってみましたけど 上手く行きません short s = -1; System.out.println( s ); System.out.println( ByteToShort( ShortToByte( s ) ) ); 結果 -1 65535
633 名前:デフォルトの名無しさん [2008/05/31(土) 04:10:17 ] >>632 それshort返してねえよ int返してる
634 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 04:28:20 ] あ^^;色々変更して試しにint返してみてそのままでした private short ByteToShort( byte []b ) { return (short)((b[0] & 0xff) << 8) | (b[1] & 0xff); } でも同じ結果です
635 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 04:33:27 ] private byte[] convertShortToByte(short s) { byte[] b = new byte[2]; ((ByteBuffer)ByteBuffer.allocate(2).putShort(s).rewind()).get(b); return b; } private short convertByteToShort(byte[] b) { return convertByteToShort(b, 0); } private short convertByteToShort(byte[] b, int offset) { return ByteBuffer.allocate(2).put(b, offset, 2).getShort(0); }
636 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 05:24:53 ] そんなややこしい方法でしか無理ですか?
637 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 06:07:55 ] ここでエスパー参上 short 返してねえよ。int 返してる
638 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 06:13:47 ] >>637 >>634 です
639 名前:294 [2008/05/31(土) 12:09:33 ] Aクラス=(appletをextendsしたクラス)でBクラス=(frameをextendsしたクラス)ではなく Bクラスを使用しないでAクラスでBしたクラスがする処理をしたらappletとしてうごきました。 ところでappletではファイルの読み書きとかが出来ないらしいけど、 何が出来て何が出来ないかということはどうやって解るんですか
640 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 12:53:26 ] >>639 ↓に載ってるものは出来ない java.sun.com/javase/ja/6/docs/ja/technotes/guides/security/permissions.html#PermsAndMethods ただし↓のファイルに書いてあれば許可される C:\Program Files\Java\jre1.6.0_06\lib\security\java.policy
641 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 13:13:04 ] >>640 ありがとうございます。 とてもよく知ってますね。 そういう知識はどこで覚えたんですか? なんでそんなに詳しいんですか? どこかで習ったりしたんですか?
642 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 13:32:07 ] >>641 公式サイトのドキュメント↓読んでれば見つかる java.sun.com/javase/ja/6/docs/ja/ ここの 「セキュリティ」 と書いてあるリンクを辿っていけばセキュリティについて書かれている さっきのページは 「セキュリティ」 → 「Java 2 SDK におけるアクセス権」 片っ端から全部読むには量が多すぎるが、必要なときに必要な情報だけ探して来れば十分
643 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 14:11:40 ] >>636 static short ByteToShort(byte[] b) { return (short)((b[0] << 8) | b[1]); } static byte[] ShortToByte(short s, byte[] b) { b[0] = (byte)((s >> 8) & 0xFF) ; b[1] = (byte)(s & 0xFF) ; return b; } public static void main(String[] args) { short s = -1; byte b[] = new byte[2]; System.out.println( ByteToShort( ShortToByte( s, b ))); } 君のメモリー(思い出は((無い
644 名前:デフォルトの名無しさん [2008/05/31(土) 14:51:39 ] synchronizedブロックだとメソッドから復帰するとモニタも解放になりますが、 メソッドから復帰してもロック・オブジェクトのモニタを持ちつづけるにはどうすればいいのでしょうか?
645 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:06:20 ] >>644 それ用のスレッドを作ってモニタを持ち続けさせるか、 特にオブジェクトのモニタである必要がないなら java.util.concurrent.locks.ReentrantLock あたりを使う
646 名前:デフォルトの名無しさん [2008/05/31(土) 15:08:02 ] やはり少し手間がかかるんですかありがとうございます。
647 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:15:55 ] >>645 イテレーションが目的であって、要素が途中で変更されると困るときはどうするんでしょうか。 例えばjava.util.Vectorのsynchronizedは取得時のみでイテレーション中は変更される可能性があるわけで、これとは少し意味が違いますよね。
648 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:22:30 ] >>647 使う側が必要なだけsynchronizedかける 例: Vector v = ....; synchronized (v) { Iterator i = v.iterator(); while (i.hasNext()) { ... } }
649 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:28:45 ] ああ、そうですね。
650 名前:デフォルトの名無しさん [2008/05/31(土) 15:30:06 ] 先頭のスーペースはもしかしてnbsp;をタイプしてるんですか?
651 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:32:36 ] 専ブラが変換してくれるので自分でタイプしてはいない
652 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:35:43 ] >>648 それだと違うインスタンスのロックにならないから、 例えば別のVectorインスタンス(クローンとか)から内部を変更されてしまい、 要求する仕様を満たさないよ。そういうのは見つけにくいバグになるんじゃないの?
653 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:39:59 ] >>652 違うインスタンスって何 内部って何の内部 要求する仕様とやらをはっきりさせてくれ
654 名前:デフォルトの名無しさん [2008/05/31(土) 15:42:13 ] ↑自分が答えられる範囲を超えるとこのように暴走しますw
655 名前:デフォルトの名無しさん [2008/05/31(土) 15:43:12 ] パッケージについて質問します。 デスクトップ上にTestフォルダを作成し その中にメインの "Test.java" と "DirTestA.java" を置きました。 別階層からTest.javaのオブジェクトを作るため Test.javaに package Test; と書いてimportして作成できたのですが そうするとTest.javaで 同じ階層内にいるDirTestA.javaのオブジェクトを作ろうとしたら DirTestAのシンボルを解決できません。とでます。 試しに DirTestA.javaにも package Test; と書いて Test.javaで import Test.DirTestA; と書いても 解決しません。 どうすれば、同じ階層内でも参照できますか?
656 名前:デフォルトの名無しさん [2008/05/31(土) 15:43:39 ] なんだ。>>653 は親切そうだったけど実はすぐ発狂するキチガイだったのかww
657 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:56:13 ] >652 良く分からないなら無理に指摘しなくても大丈夫です。 問題が起きてから騒いでください。 >655 コンパイルする場所が間違ってるかも Testフォルダがあるフォルダでコンパイルしてますか? (パッケージ名は小文字推奨です。クラス名と区別が付かない等の為) あとは、変更前のclassファイルが残ってる可能性も。
658 名前:653 mailto:sage [2008/05/31(土) 15:58:45 ] 別に暴走も発狂もしてないけど・・・ 質問に答えるために必要な追加情報を求めてるだけだよ (言い換えると質問が意味不明)
659 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:04:25 ] >>655 ひとつ上のディレクトリから javac Test/Test.java ってやってみるとどう?
660 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:05:46 ] Hoge{ private int n; Hoge( int i ){ n = i: } } Hoge hoge = new Hoge( 10 );: これに新しい値を入れたい場合 hoge = null; hoge = new Hoge( 100 ); でないとダメですか? null代入せず上から直接 hoge = new Hoge( 100 ); した場合はどうなりますか?
661 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:08:20 ] >>660 直接入れても一緒。 null代入は不要。
662 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:17:35 ] ですよね、ありがとうございます
663 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:19:26 ] C++のnewのイメージとごっちゃになりました たしかC++だと落ちますよね?
664 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:33:30 ] C++のnewはdeleteしないと落ちはしないけどメモリリークになる JavaのnewはGCが自動的に解放してくれる
665 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:53:54 ] >>658 確かに不明部分があるけど、やってれば分かるようなこの程度のことを詳細に書いてもらったとしても、君程度の技術じゃ答えられないでしょうにww ところで君はその質問にちゃんと答えられる自信はあるんですか?
666 名前:デフォルトの名無しさん [2008/05/31(土) 16:55:43 ] 教えてください。 以下のようなソースを書いたのですが、 ☆のところで怒られてしまいます。 [アクセス可能な型 Swing_main のエンクロージング・インスタンスがありません。 型 Swing_main のエンク ロージング・インスタンスで割り振りを限定する必要があります (たとえば x.new A() で、x は Swing_main のインスタンス)。] ★は怒られないのに何で☆はだめなのというところが知りたいのですが、 public class Swing_main extends JFrame{ public static void main(String[] args) { //コンストラクタでFrame作成 new Swing_main("test"); //メソッドでFrame作成 Swing_test(); } //コンストラクタ Swing_main(String title){ super(title); ★addWindowListener(new WindowEventHandler() }; //メソッド public static void Swing_test(){ JFrame frame = new JFrame("Jframe1") ; ☆frame.addWindowListener(new WindowEventHandler()); } //WindowListener class WindowEventHandler implements WindowListener{ public void windowActivated(WindowEvent e) ・・など } }
667 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:05:34 ] >>666 WindowEventHandlerはstatic classじゃないので、外側のクラスSwing_mainのインスタンスが必要 ★はコンストラクタ内なのでthisが存在するが、☆はstaticメソッド内なのでインスタンスが存在しないからエラー
668 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:12:54 ] >>653 >>658 こうやってすぐ叩かれるから無駄口を吐かない方がいいよ。
669 名前:デフォルトの名無しさん [2008/05/31(土) 17:19:39 ] >>667 さん 回答ありがとうございます! WindowEventHandler をstaticにしたところ怒られなくなりました。 ただ、☆にはframeというインスタンスがあるんですが、 これだと駄目という部分が理解できません。 そもそもこういうつくりは駄目だということでしょうか
670 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:25:55 ] >>669 そのframeはJFrameであって、Swing_mainじゃないし。 もし Swing_main frame = ..... ; であるなら、 frame.new WindowEventHandler() のように書ける。
671 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:26:24 ] JAVAにはOpenCVのような画像処理を扱うAPIはありますでしょうか。 OpenCVの移植があれば最高なのですが、ぐぐっても出てこないということは無いのですかね。。
672 名前:デフォルトの名無しさん [2008/05/31(土) 17:29:21 ] 駆け出しのプログラマなんだけど、休日とか、書類作成メインの日とか、コーディングしない日があるのが怖い コードを書かないと実力が落ちそう そこで、将棋でいう「詰め将棋」みたいに、シンプルなプログラミングの問題を掲載したサイトとか本とか無い?
673 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:32:29 ] >>672 っ pc11.2ch.net/test/read.cgi/tech/1212085079/
674 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:33:58 ] >>652 そのVectorに関しての質問です。 cloneで生成したインスタンスから、clone元のインスタンスを操作する方法を教えてください。 よろしくお願いします。
675 名前:デフォルトの名無しさん [2008/05/31(土) 17:39:38 ] Vectorの質問というよりもJavaコレクションフレームワークの全体像から勉強しなおした方がいいんじゃないの?
676 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:41:34 ] >>674 ?
677 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:31:14 ] wisdom.sakura.ne.jp/system/java/swing/swing2.html ここを見て勉強していたのですが、 awtでは描画処理をpaint()をオーバーライドして行っていたのに、 swingではpaint()のオーバーライドは推奨されていない、と書かれています。 何故使ってはマズいのかということと、 swingでGraphicsクラスのオブジェクトを得て描画処理するのはどういう風にやるのが普通なのか教えて下さい。
678 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:41:32 ] >>677 paintは、そのコンポーネント自身だけでなく、ボーダーや子コンポーネントも描かないといけないのだけれど、 オーバーライドするとそれが行われなくなってしまうのでマズイ。 swingでは、代わりに protected void paintComponent(Graphics g) をオーバーライドしてください。
679 名前:678 mailto:sage [2008/05/31(土) 19:53:30 ] あぁ、ただし JApplet には paintComponent はありません。 paintComponent を持ってるのは JComponent の子孫だけ。 JApplet に直接描きたい場合は paint をオーバーライドするしかない。 普通は中に swing コンポーネントを配置したいから JApplet を使うのであって、JApplet に直接描くのはあんまりしないと思う。
680 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 20:10:30 ] じゃ、なんでJAppletをswingのパッケージに入れたんでしょうか。混乱しませんか?
681 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 20:16:11 ] javax.swingパッケージにはコンポーネント以外のクラスもいっぱい入ってるよ ActionとかTimerとかSwingWorkerとか ↓みてみ java.sun.com/javase/ja/6/docs/ja/api/javax/swing/package-summary.html
682 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:08:23 ] Cよりjavaから先に勉強した方がいいの?
683 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:18:08 ] >>682 初心者のためのプログラミング言語ガイド Part9 pc11.2ch.net/test/read.cgi/tech/1210941509/
684 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:19:38 ] 興味がある言語からやればいい
685 名前:デフォルトの名無しさん [2008/05/31(土) 22:15:20 ] JFrameにJAppletをaddすべきかどうかいつも悩むんですけど・・ AWTでは全く問題ないのにswingはpaint関連を知っていると、少し変な設計なんですがどう思いますか?
686 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:55:57 ] >>685 まぁ別にいいんじゃない? 気になるならFrameの上にJAppletを置けば
687 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:59:36 ] てか、JAppletの上にJPanelを引いてなにかするべきだろ? そうすれば同じようにJFrame上でも動作可能になる。
688 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:05:56 ] >>686 そうするとSwingのUIから外れちゃいませんか?
689 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:11:27 ] JPanelにLinkedList<JLabel>を配置したい場合はどうしたらよいでしょうか?
690 名前:689 mailto:sage [2008/05/31(土) 23:13:42 ] スイマセン、やっぱりもうちょっと自分で考えてみます。
691 名前:689 mailto:sage [2008/05/31(土) 23:16:52 ] 自己解決しました。スレ汚し&連投失礼致しました。
692 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:32:25 ] >>688 そういう細かいことが気になるんなら、687 の言うように JPanel 上にすべてを構築して、 アプレットの場合はそのパネルを JApplet の中に置き、 アプリケーションの場合はそのパネルを JFrame の中に置くようにすればいいよ
693 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:32:43 ] 正規表現を使ったプログラムを作っているのですが、 pattern = Pattern.compile("^Java.*"); matcher = pattern.matcher("JavaでHello World"); boolean b = matcher.matches(); System.out.println(b); pattern = Pattern.compile(".*World$"); matcher = pattern.matcher("JavaでHello World"); boolean c = matcher.matches(); System.out.println(c); このとき同じ文字列に1回1回compileとmatcherを使ってしまいます この場合ならPattern.compile("(^Java.*|.*World$)");とまとめれば済みますが これをもっと多数(50とか60とか)に増やすときにはものすごく長くなってしまうと思います なんとかスッキリまとめる方法はないですか?
694 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:39:28 ] 正規表現はそれだけで1冊の本が出るように別の言語と思え
695 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:09:19 ] 50個追加していき "ab"+"cd"+"ef"... とやればよい。 そのUIってのは、Menuとかがswingらしくなくnative依存という事だと思うんだけど。 で、>>687 はそういうことを言ってたのか。オレの強力なエスパー使っても分からなかった・・
696 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:16:22 ] >>695 つまりPattern.compile("^Java.*"+".*World$");というように記述すればいいのですか?
697 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:48:02 ] >>693 その質問内容だと、「愚直に|で繋げ」、としかアドバイスできないと思 う。長い正規表現の記述が長くなるのは当たり前。 やりたいことをもっとハイレベルに書けば、正規表現とは違ったスマー トな解決方法もあるかもしれない。
698 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:16:19 ] >>693 ふと思ったのだが、文字列を1行にしようとしてないか? "(^Java.*" +"|.*World$)" って2行にして書いてもコンパイル時にまとめられるから"(^Java.*|.*World$)"と同じ事だぞ。
699 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:46:22 ] 用途を拡張したいということだろ ただつなぐだけなら誰でも分かる話
700 名前:693 mailto:sage [2008/06/01(日) 02:18:15 ] やりたいのはテキストファイルを読み込んで1行ごとにパターンマッチしてるかを 判定していくプログラムですね ただ、パターンが大量にあるのでそれをソースコードの中に全部書いていくのは 無駄が大量なのではないかと疑問に思ったしだいで チェックしたいパターンを別のファイルに記述しておいて そのファイルを読み込むという方法も考えましたが、改行文字の処理が面倒そうですし
701 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:20:24 ] >>700 for ループでぶん回せば?
702 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:56:43 ] ほとんどの場合に最初の方のパターンでマッチするから、後のパターンは無駄になる事が多いって事かな。 なら、 >チェックしたいパターンを別のファイルに記述しておいてそのファイルを読み込む でもいいと思うけど。配列にした方が早いかも知れんが。 >改行文字の処理が面倒そう これが良くわからん。BufferedReader#readLine()で1行ずつ読むだけだと思うのだが、何かまずいのか?
703 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:04:30 ] そこまで考えてやることもないだろう。
704 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:08:40 ] >>702 1行ごとに ^Java.* みたいなのを書いていったファイルを読むと考えていますが readline()は改行文字を読まないんでしたっけ? それなら1行呼んでそれに+していく方法に問題は無いんですが
705 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:11:50 ] APIドキュメントを読むのは基本 基本が出来ないやつはいつまでたっても馬鹿
706 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:19:06 ] >>705 申し訳ございません このような愚行でスレを汚してしまったことを深くお詫びします >704は無視していただいて構いません
707 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:35:11 ] ファイル名とかは含まず、画像内容そのもののダイジェストを求めたくて、 ↓作ったけど、もうちょっと最適化できないでしょうか? sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=30326 ファイル名とかパスを除くための、 特に46〜50行目ぐらいの↓が無駄な気がするけど、いい案が思い浮かばないです。 // (1)Normalize BufferedImage bimg = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_3BYTE_BGR); Graphics g = bimg.createGraphics(); g.drawImage(icon.getImage(), 0, 0, null); ImageIcon normalize_icon = new ImageIcon(bimg);
708 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 04:33:04 ] パス or URLが示す(画像)ファイルに含まれるデータのハッシュを使わない理由は?
709 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 04:49:01 ] >>708 圧縮形式の違いは無視したい。 PNGやBMPとか、クリップボードから取り込んだイメージとかとか デコード済みの画像から作りたいです。
710 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 05:08:05 ] どういう最適化を望んでいるのかによる。
711 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 09:55:50 ] 無駄なコードや、性能とか ImageIconからシリアライズ可能なイメージ情報だけ取得したり できないのかなと思ったのだが、無い?
712 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 10:18:26 ] >>709 java.awt.image.PixelGrabber つかって画素データ取り出してから 画素データのハッシュ値計算すりゃいいんでは?
713 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 12:16:44 ] >>707 これでどう static byte[] getImageHash(String path) { return getImageHash(ImageIO.read(new File(path))); } static byte[] getImageHash(URL url) { return getImageHash(ImageIO.read(url)); } static byte[] getImageHash(BufferedImage image) { int[] pixels = new int[image.getWidth() * image.getHeight()]; image.getRGB(0, 0, image.getWidth(), image.getHeight(), pixels, 0, image.getWidth()); return MessageDigest.getInstance(HASH_ALGORITHM).digest(pixels); }
714 名前:デフォルトの名無しさん [2008/06/01(日) 13:50:51 ] 型変換についてなんですが スーパークラスA, それを継承しているサブクラスBがあるとして 明示的なキャスト変換以外に 型をスーパAからサブBに変換する方法はありますか?
715 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 13:58:25 ] >>714 Visitorパターン、またはダブルディスパッチ
716 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 18:45:11 ] >>713 その手があった。サンクス Officeサンプル画像のBlue hills.jpgで50回ほどベンチマークしてみたけど (JDK 1.6.0_05-b13)で比較したら、new int[];BufferedImage.getRGBのほうが 残念ながら、2割ほど遅かった。 (new int[]とそこへのコピーがオーバーヘッドになっちゃうのかな?) sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=30328 >>712 PixelGrabber、考えて見まつ
717 名前:デフォルトの名無しさん [2008/06/01(日) 23:26:06 ] testフォルダをルートとして その中にtestaとtestbのフォルダを作って testaフォルダの中にあるjavaファイルから testbのフォルダの中にあるファイルデータaa.textを ロードする場合の指定は testb/aa.textでいいでしょうか? 実行すると java.lang.NullPointerException Exception in thread "main" java.lang.IllegalArgumentException: input == null! という例外が出るんですが
718 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:35:26 ] フォルダ云々じゃなくてまずはパッケージの概念と実行する時のクラスパスに関して勉強して来い お前の質問じゃ、それでもいいともそれではダメともどちらでも取れる
719 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 00:11:45 ] >>717 釣りなのか?なんか笑える
720 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 00:32:34 ] >>717 説明の文章だけ読むと ../testb/aa.txt
721 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 03:38:56 ] * Returns a shallow copy of this <tt>ArrayList</tt> instance. (The * elements themselves are not copied.) public Object clone() { ArrayList<E> v = (ArrayList<E>) super.clone(); v.elementData = Arrays.copyOf(elementData, size); これ、ディープ・コピーじゃないんですか? 以前のソースがないので分かりませんが、clone()の実装がバグってるんでしょうか。
722 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 05:41:04 ] >>721 6のArrayListの実装? どうみてもシャローコピーなんだが。 super.clone() は継承元ではオーバーライドされていないからObject#clone()呼び出しと同義だし、 v.elementData = Arrays.copyOf(elementData, size); は単に各要素への参照値をクローンしたArrayListの方にコピーしているだけでしょ? コメントにも要素自身はコピーされないって書いてあるやん。
723 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 07:56:08 ] v.elementData = Arrays.copyOf(elementData, size); これでしょ問題なのは。 v.elementData = this.elementData シャローコピーといえば、普通はこうじゃないの? オブジェクト(クラス)がArrayListだから、クラスの意味からすれば オブジェクトのフィールドにある配列の内容の方もコピーするってのは分からなくもないけど、 シャローコピーは配列の参照だけコピーで内容はやんないんじゃなかったか。