【初心者】Java質問・相談スレッド106【大歓迎】
1 :
デフォルトの名無しさん :
2007/09/19(水) 11:39:13 プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。
http://pc10.2ch.net/hp/ 過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
【初心者】Java質問・相談スレッド105【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1188228705/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
次スレは
>>980 あたりで。
乙
4 :
デフォルトの名無しさん :2007/09/19(水) 14:50:24
RCPアプリの質問もここで宜しいでしょうか?
単純にビューに線や四角などを描きたいだけなんですが、
うまく動きません。どうすればいいのでしょうか?
GCをゲットして、線を描くように書いたのですが、
何も表示されません。
public class HogeView extends ViewPart{
public void createPartControl(Composite parent) {
final Canvas canvas = new Canvas(parent, SWT.NONE);
canvas.addPaintListener(new PaintListener(){
@Override
public void paintControl(PaintEvent e) {
// GC取得
final Image image = new Image(parent.getDisplay(), canvas.getBounds());
final GC gc = new GC(image);
// 描画
gc.drawLine(50, 50, 100, 100);
}
});
}
}
ref.
http://www-06.ibm.com/jp/developerworks/opensource/library/os-eclipse-brand/index.shtml
parentのレイアウトマネージャが要るんでない?
6 :
4 :2007/09/19(水) 15:21:22
>>5 早速のレス有難う御座います。
レイアウトマネージャ入れてみましたが駄目でした。
無しでもLabel等は表示されました。
IBMのサイトの例に従って書いてるのですが・・・
>>4 IBMの方には、event.gc.drawImage って書いてあるんですけど…
8 :
デフォルトの名無しさん :2007/09/19(水) 16:08:41
テキストエディタを作っている者ですが質問です。 JTextPaneを使って折り返し処理をしたいのですが、そのような機能は実装できるでしょうか? 折り返し処理が出来るか出来ないかによって、行番号を付ける方法も変わってくると思うので どなたかアドバイスお願いします。
eclipse入れてみたら起動とかやたら重いんですけど、 何でこんなのが流行ってんすか?
パソコン買ってみたら起動とかやたら重いんですけど、 何でこんなのが流行ってんすか?
なんか、夏休みのままドロップアウトしたようなやつがいるなw
IDEの使い方を学ぶ時間+起動時間+コーディング時間+デバッグ時間が一番少なくて済むのが、一番優れたIDE
うちのPCでは別に重くない いつまでもそんな古いをPC使うのはやめたらどうだ
>>13 それを短い時間で行うことが出来るのが優秀なエンジニア。
ようは、ハサミだけで優劣は付けられない。
>>9 まあ使えば分かる。
19 :
4 :2007/09/19(水) 17:57:01
>>7 見落としていました。すいません。
ただ引き続き問題があって、一部しか表示されません。
そこは今から何とかやります。
有難う御座いました。
typedefとtypealiasの両方欲しい
コンパイル時間長くなるからなあ
アノテーションとかリフレクションだか使ったらできないかな? 俺はそっち全然知らんのだけど。
>>23 何をよ?
typedefなら、出来てるじゃん
>>20 アンチパターンに指定されちゃってるけど
前993 むしろ、外部との通信はOS毎に扱えるフレーバーが違い過ぎて まともに受け取れるのはURLlist位しかないから実用レベルではjava内部での使用が限界。 利用もJListやJTreeのDnD対応がほとんどだろう。
ニートw
>>26 JOGLRenderer書いたことあるが慣れると細かくモジュール化されてるから必要最低限の実装で使い回し利いて結構使いやすいよ。
けどwinの標準ラッパーはDirectX側のバグだらけでDirectXの情報追わないとキツイ。
いまさらJavaMailとactivation.jarの話ですまない。 Eclipse上のJREで動作するんですが、jarにしてダブルクリック実行をすると例外が発生します。 Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type text/plain; charset=iso-2022-jp at javax.activation.ObjectDataContentHandler.writeTo(Unknown Source) at javax.activation.DataHandler.writeTo(Unknown Source) Java 6.0のrt.jarに javax.activationが含まれているようで、 どうもこれが、ライブラリとして指定したmail1.4でメールを送信しようとした時、activation1.1と競合してしまっているようです。 なにか対処方法あるでしょうか?
30 :
29 :2007/09/20(木) 00:47:50
追記。構成 -- application.jar (MANIFISTにlib/mail.jar等を設定) |-lib |- mail1.4.jar |- activation1.1.jar ユーザーはダブルクリックでapplication.jarから起動します。
javaからウィンドウズのごみ箱は使えるかい? ごみ箱の中身を見たいわけじゃなく、ファイル削除でごみ箱に移動させたいんだが。
ごみ箱フォルダの実体のディレクトリってどこだっけ? そこに移動すればいいんじゃない?
>>32 適当なこと言うなよ。Windowsのゴミ箱はそんな簡単な仕組みじゃなかったはず。
・・・とはいうものの、俺もはっきりした方法は知らんのだが。
ちょっと調べた限りでは、やはりAPI呼ぶしかなさそうだな。
あれま、ごみ箱を使うコードはウィンドウズ専用になっちまうのか。
>>34 それは間違いないと思う。たしかLinuxのゴミ箱は、
>>32 のいうとおりディレクトリそのものだったから。
事実、ゴミ箱のあるパーティションとは別のパーティションで、ゴミ箱に入れると、
ファイルがパーティション間でコピーされる。
36 :
デフォルトの名無しさん :2007/09/20(木) 11:40:33
DB接続クラスの作成と実行クラスの作成をしていまして、実行クラスのコンパイルは できたのですが、実行すると下記の様なエラーが表示されました。 どういう意味でしょうか?? Exception in thread "main" java.sql.SQLException: [Microsoft][ODBC Microsoft Acc ess Driver] インデックス、主キー、またはリレーションシップで値が重複しているので 、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、イ ンデックスを削除してください。または重複する値を使用できるように再定義してくださ い。 at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6879) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7036) at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3065) at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338) at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java: 288) at Test.updateExec(Test.java:82) at TestData.main(TestData.java:29)
>>36 斜め読みだが、作ろうとしてるテーブルのフォーマットが不正か、
すでにあるテーブルを再度追加してエラーになってきる気がする。
どっちも俺がよくやったエラー。
一意制約違反じゃないのか? プライマリキーのカラムに同じ値つっこんでるとか。 テストでデータ突っ込むのに全部同じレコード入れようとしてると、エスパー
JTextPaneを使っているんですけど、フォントの設定がもうほんっとにめんどくさいです。 JTextAreaなら textArea.setForeground(Color.BLACK); textArea.setFont(new Font("Serif", Font.BOLD, 30)); で済むところがJTextPaneを使うと attribute = new SimpleAttributeSet(); StyleConstants.setBold(attribute, true); StyleConstants.setForeground(attribute, Color.BLACK); StyleConstants.setFontFamily(attribute, "Serif"); StyleConstants.setFontSize(attribute, 30); ・・・・・・ Fontクラスで一括指定できたりしないんですかね?これ
質問です。 JAVAでゲーム作りますが何か?の基礎ページを見ながら 初めてJAVAを学ぼうとしているのですが、 サンプルのjarファイルを落として解凍してから、圧縮までは出来るようになりました。 それで中のwavファイルを取り出し、 自分で用意したwavファイルをフォルダの中にいれて、 取り出したwavファイルと同じ名前にして圧縮すると、 jarファイルが正常に動作しません。 解決方法を教えてください。
>>40 「質問です。
JAVAでゲーム作りますが何か?」まで読んで喧嘩売ってんのかと思った。
それはともかく、考えられるのは、自分で用意したwavファイルっていうののフォーマットが違うとかじゃない?
たしかwavにも何種類かあったような。あとありそうなのは、極端に大きなwavファイルだとか。
たしかあのサイトはSEぐらいにしかwavつかってなかった気がするから、大きなwavファイルは想定してないかも試練。
>>39 一括で設定できるような便利メソッドを一回書けば、後はそれを使いまわせばいいだけだと思うが。
>>41 ヒントをありがとうございます。
真空波動研でjarファイルに元々あったwavを調べたら、8bitだったので、
入れようとしていたwavファイルも8bitで入れたら無事動いて音も変えることが出来ました。
>>40 試しに同じことをやってみたが、正常に動作する。
その程度の説明では、何かやり方が間違ってるんだろうとしか言い様がない。
正常に動作しないっていうところを、もっと詳しく。
コマンドラインから起動してみたら何かエラーメッセージが出るか?
45 :
44 :2007/09/20(木) 13:57:08
解決おめ
46 :
デフォルトの名無しさん :2007/09/21(金) 05:12:06
String配列で、後から要素数を増やしたい時は 新たに生成してコピーしなければなりませんか? concat関数のような追記はできないんでしょうか。 もしそうなら、スマートな方法をご教授お願いします。
後から配列の長さ増やしたい要求が分かってるならはじめから大きくとれば? ArrayListじゃダメな理由は? >「質問です。JAVAでゲーム作りますが何か?」まで読んで喧嘩売ってんのかと思った。 壮大に吹いたw
48 :
デフォルトの名無しさん :2007/09/21(金) 05:36:22
どうしても配列使いたいなら 1.6以降で Arrays.copyOf(arrayOfString, newLength) とか使えば?
いや、文脈から察するにC系のChar配列と、String自体を混同してるんだろう。
つまり、
>>46 はconcatのように一つのStringに文字を付け足したいんじゃないのか?
それなら、文字通りString.concatっていうメソッドがあるからそれを使えばいい。
もしくは、大量の追加がある場合、StringBuilderを使えばパフォーマンスも落ちない。
流石にString#concat(String)に気付かないとは思わんよ、普通。
>>50 >>46 が単に配列ってだけ書いてれば俺もそう思うが、
String配列っていうのがあやしくないか?
でも「文字増やしたい」じゃなくて「要素数増やしたい」って書いてあるしなぁ……
NIOを使って、大きめのファイル(10MB程度)のファイルを
byte型配列に読み込む処理を書いてます。
読み込みに使っているのは、郵政省のダウンロードサービスにある、
郵便番号CSVデータ。
ttp://www.post.japanpost.jp/zipcode/dl/oogaki/lzh/ken_all.lzh 読み込み処理の流れは、
(1) RandomAccessFile -> FileChannel -> ByteBuffer
-> ByteArrayOutputStream -> WritableByteChannel -> byte[]
(2) RandomAccessFile -> FileChannel -> MappedByteBuffer -> byte[]
の2通りを試しており、ループで100回まわして処理速度を測っているんですが、
(1):高速だがメモリの消費量多い。
(2):低速だがメモリの消費量は少ない。
という結果になりました。こんなもんですかね?
Pen4-2.8GHz、RAM1GB、JDK6、VMのヒープサイズは256Mですが、
(1)の処理速度:約140ms
(1)での消費メモリ:約32MB
(2)の処理速度:約3000ms
(2)での消費メモリ:約11MB
という感じです。
JavaってC#のLINQ見たいな機能つけないんですかね? jdbc使ってたらひどく疲れた。
なんで ByteArrayOutputStream とか WritableByteChannel が現れるのかよくわからん。 ファイル全体を丸ごと読むだけなら、こうじゃない? RandomAccessFile file = new RandomAccessFile("hogehoge", "r"); byte[] data = new byte[(int) file.length()]; ByteBuffer buffer = ByteBuffer.wrap(data); while (buffer.hasRemaining()) { file.getChannel().read(buffer); } file.close();
>>55 それは別の処理でやってるんだけど、
巨大なファイルの一部分だけを、低負荷で読み込みたいので。
条件後出しキター コード示せ。でなきゃ何の検証も提案もできん。
郵政のデータってcsvテキストだろ? DBじゃないのに何で索引出来るんだよw
巨大なデータを高速に検索したいってことなら、NIOとか全然関係ない話
NIOのCharBuffer使って、 CharBuffer cb; Matcher lm = linePattern.matcher(cb) Matcher pm = null; CharSequence cs = lm.group(); pm = pattern.matcher(cs); とかやって、正規表現検索とかできるんだけど。
そりゃできるかもしれんが、それって高速?っていうか何の話?
62 :
53 :2007/09/21(金) 13:25:51
使ってるコードを抜き出しました。 public byte[] readTest1(FileChannel inputChannel) throws IOException{ int inBuffSize = 1024 * 16; ByteBuffer inBuff = ByteBuffer.allocate(inBuffSize); ByteArrayOutputStream baos = new ByteArrayOutputStream(); WritableByteChannel outChannel = Channels.newChannel(baos); while (true) { inBuff.clear(); if(inputChannel.read(inBuff) < 0){ break; } inBuff.flip(); outChannel.write(inBuff); } outChannel.close(); return baos.toByteArray(); } public static byte[] readTest2(FileChannel inputChannel) throws IOException { byte[] data = new byte[(int)inputChannel.size()]; MappedByteBuffer buf = inputChannel.map(FileChannel.MapMode.READ_ONLY, 0, inputChannel.size()); buf.get(data); buf = null; return data; }
実際にそれ試してみたが、readTest2の方が速かったよ? 1の方が高速とは信じられん
64 :
62 :2007/09/21(金) 13:56:27
そうなんですか? これらのコードを、 String file = "C:\\temp\\KEN_ALL.CSV"; FileChannel ch = new RandomAccessFile(file, "r").getChannel(); for (int i = 0; i < 100; i++) { // readTest1(ch); readTest2(ch); } こんな感じで使ってみたのですが、 やっぱりreadTest2のほうが全然遅いのです。。。 実行は、Eclipse上からなのですが。
おぉい。 そのテストコードは変だよ。 ファイルを開きなおすか、せめてファイルポインタを先頭に戻さなきゃ、2回目以降は何も読み込んでいないよ。
66 :
64 :2007/09/21(金) 14:05:43
すみません、私も今気がつきました。 ループ中で、各回での処理時間を計ったら、 2回目以降がゼロ。。。。orz Eclipse落として、吊ってきます。。。
67 :
64 :2007/09/21(金) 14:11:50
for (int i = 0; i < 100; i++) { ch.position(0); // readTest1(ch); readTest2(ch); } にしたら、readTest2のほうが早かったです。 お騒がせしてすみませんでした。
68 :
デフォルトの名無しさん :2007/09/21(金) 18:22:26
javaを最近始めました エディタで質問があるのですが 現在TeraPadを使用してコードを書いているのですが 下記の条件を満たしてる開発環境エディタ?はないものでしょうか? 1) printlnと打ちたかったのにprintlmと打ってしまったときなど printlnは正しいので赤文字で表示 Printlmは謝っているので黒文字のまま表示される 打ち間違えが一目瞭然になる 2) 入れ子が下のような感じになっているとき { { { } } } 一番上の{に文字入力のカーソルを持っていくと それに対応した一番したの}が強調される わかり憎い説明だと思いますがあったら教えていただけないでしょうか
IDE使う選択肢は無いの? エディタじゃないとだめ?
エディタでもなくても全く問題ないです 初めてなのでサンプルコードと見比べて記載ミスを探すのがを探すのが一苦労で、、、
eclipseってのあるから使うといいよ 入力ミスによるコンパイルエラーの類は一切無くなるはず
>>71 ありがとう
ちょっとグーグル先生のところいってきます
73 :
デフォルトの名無しさん :2007/09/21(金) 19:05:36
16進数文字列(\u3001等)を文字に変換する方法がわかりません。 ご教授ください…。。。
俺TeraPad使ってるのに。"}"はshift keyを押しながらカーソル移動で青くしてからctrl+"{"で対応する"{"へ飛べるけどな
>>73 char c = String.format("\u3001").charAt(0);
スルーされている
>>29 だが、俺も試してみたんだがやはり解決策が見つからないわ
誰か答えてくれぬか?
>>29 >>76 デフォルトのrt.jarより先に検索させるために、
java -Xbootclasspath/p:lib/mail1.4.jar;lib/activation1.1.jar -jar application.jar
でいけないかい?パスのところとかは適当に実態に合わせてくれ。
Xbootclasspath/p:オプションは変な配置の仕方をするとライセンス違反になるから気をつけて。
78 :
77 :2007/09/22(土) 01:26:16
;でパスを区切っているけどsolarisやlinuxなら:で区切ってくれ。 まあ、activation1.1.jarの方だけrt.jarより優先させればいいのなら、 mail1.4.jarの方はクラスパスにさえあればいいかもしれないが。
Java暦1ヶ月です。 newAudioClipを使って数個のwavを同時に再生しているのですが、 それぞれの音量を個別に変える(muteでもOK)ことは可能でしょうか? midiだと音量の調節ができそうなのですが、waveだとマニュアルを読んでも それらしい記載が見つかりませんでした。
>>77 Xbootclasspathってjar起動からでも利用できるのか?
と調べてみたら、記述すれば有効になるらしい
Boot-Class-Path: hogehoge.jar
既に割り当てられているショートカットキーの一覧サイトってありませんか。 例、Alt+Spaceでウィンドウメニュー表示 など
>>80 あー、jarオプション付きの起動では利かないのか。
試しでやった時はマニフェストでMain-Class一行書くのも面倒だったから
java -Xbootclasspath/p:myrt.jar -cp hoge.jar MainClassみたいに
classpathで指定して動かしたから気がつかなかった。
84 :
83 :2007/09/22(土) 13:02:30
違った。jar起動ってダブルクリックでjavawを使って起動するってことか。
>>79 Applet#newAudioClipが返すAudioClipは単純な再生しかできないので
Java Sound API(javax.sound.**)を利用
質問です。 jarに固める時、マニフェストファイルでシステムプロパティを記述する事はできますか?
>>81 SwingならLnFに実装されてるんじゃない?
各LnFのソース読んでみたら?
いくつか共通項くらいあると思う。
実装依存であることは確かだけど、どのレベルで実装されてるかはツールキット次第。
90 :
89 :2007/09/22(土) 18:59:51
すみません。ミスって投稿してしまいました。 で、switch文のcaseを全部無視して defaultまで処理が飛んでしまいます。 switch文を正しく機能させるには何が足りないのでしょうか? ご教授をお願いします。
switch('o') 何これ
Stringで分岐させたいならばif使え swich文なんて使う必要はない
ifを使う必要はあるの?
charで分岐させようとしたんだろ
96 :
89 :2007/09/22(土) 19:32:26
>>92 ありがとうございます。if文で書き直したら出来ました。
>>94 その通りです
質問です。 File.createNewTempFile()で作ったファイルをstaticなMapに入れてkeyと結びつけておく、 みたいなことを考えています。 テンポラリファイルの方は、よく「VMの正常終了時に削除」という説明がありますが、 static変数の厳密な生存期間はいつまでなのでしょうか。
>>97 どこからも参照されなくなってから、VMの終了までのどこかまで
変数の生存期間とファイルの生存期間の相関関係がサッパリ解らん
そのクラスをロードしたクラスローダが到達不能になってGCに回収されるまで
>>89 せっかくJavaで作ってるんだから
多態とか調べてみたらどうかな?
hibernateの勉強っていうかちょっと使ってみてて
わからないことがあったので教えていただけないでしょうか?
ttp://www.techscore.com/tech/Others/Hibernate/03.html ここの
Book.class
ってなんですか?
java.lang.Objectのプロパティでしょうか?
APIみたけどメソッドしか書いてないですよね?
HibernateのAPI見たら
an "empty" instance of the persistent class
とあったんですけど、なんとなくイメージはわくのですが
Book.classというのが具体的に何が入ってるのか、解説していただけないでしょうか?
もしくは詳しいサイトを教えていただけると助かります。
お願いします。
>>98-99 ということは、VMの終了時まで生存が保証されるわけではないということですね。
ありがとうございました。
>>104 なにがどう解決したのか解らんけど、
>>98 に書いてあるようにファイルの生存期間なのか?
変数の生存期間なのか、どっちなんだよ
二次元以上の配列を、ディープコピーしてくれるメソッドってありますか? 一次元ならSystem#arraycopyを使えばいいことはわかるのですが、 それ以上だとシャロウコピーになってしまい、使えません。 標準のメソッドがありましたら、是非教えてください。よろしくお願いします。
ない
2次元以上の配列のデープコピーとか激しくにおうな。 5次元配列とか平気で使ってそうな勢いだ。 使えないのはSystem#arrayCopyじゃなくてお前だろwwww
>>106 System#arraycopyはシャロウコピーしかやってくれないと思うが。
ディープコピーとシャロウコピーの違いが分からずに使っているのか?
110 :
102 :2007/09/23(日) 14:05:46
× わかりずらくて ○ わかりづらくて
>>109 説明不足ですみません。
配列をプリミティブ型の配列とする場合、一次元配列でSystem#arraycopyを使えば問題なくコピーできます。
ですが、二次元配列以上でSystem#arraycopyを使うと、配列自体がコピーされるので、コピー元の要素を変更した場合、
コピー先の要素にも変更が及びます。
つまり、二次元以上でも配列の構造すべてをコピーしてくれるようなメソッドがほしいのです。
こんな感じ? int[][][] x = 〜〜〜; ByteArrayOutputStream baos = new ByteArrayOutputStream(); new ObjectOutputStream(baos).writeObject(x); int[][][] y = (int[][][]) new ObjectInputStream(new ByteArrayInputStream(baos.toArray())).readObject();
>>113 そうです。こんな方法があったんですね・・・。
レスありがとうございました。
JTableのとある列を選択するとボタンがtrueになるっていうのはどうコード書けばできますかね?
ボタンがtrueになるってどういう状態だ
>>115 質問が抽象的すぎる。もっと具体的にわかりやすく書け。
TableColumnModelListenerを実装して、columnSelectionChangedで列選択を補足して、ボタンがtrueになるとかいう処理をやらせるのは?
JTexPaneaに表示する文章を中央揃えにしたいので、 StyleConstants.setAlignment(attr, StyleConstants.ALIGN_CENTER); というコードを書き加えてみたのですが、何の変化も起こりません。エラーも出ません。 どうすればいいんでしょうか。 import javax.swing.*; import javax.swing.text.*; public class TextPaneTest extends JFrame{ public static void main(String[] args){ TextPaneTest test = new TextPaneTest(); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); } TextPaneTest(){ setTitle("TextPaneTest"); setBounds(10, 10, 300, 200); JTextPane textPane = new JTextPane(); getContentPane().add(textPane); DefaultStyledDocument doc = new DefaultStyledDocument(); SimpleAttributeSet attr = new SimpleAttributeSet(); StyleConstants.setAlignment(attr, StyleConstants.ALIGN_CENTER); String str = "テスト"; try{ doc.insertString(0, str, attr); } catch (BadLocationException ble) { System.err.println("初期文書の読み込みに失敗しました。"); } textPane.setDocument(doc); } }
>>119 docにAttributeSetの設定してる?
121 :
デフォルトの名無しさん :2007/09/23(日) 18:34:13
なぜswingスレで質問しない?
122 :
119 :2007/09/23(日) 18:38:43
>>120 今、二つを関連させる記述はこれだけです。
>doc.insertString(0, str, attr);
>>122 その挿入した文字のみ中央揃えを適用させたいんだ?ちがうよね?
>>123 うまくいきました。
htmlのdivとspanと同じような関係ですね。
スレ違いのようでしたが、どうもありがとうございました。
125 :
デフォルトの名無しさん :2007/09/23(日) 19:23:21
質問が… やさしいJavaという本を読んだ後、2chでお奨めのCoreJavaという本を買ってきたんだけど、 double x = points[i].getX() - SIZE / 2; だのが書かれてて、.getX()って何? Javaというかプログラミング言語ってこんなに複雑になるもんなの?と焦りぎみ。 みんな基礎レベル(やさしいJava修了レベル)から、こんな複雑なコード書けるようになるまで、 どんな風に勉強したの?配列にしても、ArrayList<Employee> staff = new ArrayList<Employee>(); とか何がなにやら… 世間では簡単と騒がれているけど、やっぱりオブジェクト指向(これの意味すらよく理解してない)の言語よりも オブジェクト指向でない言語をしっかり勉強してからJavaをやった方がいいのかな? C言語かスキームからやり直してみようと思ってるんだけど…
>>125 それは日本語にすると
ポイントの配列のiのところからXをとってきて、サイズの半分で引いた物を変数に突っ込む。
Point p = points[i];
double x = p.getx;
x = x - SIZE / 2;
こんな風に変数に書き分けながら書くこともできるけど、この程度なら1行で書いた方が楽なんでしょう
なにか作りたい物があるなら、実際に作ってみたらどうかね
>>125 コアJavaはそりゃ読めないだろ入門レベルも終えてないのに。
やさしいJavaが基礎レベルってのはありえない。
getX() が習得できてないのは入門レベルですらあり得ない話。
ArrayListも配列じゃないし、newの意味しらんだろ、おまえさん。
JavaとかCとかの前にまともな入門書をちゃんと読めよ
>>125 いや、Javaから始めることは可能だろうけど、ちょっと呼んでる本がレベル高杉じゃないかな。
もっと簡単な本から初めて見たら?
オブジェクト指向以前のところで引っかかってるのならもっと基礎を固めたほうがいいな まあ昔読めなかった本が後で役に立つことってよくあるから
>>128 読んだ本が低杉、それで基礎レベル習得とか言わないでくれと思う
131 :
125 :2007/09/23(日) 20:05:15
レスくれた人達、サンクス。 やさしいJava→CoreJavaって、中1レベルの英語をマスターしたから、赤本やってみるかというくらい無謀なの? じゃあ、本当の基礎レベルの本って何がいいのかな?
>>131 赤本まではいかないかもしれないが、中1から高1くらいの差はありそうだな
中1だと、My name is Java. と書く、としか習わないだろ。
やさしいJavaには、どれが主語で述語はどれでこれが名詞だからっていうような基本文法がほとんど書いてない。
確か前に見た時は表示するキャラクターごとにスレッド作るってな事をしてたな。今の版では知らんが。
134 :
125 :2007/09/23(日) 20:49:27
>>127 newってオブジェクトを参照する為に使うんじゃないの?
Javaはポインタのない言語と前にどこかのWebサイトか立ち読みした本に書いてあったけれど、
これ、ポインタってやつじゃ…
>>132 なるほど。たしかに中1レベルではMy name is うんちゃらとかしか習いませんね。
SVOにしても高1になってきちんと習ったので、一通りの触りルールは分かったけれど、
言語を使えるというレベルにはまだ全然達していないという事なんだね。
現段階は白チャートすら始まってない状態なので、Javaの白チャート的な書籍を紹介してください。
>>1 のwiki
------
入門者向け推薦図書 †
2chで推薦されている入門書を挙げておきます。
* コアJava2 Vol.1 基礎編
* コアJava2 Vol.2 応用編
* Head First Java―頭とからだで覚えるJavaの基本
* 独習Java
「やさしいJava」(高橋 麻奈 著)はプログラミング未経験者が読むには適していますが、 Java入門書とは呼べません。
Javaプログラミングとはこういうものなんだ、というのをつかんだら上記入門書をやるのをお勧めします。
---------
この記述のせいか
>>135 このリストはどうみてもプログラムを知ってる人間が、
新しくJavaを習得するためのもんだな。
プログラム初心者がこれを読むのはかなりきついだろう。
>>134 newはオブジェクトを作るときに使うっすよ。
Javaはポインタのない言語ってよりは、ポインタを意識する必要のない言語っす。
Cのポインタは書き方がややこしかったり妙な事ができてしまったりすっからなー Javaから入ったからCのポインタの使い方が分かった、って人もいる。俺とか
Javaのポインタの位置はC++の参照とほぼ完全に同じ。 ただ、最近は参照っていってもわかってもらえなかったりする。(´・ω・`)
その文章見る限り何を勉強するにしても時間はかかるってことになるな それなら勉強したもん勝ちだな
ところが10年も勉強している人は稀 高校2年あたりで触り始めて大学4年間みっちり勉強したならば、社会人になったあたりで5年のアドバンテージを得られる。 しかし、これを大学時代さぼっていたり未経験からリカバリするのは並大抵の努力では無理。 おまけに仕事として与えられるのはプログラミングとは限らない。
というかやさしいjavaがカス過ぎるだけでCoreJavaは本当は"全て書かれた"入門レベルの本だろ。 CoreJavaが難しいんじゃなくて他のjavaの本がゴミだらけで選択肢が狭まってるだけだと思うんだが・・・。 CoreJavaより上に来るのはオライリーのSwing本やEfectiveJavaやjava言語仕様の書籍版あたりだろう。 まあ、やさしいシリーズはCからXMLまであるがCはまだマシとして他はカスだから。 やさしいjava読む暇があればJavaDoc読んだ方が勉強になる。
やさしいオブジェクト指向とか糞だわな
コード書けない・仕様理解してないのに技術本出してる奴は手広くやって総発行部数をそこ上げしないと印税で食っていけないから。 技術本って漫画より著者に来る印税多かったはずだけど技術本は人選ぶし。 Eclipseとjava周りはバージョン上がる度に新版出しまくれば良いだけだから劣化量産されるわけだな。 MS製品と違って更新早いとこういう害がある。
コマンドプロンプトの内容をコピペするにはどうすればいいんですか?
スレ違い
>>147 まずプロパティ→簡易編集モードにチェックを入れる
コピーしたい箇所をマウスで選択してEnterでコピー
ペーストしたい場合は右クリック
>>143 10年もプログラミングの勉強をしている人は稀ってことだよね?
10年勉強するぐらい当たり前だろ、と突っ込んでしまうところでした
高卒は勉強する習慣なさそうだけど・・・
150 :
143 :2007/09/24(月) 00:47:23
>>149 当たり前の筈なんだがな。
俺もまともにプログラミングを勉強し始めたのは大学3年あたり。
今年でやっと10年になるが、やっと初心者は卒業したかな、と思える程度だわ。
最近はいくらでも勉強する時間が欲しい
>>105 ファイルの生存期間が満了する前に、その所在を覚えているstatic変数が死ぬ場合が
ありえるかどうか、ということです。
>>150 勉強したければ一旦ニートになるといいかも
俺今そんな状態
でも金は貯めといた方がいい
俺は親元に住んでるから大して支出は無いけど
ちなみにプログラミング歴は8年目
aaa.javaとbbb.javaがあり、 bbb.javaからaaa.java内にあるtableのセルの内容を変えたいんですが、 aaa aj = new aaa(); aj.jTable.setValueAt("ああああ",0,6); で変えられないんですがどうしたら良いでしょうか。 もう自分でも何言ってるかわかんね。
>>151 ファイルの生存期間と変数の参照はまったく別の次元の話
それは、表示中のテーブルじゃなくて、 いま新しく new で作ったテーブルを操作してるんじゃないか?
>>151 「ファイルの生存期間」ってなんだよ。
エクスプローラでファイルを削除するまでって意味か?
158 :
156 :2007/09/24(月) 01:19:16
あぁ、レス遡って読んで解った・・・すまそ。
159 :
150 :2007/09/24(月) 01:24:41
>>152 正直なところニートというか、大学か院にいきたいわ。
理学部は出たんだが大学時代はさぼりまくりだったしw
とはいえ、家族いるから無理な話。
thisの矩形とrの矩形が重なる矩形領域を返すメソッドです。 public Rect intersection(Rect r){ Rect result = new Rect((this.x1 > r.x1) ? this.x1 : r.x1, (this.y1 > r.y1) ? this.y1 : r.y1, (this.x2 < r.x2) ? this.x2 : r.x2, (this.y2 < r.y2) ? this.y2 : r.y2); if(result.x1 > result.x2) { result.x1 = result.x2 = 0; } if(result.y1 > result.y2) { result.y1 = result.y2 = 0; } return result; 例えばthisを(3,3,1,6)、r1を(1,1,3,4)としたときこのメソッドは(0,3,0,4) という値を返します。 なぜこのif文があるのか理解できません。教えてください。
if文がない場合を考えてみれ 実際にif文を取り払って実行してみればわかるんじゃないか?
>>155 aaa.javaのjTableを呼び出せてないってことですか?
>>160 x1 > x2 とか y1 > y2 って状態が不正なんじゃねーの?
文書化されてなければ、書いた人間の意図なんぞ分からん。
> 例えばthisを(3,3,1,6)、r1を(1,1,3,4)としたときこのメソッドは(0,3,0,4)
> という値を返します。
返さんと思うぞ。
>>162 インスタンスってもんを理解する必要がある。
例えば
aaa x = new aaa();
aaa y = new aaa();
aaa z = new aaa();
とやると、同じ aaa クラスのインスタンスが 3 個できる。
aaa がテーブルを 1 個持ってたとして、aaa が 3 個あるわけだから、テーブルもそれぞれ別々に 3 個あることになる。
つまり同じ aaa のテーブルでも、「x のテーブル」 と 「y のテーブル」 と 「z のテーブル」 は別々だ。
x のテーブルに何か書き込んでも、y のテーブルにも z のテーブルにも影響しない。 別々だからな。
153 は、
aaa aj = new aaa();
aj.jTable.setValueAt("ああああ",0,6);
と書いた。 これは、それまで存在していたのとは別の、新しい aaa クラスのインスタンスを作っている。
新しい aaa インスタンスは、それまで存在していたのとは別の、新しいテーブルを持ってる。
新しく作った aaa のテーブルに "ああああ" を設定しても、それまで存在していた aaa のテーブルは変わらない。
だから新しく aaa を作るんじゃなくて、すでに存在している aaa を操作しなきゃいけない。
165 :
160 :2007/09/24(月) 02:29:02
回答ありがとうございます
>>161 if文消すと(3,3,1,4)と出力されました。書いて計算しても同じになりました。
図も描いてみましたが重なった部分と一致します。
>>163 すみません、r1は(1,1,4,4)でした。
文章化はされていません。
>thisの矩形とrの矩形が重なる矩形領域を返すメソッドです。
↑これがコメントとして添えられているだけです。
いまだになぜif文があるのか、あったとしても0にする必要すらわかりませんorz
あきらめて先に進んだほうがいいのでしょうか?
っ this と r が重なってない場合
167 :
160 :2007/09/24(月) 03:00:47
>>166 理解できました!
精進しますorz
回答ありがとうございましたm(_ _)m
168 :
125 :2007/09/24(月) 04:12:47
レスありがとうございます。 まとめてみた結果、 ・Ruby、Pythonをやってみる ・Schemeはお勧めしない という事でおkですか? 個人的に計算機プログラムの構造と解釈を読んだ感じでは、 JavaよりSchemeの方が分かりやすかったのですが。
構造化の考え方に固執しているなと感じたときにSchemeをやるといいかも
170 :
125 :2007/09/24(月) 04:45:19
今はMITでも最初のプログラミングのクラスではPythonを教えているみたいですが、 なぜ半世紀にもわたって、難解と言われているSchemeを教えていたのでしょうか? 他の大学でも大きめの所はSchemeを一番最初のプログラミングの授業で教えているみたいですが、 多くの大学はJavaやC++を最初の言語として教えています。この差はいったい?
>>164 わかりやすくありがとうございます。
基本がわかってなかったですね・・・
Javaで作ったシステムの実行性能やメモリの使われ方を測定する方法が載っている 本屋やサイトはないでしょうか?
>>170 Schemeは難解ではない。むしろ単純。
俺は最初にやるプログラミング言語としてはJavaより向いていると思っている。
ただ、Javaなどと考え方が大きく異なるので、
Java漬けにされた人間からはとても異質なものに見え、
それで難解だと思われてしまう。
174 :
141 :2007/09/24(月) 11:06:31
>>170 色々とよくご存知で
SICPには評価モデルもOOPライクなメッセージパッシングも出てくるし
少なくともやさしいJavaとSICPの最初の一章を読んだのなら
double x = points[i].getX() - SIZE / 2が意味不明ってことは考えにくい
結論としては釣られた俺涙目
抽象的な質問ですみません。 SSL認証のログインをするクライアントを作りたいのですが、どのようなことから入ればよいでしょうか? 参考にすべきサイト、書籍などありましたらそちらも挙げていただけると助かります。
SSLにログインなんて概念ないぞ なにか勘違いしてないか
まあそういってやるなよ
JMFで動画いじるには全てにおいて1フレームtoラスター画像への変換が基本。 ラスター画像が取得できれば後はどうにでもできる。 1フレームtoラスター画像への変換はフォーマットの仕様が分からないとどうしようもない。 これで分からんならJMF使う以前の問題。動画を勉強汁。
181 :
26 :2007/09/24(月) 19:06:15
>>179 あのさ、
>>26 は読んだ上で言ってるのか?それとも無視してんのか?
ニートだからってなめんなよ(泣)。
182 :
179 :2007/09/24(月) 21:30:59
ネ申
>>26 さま
>>180 さま
まさか残りわずかな状態で書いたのにレスがついているとは思いませんでした。
26さま、本当にすいません。そしてありがとうございます。
さっそく動かしてみます!!ほんとにありがとうございます。
また必ず報告しにきます!
179さま、動画の勉強もしますm(_ _)m
とりあえず、ググって勉強します。
JPAってHibernateみたいなマッピングツールなんですか?
>>174 人間的にはお前の方がずっと良い奴だよ。
気にスンナ
try { } catch (Exception e) { e.printStackTrace(); } ここのe.printStackTrace()で出力される内容と同じ文字列を 取得したいのですがどうしたらよいでしょうか? e.toString(); ですとソースの行番号などが出てくれません。
>>186 StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String str = sw.toString();
文字列を解析するようなことをするくらいだったらgetStackTrace()のほうがいいかも
JavaでDBを使用しない場合に(GUIの話でもなく)、 テーブル構造のデータを扱うのに便利なAPIなどありませんでしょうか? 現在は、ArrayListやHashMapでやってますが、不便です。
二次元配列。
クラス配列?
DBの構造が使いやすいのなら、DBを使えば? 何もOracleとかPostgresみたいな大層なバックエンドを用意しなくても、DerbyとかHSQLDBとかそういうのを。
>>190 どう不便なのかを書いてくれないと解らん。
データクラスの1次元配列でいんじゃねーのか。
final double L1=60; final double L2=120; final double RH=L1+30; final double L3=L1/2.0; doule [][] xRoof{{0,0,L3,L3},{L1,L3,L3,L1}}; doule [][] yRoof{{L1,L 1,RH,RH},{L1,RH,RH,L1}}; doule [][] zRoof{{0,L2,L2,0},{0,0,L2,L2}}; doule [][] xDoor{L3,L3+10,L3+10,L3}; doule [][] yDoor{10,10,40,40}; doule [][] zDoor{L2,L2,L2,L2}; こういう記述をすると";"がありませんと出るのですが どこが間違ってるのかわかりません。 教えてください。 バージョンは1.4.1です
×doule [][] xRoof{{0,0,L3,L3},{L1,L3,L3,L1}}; ○double [][] xRoof = {{0,0,L3,L3},{L1,L3,L3,L1}}; あと、配列の次元数がおかしくないか、下の 3 つ。
完全に見落としてましたorz 下3つはドアみたいな感じで付け足してみたんですが…
>>198 コメントアウトするとかできないのかよw
>>190 です
よく考えると、DB関連って、Serializableじゃないから、
Servlet間の移動とかは元データでして、
利用直前にDBに入れて取り出さないと駄目だな・・・
それでも多分問題ないと思うけど。
Servletとか言ってんのならDBサーバ立てる方がいいんじゃね
Javaから勉強始めました クラス、コンストラクタ、インスタンスの役割みたいなのがいまいちわかっていないので よく説明できているHPあったら教えていただけないでしょうか ヨロシクお願いします
クラスはぶっちゃけJAVAファイルみたいなもん インスタンスはクラスをメモリ上に読み込んだ物 コンストラクタは、メモリ上に読み込むときにあれこれ初期化したりするのに使う デストラクタって言葉が頭に浮かんできた。 あれはC言語だっけ?
>>206 いや、C++。GCのないOOP言語でインスタンス内のリソースを解放するために使う。
というか、コンストラクタもデストラクタもクラスの機能なので、構造体しかないC言語には当然ない。
Cにはインスタンス化っていう概念が無いからな
クラスは、たこ焼き器で インスタンスは、たこ焼き。
メタクラスとメタメタクラスは?
アプレットでないAWTで、ウィンドウを閉じるボタン(右上のバツマーク)を押されたとき、どのイベントが飛んでくるのですか? SwingではsetDefaultCloseOperationですが、AWTでの方法を教えてください。 Win Vista + Eclipse 3.2 + Java 1.6.0
WindowListener#windowClosing
出来ました。ありがとうございます。
>>210 それはファクトリクラスとファクトリが生成するインスタンスの関係だろ。
クラスとインスタンスの説明するなら車の設計図と車とか言えよw
それがね奥さん クラスはたい焼きの型で インスタンスはたい焼き なんて書いてある入門書が沢山売れてたりするんですよ
それのどこが悪いの?
抽象概念を徹底するより、無数の具体例に当たるほうが理解が早いと信じている俺
数個の具体例で把握できるやつもいるが、それこそ無数の具体例でも把握できない奴もいる。
>>216 それだとOOPの説明してるのにオブジェクトという抽象的な概念が説明できなくてメタクラス辺りのメタな話に突入してしまう気が・・・。
「じゃあ鯛焼き機はどうやってつくるの?」みたいに聞かれない?
クラスをオブジェクトではなく構文や仕様の一部としてるクラスベースOOPならクラスは
オブジェクトを具象化する雛型でそれから具象化されたのがインスタンスだと言えばややこしいメタな話はしなくて済むと思うんだけど。
まあ、SmalltalkとかIoとかのOOPの話なら別として。
あれだ。「1+1は」を考える頃はたとえばリンゴ一個にもう一個加えるって習うけど 「虚数」を考えるときにリンゴの具体例はいらないだろ。あっても訳わかんないだろ。 メタクラスをやる時に鯛焼き機の具体例はいらないよ。
>>221 >メタクラスをやる時に鯛焼き機の具体例はいらないよ。
それはオブジェクトという概念を理解した上でその下にあるメタクラスやメタメタクラスの概念を勉強するからでは?
SmalltalkのOOPが理解できれば話は早いんだけどね。
最近だとOOPの教本は何故かjavaだしjavaがC構文だからSmalltalkは余計に難しいかね。
#個人的にはjavaはOOPの教本向きじゃなくてツールキットやフレームワーク(ミドルウェア類のアプリケーションの一個下にある層)、
それに絡めてデザインパターンの使い方の教本向きだと思う。
たこやき-「たこやき」という概念-「概念」という概念-「「概念」という概念」という・・・ Java言語におけるユーザ定義クラスのインスタンス-Java言語におけるユーザ定義クラス - Java言語におけるクラス - オブジェクト指向におけるクラス
たこ焼き機とたこ焼きは明らかに御幣を生むって。 まだ、たこ焼きのレシピがクラスのソースコードで、newがたこ焼き機、インスタンスはたこ焼きって言う方が近い コンストラクタ(レシピ)には具が渡され、微妙に具が異なるたこ焼きもできるってな
メタクラスの説明のところでレシピのレシピ?とかなって、行き詰るよ クラスとインスタンスの関係は、「特定言語において規定された」一つの概念の インスタンスなんだから、具体に拠って理解したかったら変な例えじゃなくて いろんなOOPLの言語仕様を見比べたり、良質なソースコードを読んで クラスがどのように使われているか調べたりするほうが正しいやり方
>>225 細かく説明すればいいってもんじゃない。物には程度っていうもんがあるだろうよ。
わかりやすくするために比喩を使ってるのに、その比喩が細かすぎてわかりにくいんじゃ本末転倒だ。
所詮初心者向けのたとえなんだから、 納得できなければスルーするなり各自修正すればいいだけじゃまいか。 万人向けのたとえなんて存在しないんだから。 ちなみに鋳型のたとえはメイヤー本なんかでも出てくる由緒正しきたとえ。
>>204 DB(Oracle)も使ってるのですが、
作業の都合でDBに入れられないデータもあるので仕方がありません。
これは、H2使うとメモリ使用量が倍以上になってしまうのでまずいなぁ。
テーブル構造のデータ型でSQLも使えるのがあるといいのに…LINQとか?
関数にArrayListを渡して、その関数内でaddしても 関数から抜けるとaddされた行がないのはなぜでしょうか?
関数に渡されるのは、ArrayListオブジェクトの参照だから問題ないはず。 returnする必要も無い。 関数内で、ArrayListをコピーして、それに対してaddしてれば、 当然、元のArrayListにはaddされない。
追加、 関数内でコピーしたArrayListをreturnすれば、それはaddされています。 ただし、余計な処理が増えてるので処理量がほぼ倍に増えてます。
223です Canvas内のpaint()メソッドにrequestFocus();を入れて frame.addKeyListener(this);からcanvas.addKeyListener(this);に書き直したらフォーカスを取得することが出来ました。 スレ汚しすいませんでした。
GUIでファイルの一覧を表示したテーブルをダブルクリックすると外部アプリケーションでファイルを開くように作っています。 起動方法は別スレッドでProcessBuilderを使ってProcessを作成し実行という流れです。 このまま実行すると、当然ながらメインのフレームの方を終了しても各Processは終了しないのですが、それを終了と同期させて全てのProcessを終了させるにはどうしたらいいでしょうか?
Process#destroy を呼ぶとか?
やはりそうですか・・・ そうなるとスレッドを管理するマネージャーみたいなクラスを準備した方がよさそうですね。 ありがとうございました。
237 :
デフォルトの名無しさん :2007/09/26(水) 12:53:45
Windows環境のJava6でjpsもjconsoleも使えません。 開発のためにjava5, java6を入れていますが、 どのタイミングで使えなくなったまでは失念です…。 パーソナルFirewallは切った状態でも試しましたがNGでした。 ファイルフォーマットはNTFSのため、jconsoleのFAQ#1は該当しません。 他に確認すべき点はありますでしょうか? C:\>echo %JAVA_HOME% C:\Java\jdk1.6.0_01 C:\>echo %CLASSPATH% %CLASSPATH% C:\>java -version java version "1.6.0_01" Java(TM) SE Runtime Environment (build 1.6.0_01-b06) Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing) C:\>c:\Java\jdk1.6.0_01\bin\jps C:\>
javaは最新版のを使ったほうが良いですか?
>>238 特に指定されていないのなら最新版を使った方がいいよ
class Foo { pubilc int data; } class Bar { private Foo foo; Bar(){ foo = new Foo(); } Foo getFoo(){ return this.foo; } } class Test{ Bar bar; Foo foo; Test(){ bar = new Bar(); foo = bar.getFoo(); } } この時、Testコンストラクタ内で問題無くFooのインスタンスを受け取れますか?
受け取れるよ
突然だが結局の所、一番最初に読む本はHead First Javaがベストなのか?
他の言語でプログラミング経験があるのなら一冊目でもOK。 そうでないと一冊目としてはちょっと厳しい。 オライリーのサイトにサンプルがあるから眺めてみて、もし意味不明なら もう少し易しめのを読んでからにしたほうがいいと思う。
246 :
デフォルトの名無しさん :2007/09/26(水) 19:12:30
質問です。 自作のパッケージをjarファイルにまとめてimportしたいのですが 「パッケージが無い」と言われてうまくいきません。 パッケージをjarファイルにするときや jarファイルをimportするときには 何か特別な記法があるのでしょうか?
jarにパスが通ってないだけでしょ
>>246 予想だが、インポートで指定してるパスが一つ下なんだと思う。
Javaがパッケージをフォルダ構造で実現してるからこんなことが起こるんだが、
ソースファイルに、
pakcage jp.ac.〜;
とかいてあるのに、パス指定でacフォルダを指定したりしてないか?
もしそうなら、きちんとルートパッケージを指定してもう一度やってみるべし。
249 :
デフォルトの名無しさん :2007/09/26(水) 19:49:35
>>248 pakcage hoge;
の一式を
jar cvf hoge.jar hoge/*.class
して、testクラスで
import hoge.*;
してます。
jarファイル自体はtestクラスの下に置きました。
階層やらはいろいろいじってみたのですが…。
jar tf hoge.jar で jar の中にちゃんとディレクトリ階層が出来てるか確認すべし
251 :
デフォルトの名無しさん :2007/09/26(水) 19:56:44
>>250 META-INF/
META-INF/MANIFEST.MF
hoge/A.class
hoge/B.class
こんな感じです。
どこか問題はあるでしょうか。
なさそうだな じゃあやっぱりクラスパス指定してないだけでは
253 :
デフォルトの名無しさん :2007/09/26(水) 20:34:55
「MyClassクラスのメソッドは、MyClassクラスの『すべての』オブジェクトの プライベートフィールドにアクセスできる」という文法規則があります。たとえば class MyClass { private String name; ... public boolean equals(MyClass other) { return name.equals(other.name); } } が合法的となっています。 これは、データのカプセル化をこわすもので、 望ましくないものだと思うんですが、どうなんでしょうか? ご教示ください。
equals をオーバロードするとトラブルの元 とか、そういうのを抑える方が先
>>253 これは合法だな。
自分のクラスの問題だから気をつけて使うべき、て言うのが答えだと思う。
安全性を考慮するならsetter/getterを使ってアクセスするとかそういうのにしたほうがいい。
>>254 kwsk
あ、そうか。オーバーライドじゃなくてオーバーロードな。 なるほどなるほど。
>>253 カプセル化というのは、普通自分の作っていないクラス外からの
フィールドへの直接アクセスを抑制する目的で使う。
だから、まあ、気をつけて使えというところか。
この例で、equalsで使ってるフィールドは変更がないからいいものの
渡されたオブジェクトを変更するとかに使うのは危険じゃないかと思う。
なので、finalがついてるフィールドの場合に限定するとかしといたほうがいいかなぁ、と。
>>254 カプセル化とは別の話。
>>253 の話は、equals以外にも適用される。
258 :
251 :2007/09/26(水) 21:38:12
>>252 クラスパス指定って、環境変数のことですか?
それって、直下のjarファイルを読むときも必要なのでしょうか。
環境変数でもいいけど java コマンドの -classpath オプションで jar ファイルを指定する
260 :
251 :2007/09/26(水) 22:09:24
>>259 解決しました。
ありがとうございます。
でもやっぱりいちいち指定しないと使えないのでしょうか。
実行のときまでパス指定しろと言われてしまったのです…。
>>253 望ましくないとする言語もあるね。Rubyとか。
言語設計の思想の話だね。
>>260 実行可能jarファイルにしてしまえばOK。
Class-Pathエントリに書いたjarファイルはクラスパスに追加される。
263 :
251 :2007/09/26(水) 22:25:47
>>262 解決しました。
ありがとうございました。
264 :
253 :2007/09/26(水) 22:34:00
答えてくださったみなさま、どうもありがとうございました。
265 :
デフォルトの名無しさん :2007/09/27(木) 00:51:51
パッケージ名でcommonとutilとつけるパッケージをたまに見かけるのですが いまいち違いわかりません。 違いを教えて
そのパッケージを作ったやつに聞け utilの方はjava.utilかもしれんが、jakarta commonsはsが付くしなあ
268 :
デフォルトの名無しさん :2007/09/27(木) 02:10:02
java初心者です。 javaのプログラムの中にfortranやcなど異なる言語を実行させるにはどうしたら いいでしょうか?
JNI を使う
JNIは地獄を見た記憶しかないなぁ
JNI使うメリットのある物って最近ないよなぁ。 むかしは、JNIのオーバーヘッド(作成の手間も含めて)に対して パフォーマンスメリットがあったり、Javaじゃ実現できない機能が使えたりしたから、 JNIもよく使われたけど、Javaの実行環境、ライブラリの性能が上がって 機能も増えてきたから、JNIでないと、というものが減ってるよね。 ホントにどうしても使いたいって別言語のプログラムは、もう別プロセスで動かしちゃう方が楽じゃないかと。 Runtime.exec()。と。 データのやり取りは、ファイルかパイプか、ソケット経由で。
それもそうだけど、初心者はおとなしくjavaで可能な事を学ぶ方が先だろうと思う
273 :
デフォルトの名無しさん :2007/09/27(木) 08:17:52
みなさんありがとうございます。 JNIっていうものはよくわかりませんが、なんか大変そうですね。 時間がないのでRuntime.exec()のやり方でやってみることにします。 Javaならほかの言語とも連携できるということを聞いたので今頑張っているんですが やっぱそう簡単にはいかないんですね。
ソースを分けて書いて、 Cみたいに単純に#includeしたいんですが javaでそういうことはできるのでしょうか?
パッケージ
>>273 それは多分javaで実装された他の言語とのシームレスな通信の話だと思う。
JNI使うメリットか・・・コンソール制御は需要ないだろうし、今はVMが異様に早いからなぁ。
JNI噛ますオーバーヘッドとネイティブコードを書くデメリットの方がでかいよなぁ。
ほとんど使われなくなったSWTの今・昔の状況が物語ってるね。
まあ広く利用価値のあるJNIってJOGL,JOAL,JMFくらいだろうね・・・。
278 :
デフォルトの名無しさん :2007/09/27(木) 10:41:55
JOptionPaneのような メソッド実行→ダイアログ描画→ユーザーの入力待機→入力に応じた返り値 というのは、JDialogでいったいどうやって実現すればよいのでしょうか。 メソッド実行してからメソッド内のどこかで入力待機してる筈なのですが、 ソース見てもいまひとつわかりませんでした。スレッドを新設してるのでしょうか。
279 :
179 :2007/09/27(木) 10:48:53
>>26 さま
実行してみて英語がファッキンな私でもだいたい何してるかはわかったんですけど・・・
要するに1フレームごとに分けて、フレーム数とかもわかるのはいいんですけど、1フレームごとに分けた画像とかってどっかのフォルダに入っちゃったりしてるんですか?
画像にしてRGB値の変化みてけってことですよね?
>>278 setModal(true) したあと setVisible(true) を呼ぶと、閉じるまでそこで停止する
281 :
デフォルトの名無しさん :2007/09/27(木) 11:34:55
>>280 ということはイベントディスパッチスレッドからsetVisible(true)をすると、
イベントディスパッチスレッドが止まって、ダイアログのボタンが押せなくなったり、
ダイアログを閉じられなくなったり、いろいろえらいことに・・・
ってそんなわけありませんよね・・・。
ダイアログをモーダルにするっていうのは、呼び出し元の操作を受け付けなくするだけちゃうん?
>>179 26さまじゃないが単にフォルダ指定してないだけじゃね?
>>281 それは大丈夫だと Dialog#setVisible の Javadoc に書いてある
>>282 ダイアログが非表示になるまで戻らないと Dialog#setVisible の Javadoc に書いてある
286 :
デフォルトの名無しさん :2007/09/27(木) 14:10:12
>>280 ,
>>284 ありがとうございます。
これですね。
>Dialog#setVisible
>モーダルダイアログに関する注意.
>
>このメソッドがブロックされている間は、 ほかのイベントはブロックされないようにツールキットで保証>されるので、 イベントディスパッチスレッドからこのメソッドを呼び出してもかまいません。
結局仕組みがよくわかりませんが、Dialogが不思議な力で護ってくれる、と。
287 :
237 :2007/09/27(木) 17:00:35
あれ、書き込んだつもりだけど気のせいだった orz jdk1.6.0_02を入れたけど症状は変わらず… ってかプロセスIDを取れないんだったら取れなかったという ログを出して欲しいけど、それすら出さんのね…。 -verbose的なオプションがあればまだしも…。
ageんな 最近あがってるスレに変な宣伝urlが書き込まれるようになってる
質問です。 Javaの画面上で「Alt+Space」を押すと左上にポップアップが出て、 サイズ変更や移動ができてしまいますが、このポップアップを表示させない ようにできないでしょうか? あるいは、「移動(M)」だけでも無効にできるといいのですが。。。 (「閉じる(Alt+F4)は無効にしています)
>>289 それはWindowsそのものの機能でJava固有のものではない。
そして、俺はそこまでしか知らない。
>>289 resizeとmovedを検知して、元に戻す方法なら知っている
292 :
26 :2007/09/27(木) 18:49:36
>>279 290行で int 配列を取ってるだろ?これが 1 フレーム分の画像そのものの情報。
あとは RGB 成分に分解して好きにしろよ。
ちなみに 292 行の判定文は単に俺が 100 フレーム目の画像を取り出そうかな
と思って入れてただけ。別に 100 に重大な意味はない。
290行以降は画像として保存してちゃんと取得できてるかチェックしようかなと思って
追加した処理。別に必要なきゃ削除しろよ。
ってこれで分からないなら何がどう分からんのか詳細にかけやコラ(号泣)。
>>289 L&FでOSによるウィンドウのデコレートを取ってしまう
たぶんWindowsっぽくなくなるけど
質問です。 JavaVMのソース(Cなり、Javaなりでできているもの)は手に入らないものでしょうか? Windows用でもLinux用でもなんでも構いません
JVMなら何でもいいの? たしかどっかでPureJavaのJVMがソースとともに公開されてた希ガス
オープンソースのJavaVMがいくつかあるよ ぐぐってみれ
jdk1.3程度に対応できれば十分な感じです。 今、最近オープンソース化されたjdk7.0用?のvmのソースを落としてきたのですが、膨大すぎて…。
298 :
289 :2007/09/27(木) 23:28:34
>>290 ということはJavaでは制御できないと。。。orz
>>291 その方法教えていただけないでしょうか?
>>293 UIManager.setLookAndFeel(String className) でセットしている
見た目をWindows以外にする、ということでしょうか?
そもそもWindowsのフレームについちゃってるみたいだからlafで変えても無駄だよー
エスパーな質問になるかもしれませんが質問があります import java.awt.*; import java.awt.event.*; public class HelloWorld extends Frame{ /********** コンストラクタ **************/ public HelloWorld() { setSize(400,300); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } /*************** paint ****************/ public void paint(Graphics g) { g.drawString("私の名前はtestです",20,60); } /**************** main ************/ public static void main(String[] args) { Frame w = new HelloWorld(); w.setVisible(true); } } クラス、インスタンス、オブジェクトの理解が曖昧なので間違っているかもしれませんが g.drawStringというのは何かのクラスをgという名前でインスタンス化したものだと思うのですが、どこで実行されたものなのでしょうか xxxx g = new xxxx(); がないとおかしくないのかなと思っています
Frameのインスタンスが作成された時、見張り役を設定する。 見張り役が画面の再描画が必要であると判断した時に、Graphicsのインスタンスgを作成し、Frame#paint(g)を呼び出す。 こういう説明でおk?
>>301 なるほど
画面のサイズを変更したときに
画面から欠けてたものを再描写するとき(最初の描写も?)に
自動的に gという名前でインスタンスを作成してくれるということですね
>>300 g は AWT の中でインスタンス化されて paint に渡される。
ソースは提供されてないので、残念ながら new してるところを見ることは出来ないが、どこかで new されてるのは間違いない。
質問 先生から 「repaint()でupdate(Graphics g)メソッドを呼び出し、update(Graphics g)メソッド内でpaint(Graphics g)メソッドを呼び出す」 と聞いたのですが・・・ repaint()とupdate(Graphics g)の間(?)ってどうなっているんですか? repaint()でrepaint()メソッドを呼び出さないんですか?
305 :
デフォルトの名無しさん :2007/09/28(金) 00:31:08
>>304 public void update(Graphics g){
/*
本来ならここで画面全体を背景色で塗りつぶす処理が入るが、
このメソッドをオーバーライドしその処理をあえて飛ばす事が出来る。
*/
paint(g); // 引数で渡されたGraphicsオブジェクトをそのままpaintメソッドに渡す。
}
>>304 例えば
>>300 のプログラムみたいに paint メソッドで背景を消去し忘れてても大丈夫なように、
update はウィンドウの背景を消去してから paint を呼ぶ。
クラス設計?に関する質問です。 JTableを継承して、いくつかの追加機能を設けたExtendedJTableを作りました。 この追加機能を利用するにはTableModel側にも拡張が必要で、 TableModelインターフェイスを拡張したサブインターフェースExtendedTableModelを作りました。 この拡張されたTableModelを実装したテーブルモデル用に ExtendedJTable#setModel(ExtendedTableModel tablemodel){ super(tablemodel); } を定義したのですが、JTableを継承したときに、 JTable#setModel(TableModel tablemodel)も継承しているので、 追加機能に対応していないテーブルモデルを設定することもできてしまいます。 この場合追加機能を用いようとしても当然無理なので、どうにかしたいのですが、 どのようにするのがよいのでしょうか。 JTable#setModel(TableModel tablemodel)を潰すことはできませんよね。 設計に何か根本的な間違いがあるのでしょうか。 class ExtendedJTable extends JTable{ public void setModel(ExtendedTableModel tablemodel){ super(tablemodel); } public void somethingWonderful(){ //JTable追加機能 ExtendedTableModel tablemodel=(ExtendedTableModel) getModel(); //以下追加機能のロジック tablemodel.addedTableModelMethod(); //etc... } } interface ExtendedTableModel extends TableModel{ public void addedTableModelMethod(); //JTable#extendedWonderfulSomething()で利用されるメソッド }
ExtendedTableModelでないTableModelを設定しても、 TableModelであることを前提に動作している部分は問題ないのでは? TableModelとしてExtendedTableModelで追加された機能を使うわけではないので。(コンパイルできないし) ExtendedJTableにしろExtendedTableModelにしろスーパークラスの機能を潰しているわけではないんでしょ? もし、機能の追加でなく機能の削除のための継承なら、それは間違った継承の使い方だと思う。
ちょっと待て、無警戒にExtendedTableModelでキャストしてるのか。 ExtendedTableModelかどうかを見て、ExtendedTableModelでなければ、 TableModelとして扱い、追加機能を使わないようにしないと駄目だと思う。
>>308 >>TableModelであることを前提に動作している部分は問題ないのでは
その通りです。
しかし追加機能を使おうとすればキャストで例外が生じてしまいます。
既存のクラスをできるだけ流用しつつ
ExtendedJTableでは必ずExtendedTableModelを実装したテーブルモデルを対にして
使うことを強制するような設計はないのでしょうか。
>>309 例には書きませんでしたが一応ClassCastExceptionをキャッチしてます。
>>307 ExtendedTableModel#setModel(TableModel)を定義して、
渡されたTableModelがExtendedTableModelのインスタンスでなければ例外を出すのじゃだめ?
>>311 やはりそれしかありませんか。
実行するまでわからないのがネックですね。勉強不足で申し訳ないのですが、
巷で流行りのでざいんぱたあんといふものでうまくいかぬものか、と考えていたのですが。
@DeprecatedをExtendedTableModel#setModel(TableModel)に付ければコンパイル時に警告は出せるけどエラーにはならないね
所詮は趣味なので、極端な話コメントに注意を書いとけば 例外のキャッチすら要らないのかもしれませんが、 後学のためにと、ちょっと興味を持ったもので。 こんな時間に付き合っていただき、ありがとうございました。
315 :
デフォルトの名無しさん :2007/09/28(金) 06:44:17
JavaでMIDIを再生してるんですが、 音飛びというか安定して演奏されないことがあります。 安定して演奏されるようにするにはどうすればいいでしょうか。
>>314 徹夜頭でうつらうつらと考えたんけど、
ExtendedJTableでしか使われない機能を定義しているExtendedTableModelをTableModelから継承しているのが問題で、
public interface ExtendedTableModel {
void addedTableModelMethod();
}
にして、
public class ExtendedJTable extends JTable {
//ExtendedTableModelのデフォルト実装
private ExtendedTableModel extendedModel = new DefaultExtendedTableModel();
public void setModel(ExtendedTableModel model){
extendedModel = model;
}
public void somethingWonderful(){
TableModel model = getModel();
extendedModel.addedTableModelMethod();//拡張機能を使用するとき
model.getRowCount();//TableModelの機能を使用するとき
}
}
のようにすればいいんでは?
ExtendedJTableのコンストラクタにTableModelとExtendedTableModelの両方を指定するものを定義するとか、
setModel(TableModel, ExtendedTableModel)みたいなメソッドを定義するとか、
便利にするための追加はいろいろとやることにして。
で、面倒ならTableModelとExtendedTableModelを継承するインタフェースを作って、
それを実装したクラスを両方のモデルとして与えてやると楽とか。
setModel(TableModelAndExtendedTableModel model) { super.setModel(model); extendedModel = model; }
こんな感じのメソッドを作って。
>>315 どうやってMIDI再生しているかによるけれどJavaSound APIを使っているなら
バッファリングのパラメータを調整してみるのはどうだい?
>>317 midiの再生だからバッファの問題よりもマシンリソースが足りないんじゃないかな?
実行環境のスペックとか再生方法が分からないと何とも言えないけど。
319 :
315 :2007/09/28(金) 07:23:40
>>317-318 Sequencerを使っています。
Celeron(2.2G)よりもCore2(T7200)の方が
音飛びが発生する時間は遅いのですがそれでも発生します。
----【即系サイト×優良サイト=即会い即やり!】-----------------------
優良出会い系サイトと即出会えるサイトを併用して使い、即会いライフを楽しんでいます。
これが面白いほど会える☆ 会った後は・・・
俺の場合、出会い系サイト3つで女の子と週2〜3で出会えてます。
これ以外にもお気にの女の子とは週1で会ってます。
今回は皆さんにも出会いを楽しんでもらいたいので、俺が使っている
登録後一日以内に出会えたサイトを紹介するブログ始めました。
皆も休日にエンジョイしてください!
↓↓↓
【即出会えるサイト紹介ブログ】
http://deaigets.blog97.fc2.com/ --------------------------------------------------------------------
>>316 >徹夜頭でうつらうつらと
すみません。ありがとうございますm(><)m
基本的なテーブルモデルと、拡張された部分とに分ける案ですが、
そうすると拡張部分のメソッドからテーブルモデルのフィールドを
読んだり書き換えたりするのがするのがだいぶ大変になりそうですし、
ExtendedTableModelが単独だと意味をなさなくなりますし、
どうやって分離するのかちょっとわかりません。
class MyTableModel implements TableModel{]
class DefaultExtendedTableModel extends MyTableModel implements ExtendedTableModel{}
のようにするのでしょうか。
そもそもJTableを継承してsetModel(TableModel)が生きてる時点で、
「ExtendedJTableでは必ずExtendedTableModelを実装したテーブルモデルを
対にして使うことを強制するような設計」という要件が難ありですね。
やはり無理なことを考えているのでしょうか。
Javaはインターネットブラウザの代わりに自動的に通信することは可能でしょうか? 定時毎に指定したID,PASSでログインして HPから情報をもってきたいと思っております
323 :
デフォルトの名無しさん :2007/09/28(金) 10:14:39
>>321 普通のTableModelがセットされたときは、普通のTableModelにExtendedな機能を外付けするラッパークラスをかぶせるっていうのはどうかな。
class ExtendedTableModelWrapper implements ExtendedTableModel {
private TableModel originalModel;
public ExtendedTableModelWrapper(TableModel originalModel) { this.originalModel=originalModel; }
// 既存のメソッドはオリジナルモデルに転送
public int getRowCount(){return originalModel.getRowCount();}
public int getColumnCount(){return originalModel.getColumnCount();}
......
// 追加の機能を実装
public void getDimensionCount(){return 1;}
......
}
class ExtendedJTable extends JTable {
public void setModel(TableModel model) {
if (!(model instanceof ExtendedTableModel)) {
model = new ExtendedTableModelWrapper(model);
}
super.setModel(modle);
}
......
}
326 :
279 :2007/09/28(金) 12:35:31
>>292 さま
号泣させてすいません。その辺をいじっていこ〜と思います。
次もし何か書くならもっと詳しく書きます↓↓
なんか オブジェクト、クラス、インスタンスのことがわかってきたぁぁ! お前らマジでありがとう
eclipseでjunitテストケースを大量に一括実行(500件くらい)すると、 400あたりでOutOfMemoryErrorが発生して、それ以降テストが実行されなくなるんだけど、 何か良い回避策ありませんか?
テストされる側がメモリリークしてるってオチはないの?
>>328 Antでやれば?
それだけの件数になると、EclipseのJUnitビューよりも
Antのjunitreportタスクの出力の方が見やすい。
>>321 まだ眠いやw
ExtendedTableModelがTableModelを継承するのが元凶なので、それを回避する方針は変えないとして、
ExtendedTableModel内でTableModelの機能を使いたいのならExtendedTableModelがTableModelを持てばいいと思う。
public interface ExtendedTableModel {
void setModel(TableModel model);
void addedTableModelMethod();
}
にして、ExtendedJTableは
>>316 のままで、ExtendedTableModelの実装は例えば、
class DefaultExtendedTableModel implements ExtendedTableModel {
TableModel model = new DefaultTableModel();
public void setModel(TableModel model) {
this.model = model;
}
public void addedTableModelMethod() {
model.getRowCount();//TableModelの機能を使用するとき
}
}
コンストラクタでTableModelを指定することを強制するExtendedTableModelの実装もありだろうし。
ExtendedTableModelを抽象クラスにして、TableModelを持たせる部分あたりはExtendedTableModelで実装してしまう手も。
問題はあるか。ExtendedJTableで、 public void setModel(TableModel model) { extendedModel.setModel(model); } みたいにオーバーライドして、 public void somethingWonderful(){ TableModel model = extendedModel.getModel(); extendedModel.addedTableModelMethod();//拡張機能を使用するとき model.getRowCount();//TableModelの機能を使用するとき } のようにしないといけなかった。ExtendedTableModelにもgetModel()を追加。 public interface ExtendedTableModel { void setModel(TableModel model); TableModel getModel(); void addedTableModelMethod(); }
でも、これだとオーバーライドしていないJTableのメソッドを呼び出すと、 extendedModelが持っているTableModelを使わないねorz public void setModel(TableModel model) { extendedModel.setModel(model); } は、 public void setModel(TableModel model) { super.setModel(model); extendedModel.setModel(model); } にしてsomethingWonderful()のTableModel model = extendedModel.getModel();は このままでもmodel = getModel()にしてもいいという感じでいけるのかな。 JTableのTableModelとExtendedTableModelのTableModelが一致するようになっていればいいわけで。
>>333 テストプログラムを作ったらコンパイルは通るけど実行時エラーが起きるよ
ExtendedJTableをnewする時にJTableのコンストラクタがsetModel(TableModel)を呼ぶもんだから
extendedModelが初期化されないうちにextendedModelを使おうとしてる
private ExtendedTableModel extendedModel = new DefaultExtendedTableModel();
public ExtendedJTable() {
setModel(extendedModel);
}
public void setModel(TableModel model) {
super.setModel(model);
if (extendedModel != null) extendedModel.setModel(model);
}
public void setModel(ExtendedTableModel model){
super.setModel(model.getModel());
extendedModel = model;
}
335 :
デフォルトの名無しさん :2007/09/28(金) 15:42:39
ExtendedTableModelにTableModelを引数として足りないところをデフォルトで補うコンストラクタを作ればいいんじゃないの?
>>335 スマイルマークを作るって具体的にどういう意味だ。
Windowsのペイントみたいなお絵描きソフトを作りたいってこと?
338 :
デフォルトの名無しさん :2007/09/28(金) 15:59:24
>>337 Javaで四角や三角を作れるようにスマイルマークは作れますか?
>>338 四角や三角を作るって具体的にどういう意味だ。
fillRect や fillPolygon で四角や三角を画面に描画するって意味なら、drawImage で gif 画像を描画すればいい
javaの描画ライブラリで書きたいって事じゃない? javaにはJava2Dというものがあってだね・・・ スマイルマークってドローベースの方が適切だよな。
そんな面倒臭いことをしたいのか。 Path2D.Double クラスにベジェ曲線を設定していって、fill で塗りつぶせば描けるとは思うが。
ant の build.xml に junit タスクを組み込もうと思ってるんだけど、エラーが出る。 環境は ubuntu feisty で、以下のような手順でやった。 $sudo apt-get install ant $ant -version Apache Ant version 1.6.5 compiled on July 5 2006 $sudo apt-get install junit $ls /usr/share/java/junit-3.8.1.1.jar /usr/share/java/junit-3.8.1.1.jar $ls /usr/share/ant/lib ant-bootstrap.jar ant-launcher.jar ant.jar junit.jar $echo 'export ANT_HOME=/usr/share/ant' >> ~/.bash_profile $source ~/.bash_profile $which ant /usr/bin/ant $ant BUILD FAILED /home/xxxx/build.xml:68: Could not create task or type of type: junit. なんででしょ?
エラー書けよw
>>345 Ant could not find the task or a class this task relies upon.
This is common and has a number of causes; the usual
solutions are to read the manual pages then download and
install needed JAR files, or fix the build file:
- You have misspelt 'junit'.
Fix: check your spelling.
- The task needs an external JAR file to execute
and this is not found at the right place in the classpath.
Fix: check the documentation for dependencies.
Fix: declare the task.
- The task is an Ant optional task and the JAR file and/or libraries
implementing the functionality were not found at the time you
yourself built your installation of Ant from the Ant sources.
Fix: Look in the ANT_HOME/lib for the 'ant-' JAR corresponding to the
task and make sure it contains more than merely a META-INF/MANIFEST.MF.
If all it contains is the manifest, then rebuild Ant with the needed
libraries present in ${ant.home}/lib/optional/ , or alternatively,
download a pre-built release version from apache.org
- The build file was written for a later version of Ant
Fix: upgrade to at least the latest release version of Ant
- The task is not an Ant core or optional task
and needs to be declared using <taskdef>.
- You are attempting to use a task defined using
<presetdef> or <macrodef> but have spelt wrong or not
defined it at the point of use
Remember that for JAR files to be visible to Ant tasks implemented
in ANT_HOME/lib, the files must be in the same directory or on the
classpath
>>346 read the manual pages
>>349 - The task needs an external JAR file to execute
and this is not found at the right place in the classpath.
ant-optional インストールしたら出来た
結局 web で調べて分かったんだけど、もうちょっと調べて書くべきだったと反省している。
が、
>>347-348 ,
>>350 きみら分かりもしないことにわざわざ答えなくていいよ。
マニュアル読めとか、何のためにこのスレあるの。
スレタイにマニュアル読んでも分からない質問専用って書いとけ。
>>352 The task needs an external JAR file to execute
and this is not found at the right place in the classpath.
>>352 少なくとも質問してるくせに態度が横柄なお前のためにあるわけではないな。
>>356 あー、あ、君、もう帰っていいよ。ごくろうさん。
>>356 スレを占有しすぎですw
質問する前に、ググったり、質問の要点をまとめてこない人は
来ない方が、スレのためにもいいと思います。
正直、エラーを読んで「どこが分からない」とか書かない段階で読まないよ俺は。
すんげー親切なエラーじゃないかwww
>>356 マニュアル嫁と、エラーメッセージに書いてあるんだよw
362 :
デフォルトの名無しさん :2007/09/28(金) 21:55:35
>質問すら読まず適当に返事する奴に何故敬意を払わないといけないのか。 マニュアルすら読まずに質問する奴を何故人間として扱わないといけないのか。
>>356 スレの住人はてめーの同僚でも先輩でも先生でもお友達でもないって覚えとけ
>>361 エラーメッセージを繰り返すだけしかできないんだろ?質問の意味も分からず、
エラーメッセージ繰り返してるんだろ?
ubuntu では ant で拡張タスクを利用するのに apt-optional をインストールしないと
いけないということは知らなかったんだろ?
マニュアル読まずに質問した俺もまずかったが、質問に答えられない連中が偉そうに
マニュアル読めだの言う空気はどうかと思うよ。
なに無能が偉そうに講釈たれてんのよ 知ってる知らないにしても普通はマニュアル見るなりして調べるだろ 質問に答えられないとか笑わせるなカス
367 :
デフォルトの名無しさん :2007/09/28(金) 22:15:06
>364 お前さんの書き込みを発端として、出来上がった空気である事がわからないほど子供なの? 感情より実益を優先させようよ。 すまんかった、他にもいい感じの情報があったら教えてくれないだろうか?ってふうに言ってみたら、棚ぼた的にもっと良い事を教えてもらえるかもしれないじゃん?
>345>346の流れで既に空気嫁
>すんげー親切なエラーじゃないかwww 親切すぎてコンソールからスクロールアウトしちゃうw
初心者や質問者をこけにし過ぎ。 上級者なら通ってきた道、凡その見当がつくだろ?優越感に浸りたいだけなバカ共。 アドバイスも出来なら中傷すんな。
というか一つのタスクが実行できないだけでこれだけの可能性を提示した上にマニュアル嫁まで言ってくれるantはとんでもなく優秀なエスパーだな。
マニアル嫁ならアホでもな。
わかりません。教えてください。初心者です。
ああ、こんなに親切なチュートリアル付のエラーメッセージは始めてみたな
流れぶった切りで申し訳ありません。 アプレットでJTextAreaを使った場合にTabキーがインデントにならず、 アドレスバーにフォーカスが移ってしまうのはどの様に回避すれば宜しいでしょうか? 過去ログでは逆の質問はよく見たのですが・・・
アドレスバーにって、ブラウザ上での話? ブラウザ上の話であれば、アプレットの問題じゃないから制御しようがないかも。
マニアル嫁終了
>>325 、
>>331 、
>>332-334 出払っていたので亀レスになってしまいましたが、
丁寧に回答頂きありがとうございます。
いま帰宅したところで脳みそぐったりなので、
後ほどゆっくり読ませていただきます。
自己紹介いらねぇ
俺antでant自身の構成が原因のエラーって出した事ないな。こんなに親切なのか。
taskdefの書き損じで一発で出るぞ そして、どんなエラーのときも同じメッセージが出るので全く親切じゃない
382 :
デフォルトの名無しさん :2007/09/29(土) 10:52:58
>>381 毎度同じ事言わせんなっていう開発者からのメッセージだな。
で、言いたい事は「マニュアル嫁」と。
状況を知らないスレ住人が居る。
↓
>>344 ↓
>>345 ↓
>>346 ↓
とりあえず、エラーの内容を住人が読んで、どこまで突き止めたか調べるために、
マニュアル嫁と言う。
↓
>>349 今読んだ
↓
自己解決した。無知の癖にくだらんレスすんなボケ。
↓
住人「は?」
どう考えても、質問者の態度が悪いだろ。
マニュアルは俺の嫁
スレ住人は全知全能じゃない。暇だからこのスレに張り付いているわけで、 何か困難なことがあれば、一緒に助けてやるというスタンスのところに、 ああいう自己中が来ても意味無いよな。
>>386 同意。なにサポートと勘違いしてるんだよって話だ。
アドバイザーはボランティアであって、知ってても答えてやる義務はない。
謙虚な初心者がいるなら、少しヒントでも出してやろうっていうぐらいなのに、
勘違いしたヤツが、教えてもらって当然とか思ってたら煽られても当たり前。
赤の他人にものを教えてもらってるって事を忘れるな。通りすがりの人に道を聞くのにもそんな態度がでかいのか?
>>370 > 初心者や質問者をこけにし過ぎ。
> 上級者なら通ってきた道、凡その見当がつくだろ?優越感に浸りたいだけなバカ共。
> アドバイスも出来なら中傷すんな。
マニュアルやエラーメッセージ読めって立派なアドバイス。
アホでも書けるって言うけど、それすらしていない大アホが言うな。
なんで最近の初心者ってマニュアル読まないんだろうね 初心者本とか入門サイトが氾濫してるせいかな?
答えを引き出せる質問をひねり出せるか、ってのも重要なスキルだって事か。
いわゆる質問力ってやつね 質問の仕方が下手糞で、相手から情報を引き出せない人をよく見かけるわ 愚直に質問力関連の本を読んで勉強するのもいいけど、 人の動かし方とか、自分が何を解決したいのかを伝えるプレゼン力ってのも必要になるから、 実践力を身につけたいなら、そういったスキルも勉強したほうがいい
>>392 HeadFirstJavaがお勧め
わかりやすいし、それなりに実践的
じっくりやりたいなら、独習Java
章末に演習問題があって、それを解くことで力を養っていくスタイル
やさしいJavaは1日で読めてしまう、内容の無い本
ネットでJavaの入門ページ探せば事足りる程度
>>393 最初に検索にかかったので行ってきたのですが
2ch初心者の私には正しい情報の取捨が出来ないと思われる雰囲気だったのでこちらにきました
>>394 ありがとうございます
まずはその順番で進めていこうと思います
396 :
デフォルトの名無しさん :2007/09/29(土) 14:42:02
>>395 順番?
どれか1つでいいんだよ
迷ったら、とりあえずHeadFirstJavaでいい
あれが一番バランスのある入門書だろう
>>391 >実践力を身につけたいなら、そういったスキルも勉強したほうがいい
実践力を身に付けたいって自分で思う奴なら大丈夫だと思う・・・
厄介なのは自分の事を棚に上げて「お前の力が足りない」と切れる奴なので・・・
情報収集型インタビュー
>>397 そういう人は、行動心理から勉強しないとだな・・・
防衛本能からくる無意識の思考って意識されないから、客観的に自分の言動を見る癖を付けておかないと気付かない
自分から質問して、相手にぞんざいな扱われ方をされたからって、相手を侮辱するのは、基本的には防衛本能による行動
見下されたという危機意識で攻撃的な行為に出てしまう
まぁ本能に忠実なサルでしたってことで
>>400 変数の為の領域確保が、「もし」ループの回数行われるなら無駄ですよね?
でも、この場合はスタックに確保される変数なので確保は行われないはずですね。
コンパイル時点で、スタックの何処に入るか決まっています。
最適化云々ではなくローカル変数に利用するバイトコードの構造でそうなるだけです。
つまりString str1というのはバイトコードにならないということです。
StringBuilderに最適化するのは本当です。
以前は、StringBufferに展開していました。
ようは、分かりやすくコードを書けということです。
JTableについての質問です。 JTableで行のダブルクリックを検出できるようにしたいのですがMouseListenerを取り付けてしまうとイベントを横取りしてしまうのか、行の複数選択ができなくなってしまいます。 よかったら打開策をご教授ください。
書き込もうとしたら、
>>401 が既にレスを・・
私のほうは参考程度に・・
>>400 最適化されるされない以前の話でいえば、変数のスコープが変わる
ってそのページに言及されてる
一時的な変数は必要になる直前で宣言したほうがいい
だから、
String str1;
str1 = "foo" + i;
System.out.println(str1);
という実装はよくなくて、
String str1 = "foo" + i;
System.out.println(str1);
と、したほうがいい。
String str;の時点のデフォルトコンストラクタの呼び出しが省ける。まさに使う直前の宣言。
さらに言及すれば、
System.out.println("foo" + i);
がいい。strのスコープがwhile一回分から、printlnの引数内に収まるから。
これぐらいならコンパイラが最適化してくれるから関係ないって意見はあるかもしれないけど、
ポリシーは一貫しておいたほうが全体的なコードは綺麗になるし、コンパイラも万能じゃないから、最適化されないケースがあるかもしれない。
そんなことにいちいち左右されたくないでしょ。
もちろん、デバッグ効率を考えて、String strを生成するってのも一つの手。
何を優先させるかってのはポリシーの問題。
文字列の結合がStringBuilderに最適化されるのは本当
嘘だと思うなら、.classファイルを逆コンパイルしてごらん
ただし、文字列リテラルはその限りではないよ。
>>403 いくらなんでもString str;でStringのデフォルトコンストラクタが呼ばれるなんて書くのは。
405 :
デフォルトの名無しさん :2007/09/29(土) 18:37:40
>>404 あぁ、ごめん
C++と混同した
どちらにせよ、初期化のない変数宣言は推奨されていない
>>405 言い換えると。
初期化する必要が出てくるまで宣言は遅らせるべき、と。
Effective Javaに出てたね。
パフォーマンスの問題が、もちろん一つの理由なんだけど、 どっちかといえばプログラマーが楽なようにスコープを小さくするってほうが大きい。 これはあんまり賛同されないだろうけど、俺はなるだけ”{}”を使って、変数のスコープを小さくしてる。
>>407 便乗で申し訳ないんだけど、
>"{}"を使って、変数のスコープを小さくしてる。
これってどういう意味?
if (hoge) {
int foo = 0;
bar(foo);
}
みたいな話?
>>408 >>407 ではないが、
{
String line;
while( (line=reader.readLine())!=null ){
hogehoge(line);
}
}
という事だと思う。
410 :
407 :2007/09/29(土) 21:58:10
>>408 >>409 であってる。
これをするとインデントが深くなって、エディタによれば見にくくなるんだけど、
一つのスコープで同じ変数名を使いたいときなんかに、スコープを区切れば安全に使える。
ここまで書いてなんだけど、これ、主にCで有効な方法なんだよね。
具体的でない質問で恐縮ですが、 自分の欲しい機能を持ったクラスを探すとき、 ググる以外ではどのように探していますか? API仕様から直接探すと、クラス名だけでは判別が付きにくいのですが・・。
>>411 例えばどんな機能が欲しい?いってみれば具体的な手順を教えられるかも。
ググる意外って書いてるけど、ほとんどのクラスは"Java 機能の名前"で出ると思う。
API仕様は確認のためだけだと思った方がいいよ
readLineを使う時の書き方ってどうなんだろうな? 自分は、 while(true) { String line = reader.readLine(); if(line == null) break; // 処理 } と書く。 外に宣言ある書き方、どうしても馴染めない
>>409 こんなのできたんだね。初めて知ったよ。
>>411 APIはある程度使い込んである程度の把握が必要。
それが出来てくると、こんな感じで行う。
1. 行いたい機能の大雑把な分類からパッケージのアタリをつける
例えば、ファイル関係ならばjava.util.ioやjava.util.nioなど
2. 行いたい機能ではずせないキーワードを選び、パッケージ内から検索
例えば、File Read など
3. メソッドのサマリーを検索してみる
ここで、ないかな?と思ったならば、「似た機能」を探してみる。
似た機能のクラスを見つけたならば、そのサブクラスやスーパークラスにないかを探す。
基本APIから調べる場合はこんな感じだな。
とにかく、名前(英語名)。
正しく設計されたクラスは、適切な名前のパッケージに適切な名前で入っているわけで、英語に上手く変換できるかが肝。
>>413 for使えばお望みどおりになるよ。
for(String line = null; (line = reader.readLine()) != null;){
// 処理
}
やらないけどね。
>>415 >ファイル関係ならばjava.util.ioやjava.util.nio
java.ioとjava.nioな
>>416 String line が使いまわされているから微妙に違うだろ
static finalなメンバの初期化を 宣言時にするのと、 静的イニシャライザするのと、 違いはありますか?
>>419 意図した使い方は同じだから問題なくね?
本当は
while(String line = reader.readLine()) {
ほにゃらら
}
で書ければいいんだけど、どうしてだめなんだろうね。便利なのに。
>>420 文法的には等価。
ifとか使うとパフォーマンスで差があるかも。
>>420 ある。 例えば
static final int FOO = 1;
static final int BAR;
statuc {
BAR = 2;
}
とした場合、
switch(x){
case FOO: // OK
case BAR: // エラー
}
アクセス制御について教えてください。 一部では、protectedなメンバやメソッドのスコープは、 そのクラス及び派生クラスからのみ。 と解説されています(下記など)が、 www.atmarkit.co.jp/fjava/rensai2/javaent09/javaent09.html www.tohoho-web.com/java/modifier.htm 他の資料や、実際にコンパイラに通して試してみたのでは、 同一パッケージ無いからならば制限無く参照できるようなのです。 protectedをどういうときに使うのかいまいち解らないのですが、 どういった設計で使うのでしょうか。
425 :
422 :2007/09/29(土) 23:47:38
>>423 マジで。知らんかった。
それ、なにか理由があるのか?
>>425 理由というか純粋なリテラルか、不変な変数に代入処理をしているかという違いかと。
swichでのcaseにはリテラルしかダメ
>>424 例えば JComponent クラスの paintComponent メソッドは protected だが、これは派生クラスでオーバーライドできないと困るから、選択肢は protected か public のどちらかしかない。
なるべく外からは呼ばれたくないので、見える範囲を最小限にするなら protected ということになる。
429 :
420 :2007/09/29(土) 23:52:24
試したらホントでびっくり。
もとの疑問はますますわからなくなりましたが。
>>426 他に例があるのでしょうか?
>>424 正しい記述が行われている専門書を1冊買っておくべき。
常に参照するのではなく、この手の疑問はやはり言語定義とかそれに準じた正確な書籍を頼り、Webを信用しちゃいけない。
で、質問の内容だが、protectedは同一パッケージ内のアクセスも許可する
public -> protected -> (default = package private) -> private
という4段階のアクセス制御ができるが、protecedは package private にサブクラスもOKとしたもの
>>429 どうだろ?
自分もそんなマニアックな方法でコンパイルエラーになる例は知らんかったよ。
ただ、リテラルとfinalの違いを知っていたんで、理解はできただけ。
ぱっと思いついた例。
public @interface Hoge {
int value();
}
-----------
private static final int NUM;
static {
NUM = 10;
}
@Hoge (value=NUM)
public HogeHo() {
}
>>428 ふと思ったんだけどさ、サブクラスでprotectedなメソッドをオーバーライドして修飾子をpublicにしちゃったら
結局外から呼ばれちゃうんじゃないの?
>>432 継承すっときに、アクセス就職誌は緩くできないぞっ
キツクする分には問題ないが
いや、逆w俺恥ずかしいw
>>432 そりゃぁそうだけど、それは自分で new するクラスを選べる場合だけに可能な話であって、すでに存在してる任意のインスタンスに対して出来ることじゃない。
オーバライドは可視性を広げる方向にしか許されない。 逆に言えば、可視性に大小関係が必要。 一方、継承はカプセル化を壊すので、 パッケージ単位でカプセル化するパッケージプライベートが 可視性が狭いのは妥当
>>431 そっちの方がマニアックな例だと思うぞ
>>429 もとの疑問ってなに?
違いがあるかないかってことなら、「ある」でファイナルアンサー
>>435 だから、コンパイルエラーになるってのw
439 :
431 :2007/09/30(日) 00:16:42
>>437 他に思いつかなかったぽ
しかし、よく知っていたなswichの例なんて
最初の疑問は単純に
static final NUM = 10;
と
static final NUM;
sattic {
NUM = 10; // あるいは何らかの計算値
}
で、代入する位置が違う事が、なんらかの影響を及ぼすか?って話かと。
結論としては、NUMが不変な変数としては一緒だが、その値がリテラルかどうかという値があるという話だと思われ。
単にstaticイニシャライザはクラスロード時に実行されるから、 ブランクfinalが初期化されなくてswichの評価時にコンパイルエラーになるだけじゃないの? staticイニシャライザはJNIとその関連フィールドを初期化するためにあるようなものだから、 "ただのブランクfinal"をstaticイニシャライザで初期化しようって発想が間違ってるよ。 あと上であったC風に{}でスコープ隠すってのは、javaの思想としては間違ってるね。 文法として無名クラスのインスタンス化やstaticイニシャライザ文があるから副作用的にそういうことが出来るだけで。 スコープを最小化したい場合はes4みたいにletスコープがあればいいけど スコープレベルがブロック単位なjavaには可読性を落とすだけだね。
assertと非チェック例外を使うべき場面が自分には同じに見えてしまう んですが、実際にはどのように使い分けるべきなんでしょうか?
>>441 それ根本的にassertを理解していないぞ
assertは -ea で有効にしなきゃチェックされない
よく使うのは
public method の引数チェック → if + 実行時例外
これはどんな時にでもチェックすべき項目
逆にクラス内でしか状態が変わらない変数pがあったとして、実装上は0とはならない。
そんなときには、
assert p != 0;
int result = hoge / p;
とassert を使用してゼロ除算を念のためチェック
>>441 似たようなもんだと思うよ。俺は最初assert使ってたんだが、今は非チェック例外使ってる。
細かく違いを挙げると、
assert利点
VM引数で有効/無効を制御できる
大抵一行なので見やすい
(せいぜい等価評価だが)無効にすることで余計な計算を省ける
assert欠点
C系からの移住者は、-eaを知らずになぜ効かないのか悩む(俺)
コードのみを移植しても、有効にはならない
エラーの内容が、例外クラスからはわからない(必ずAssertionError)
非チェック例外利点
必ず実行される
コードをコピーしても挙動は同じ
投げる例外で、ある程度原因がわかる(IllegalArgumentExceptionとか名前でわかる)
非チェック例外欠点
必ずコードが複数行になるので、場合によっては見にくい
有効、無効を制御できない
あとはここが参考になるか。
アサーションを使用したプログラミング
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/lang/assert.html
444 :
443 :2007/09/30(日) 09:43:44
まあ、assertの代わりに非チェック例外を使うってのならあんまり変わらないでしょ。
でも、使い分けるのなら、
>>442 の言うように事前/事後条件のチェックにはassertを、
publicなメソッドの例外は非チェック例外を使うのが一般的か。
個人的には、Javaのassertは文法が変則的だし、VM引数とかややこしいから
全部非チェック例外でいいんでないかとも思う。
チェック無効にして得られるパフォーマンスなんてたかが知れてるし、
それよりも有効/無効を制御する面倒さの方がコストが高い。
assertと同様の使い方でもっとスマートにできるのがAspectJ。
これなら事前/事後条件チェックを完璧に記述できるし、こっちはリリース版にソースも残らない。
もっとも、あの重さは何とかしてほしいが・・・。
Javaのassertion はあくまでデバッグ用 >443のいうよう全て非チェック例外で行うのもいいんだが、1つの視点として単体テストがある。 つまり、public メソッドの引数チェックとその確認は単体テストで通すべき、クラス(メソッド)の仕様。 ところが、privateで外部から変更されないインスタンスフィールドに対して、状態チェックを行い単体テストをするのは流石に冗長。 そもそも、そんなありえないような状況を想定しているわけだ。 このようなケースではassertionが有効 単体テストの時には有効にして、念のためチェックもやらせておくことで品質があがる
447 :
デフォルトの名無しさん :2007/09/30(日) 12:33:26
Seqencerを使ってMIDIをループ演奏させているんですが、 1ループ終わるごとに、プログラムサイズが1MBほど増加してしまいます。 ループが終わるごとにclose()したりしてみましたがうまくできません。 メモリ消費をしないような対処法は無いでしょうか。
>>447 プロファイラ使ってメモリリークの場所探すとか。
あと、こっちも面倒だがfindbugsとか使えばメモリリークしやすいところがわかるってばっちゃが言ってた。
>>447 そのプログラムサイズってのはどうやって測ってる?
gcかけても解消しない?
明快Javaってどうですか?
452 :
デフォルトの名無しさん :2007/09/30(日) 14:16:41
質問です。 java.util.concurrentのExecutorsからスレッドプールを作って非同期処理をやろうしたら問題点が。 それは、各ワークスレッドでRuntimeExceptionやAssertionErrorが発生したときに 処理がひっそり落ちたままで気がつかないということです。 いろいろ調べて、Thread#setDefaultUncaughtExceptionHandlerやsetUncaughtExceptionHandlerを 設定したりして見ましたが、なぜかキャッチしてくれません。 これってひょっとして、ThreadPoolExecutorの内部で握りつぶされてませんか? 仕方がないので、Runnabl#runやCallable#callの中身を丸ごとtry〜catch(Throwable t)で囲んでいますが、 もう少しスマートな方法やイディオムは無いでしょうか?あれば教えてください。 きっと、大事なところを見落とした頓珍漢な質問だと思いますが、よろしくお願いします。
そんなことなさそうだぞ 今setDefaultUncaughtExceptionHandlerやsetUncaughtExceptionHandlerを試してみたが、ちゃんと働く ちゃんと設定されてないか、自分で握りつぶしてるんじゃない? Callableに関しては、Future#getを呼べば発生した例外が伝達されるはず
454 :
デフォルトの名無しさん :2007/09/30(日) 15:14:33
>>450 タスクマネージャです。
gcをかけても変わりません...
>>452 これで普通にcatchできてるけど。できないっていうソースが出ないと何が悪いか分からない。
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
System.out.println(t);
System.out.println(e);
}
});
Executors.newCachedThreadPool().execute(new Runnable() {
public void run() { throw new RuntimeException(); }
});
>>454 タスクマネージャか・・・あれあんまり当てにならな・・・
jconsoleで見てみたらどうだろう。
それと、ループするごとに1MB増えるのなら、100回ループすれば100MB増える?
そうだとしたら問題あるが、それともどこかで頭打ちになる?
>>453 >>455 ありがとうございます!解決しました
453さんのおっしゃるようにgetのコールまで伝達されないのが原因のようです
ちなみに、不具合が出るソースは下記です
submitをexecuteに変えると即座に伝達されるようです
callableかrunnableかどっちにしようか検討したりしたため、ずっとsubmitでやってました
import java.util.concurrent.Executors;
public class TestException {
public static void main(String[] args) {new TestException();}
public TestException() {
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
e.printStackTrace();
System.exit(-1);
}});
Executors.newCachedThreadPool().submit(new Runnable() {
public void run() {throw new RuntimeException();}
});
}
}
>>452 そんなことはない
call() で定義した例外は全て TaskResult に積まれる
get()で結果を取得しようとすれば、ExecutionException が発生する
実際に発生した例外は中にラップされているのでgetCauseで取り出す
なんか使い方を根本的に間違えているんじゃないか?
TaskResult -> FutureTask
>>457 それ、submitしたらFutureが返ってくるでしょ
その結果をgetするんだよ
switch 文の case は異なる値しか取れないはずなので、 それが判断できるよう、定数(リテラルを含む)でなければならないっぽい。 ブロックがイニシャライザの副産物であるという話は聞いたことがないな。 よく、横着して別メソッドにせずに case 文にブロックを使ってる。 リファクタリングするような状況になったら、だいたい switch 文まるごとだし。
>>441 昔のジャバワールドの記事で、
事前条件チェックは全部アサーションでやっちゃえばいいんじゃないの?
みたいな記事が載ってた。
-ea を使うかどうかは使う側の責任で、
使われる側の責任ではない、みたいな。
assertはswitch文のdefaultとかif文の最後のelseで取りこぼしが無いかチェックするために使ってるなー
>>462 事前チェックとしてもpublicで公開されているならばそれはマズイだろ
事後条件や不変条件ならいいんじゃない。
>>458 >>460 ありがとうございます。簡略化した上記のソースでもFuture.get()すると例外が伝搬するのを確認しています
ただ、実際のソースでは、Future.isDone()は使用するものの、get()は特に使用しない仕様なのです
非同期の計算結果は各スレッドで勝手にストアするからです
これは、お前の設計が悪い、の一言でしょうか?
エラーもストックすれば〜
インタフェースに事前条件を書けないのは痛い。 リスナーのイベント引数の null チェックなんて、 public だからって、言語的に保証されてないからって、 いちいち、おいらは書きたくない。 非チェック例外を使うなら、 Commons Lang の Validate クラスが簡単。 アスペクトを使って入れるなら、 アノテーションと組み合わせた Contract4J が気になる。使ったこと無いけど。 ただ、条件は文字列で指定するので、リファクタリングの自動化は難しいと思われ。 また、実装・継承におけるアノテーションの癖も気をつける必要があるっぽい
>>468 俺は現役でAspectJのアノテーション版使ってるんだが、Contract4Jなんてものがあったのか。知らんかった。
>>468 ならば自分で言語作れば?
とはいえ、7.0あたりではアノテーションを使用した引数チェックやロギングは標準実装されそうな話もある
>>466 そりゃ設計が悪い
>467にも書いてあるけど、Workerが実行結果をストアするのは構わん。
でも、例外が起きたってのも立派な実行結果じゃねーの?
自分で握りつぶしておいて何言ってんだよ。
Future<?> submit(Runnable task) を使うならばそうしろ
その欠点を補う為に、Callableは戻り値が指定でき、例外もthrowできるんだぜ
>>467 >>471 大変参考になります
なるほど、例外発生も確かに結果ですよね。ストアします
ついでに恥のかきすてということで質問させてください
java.util.concurrentのポリシーについてなんですが、
なぜFuture.get()とポーリングする形式なんでしょう?
非同期計算の終了時にイベントなりで終了通知してもらう方が便利なような気がするんですが。
メインスレッドがワーカースレッドを作って計算させている間、メインも別の仕事したいじゃないですか
Future.isDone()で何度もチェックし続けたり、get()でブロックされるというのはどうも勿体ないような
なんかやっぱり根本的に理解していないのかもしれませんので冷や汗ものですが…
>>472 第1にブロッキングとポーリングは全く異なる。
ループでisDone() でポーリングする方法は従来のマルチスレッドでも可能な形。
これに対してFuture.get() でブロッキングする方法はExecutorフレームワークの中で最適な方法でポーリングしてくれる為、自前でポーリングするよりずっと負荷は減る。
メインスレッドは、ワーカースレッドを作成した後に別の仕事をするだろう。
だけど、get() でブロッキングして結果を処理するスレッドを立ち上げるとどうだ?
例えば、Swingを用いて計算にコストのかかるワーカーを作成し、実行させる。
EDTは指示のみを行い、さらに処理が終わったら画面の更新を行うスレッドを実行させて処理を返す。
確かにお前さんの言うように勿体無いかもしれないが、それ以上に設計も実装も簡単になりバグが減る効果のほうが重要。
詳しくは最近出た並行処理の本を嫁。
設計者のポリシーが全て書いてあるから。
>>472 Futureでポーリングするっていうのは、根本的におかしいような気がする。
結局のところ何がしたいのか言ってみ。
それに合う別の方法があるよたぶん。
Futureのgetってのはここで本当に最終結果がほしいってときに呼ぶもんだ。 ブロックされてしまうんじゃなくてブロックしてくれるのがありがたいんだろうが。
>>473 >自前でポーリングするよりずっと負荷は減る
知りませんでした。ためになります
>だけど、get() でブロッキングして結果を処理するスレッドを立ち上げるとどうだ?
もう一枚噛ますんですね、確かにこれが簡単で便利そうです
早速書き直したいと思います
他の皆さんもご回答ありがとうございました
>>461 {
int n=hoge;
hogehoge
}
はインスタンスイニシャライザ。
プールのスレッドに UncaughtExceptionHandler をセットするには、 ThreadPoolExecutor のコンストラクタに渡す ThreadFactory を作って、 実行する前に親スレッドから設定するのが正道っぽい? 実行対象のタスクが吐き出す例外を対処するには、 タスクをラップするか、 ThreadPoolExecutor の afterExecute メソッドをオーバライドするらしい。 (execute の場合)
気になったんだけど、publicメソッド内で呼ばれるprivate関数の事前条件違反は例外とassertどっちかな?
>>479 基本は assert
外部から影響を受けるフィールド等であれば、例外の場合もあるけど
public メソッド内で例外でチェックしているなら、 private メソッド内では、assert public でチェックしてないなら、 private メソッドで例外でチェック じゃね?
基本的にassertはリリース時に無効にするだろ。 だからpublic内でもprivateメソッドはassertでおk。
質問です。 例えば以下のようなstaticのメソッドがあるとします。 public static boolean check(int number) { if (number == 0) { return true; } return false; } このメソッドが複数のスレッドから同時多発的に呼び出される場合、 メソッドの修飾子で同期(synchronized)を取っておかないと正しい 返却値が得られない(スレッドAからの呼び出しに対する結果がスレ ッドBに返却されてしまうなど)可能性はありますか?
ない
>>484 マルチスレッドで気をつけないといけないのは複数のスレッドで共有していて変化してしまうものを扱う時。
そのメソッドには複数のスレッドから同時にアクセスされて変更されるようなものがない。
numberはローカル変数なのでスレッド個別に持っている。
そして呼び出し側でstaticなnumber変数を渡してるというおちとか。 ああもちろんこのメソッドの問題ではない。
>>487 値渡しなんだからstaticだろうと関係ないだろ
>>488 プリミチブじゃない変数は実態は1つしかないぞ。
真の意味で値渡しなのはプリミティブな変数だけ。
プリミティブじゃない変数は、実態への参照の実態を渡してるんだぜ
490 :
402 :2007/09/30(日) 22:58:23
>>446 誘導ありがとうございます。
今までこういうことなかったので、落ち着いて見直していたら右クリックをmouseReleasedで検出するときに選択を勝手に単一にしてしまってました。
スレ汚してすみませんでした。
>>489 落ち着け、今回のケースは少なくともプリミティブだ。
それにJavaに参照渡しってのは存在しない。
実体の参照の実体を渡すから参照渡しではないってこと? そもそも、実体の参照って考えから間違ってるとか?
同じ private メソッドに単に処理を委譲する複数の public メソッドがあった場合、 それぞれの public メソッドで事前チェックの記述をするのは重複じゃね? また、スーパクラスの public でないコンストラクタを呼び出す場合は、 その前に事前チェックを入れるのは困難。 コンストラクタだけは特別扱いすればいいのかもしれないけど
実体の参照の実体? Foo foo = new Foo(); としたならば、fooはオブジェクトの参照を格納する変数であり、値はオブジェクトの参照またはnull メソッドに渡された場合は、その『値』が渡される。 つまり、 int i = 10; として、メソッドに渡されているのと何も変わらない。 もし、参照渡しであった場合、bar() を呼び出すとfooの参照にnullが代入される事になる Foo foo = new Foo(); bar(foo); // foo is null or not ? ------- void bar(Foo foo) { foo = null; }
>>493 たぶん、メソッドの名前とかアクセス制限を見直すべき状況じゃね?
ありがちなのはメソッドをオーバーロードしている状況だろうけど。
そういう場合は、一番最後に呼ばれるpublicでまとめてやればいいと思う。
まとめて処理するところがprivateだったとしたら、自分ならprotectedにするな。
そうしておかないと、継承した時にまとめて処理を変えられないから。
コンストラクタは特別だろう
privateだろうとネストクラスでもない限り、例外を投げるべき。
>>494 変数=実体への参照
実体への参照の参照ではなく、実体への参照の実体として渡すってことか。
考えてることは同じでも、先生のように分かりやすく伝えることが出来ないとダメね
>>494 というよりは実体とか曖昧な用語を使っている事がダメなんだと
実体への参照の実体とか、意味解らんよ
1.JAVAは参照渡しはないよ 2.でも、変数は実体への参照で、実体への参照の実体を渡すんだよ。 初心者に両方同時に伝えても混乱させるだけだから説明しない。 初心者はしばらくすると、変数の中身がおかしくなったとか言い出すので、そこで2に気づかせる。 よくある話
>>498 初心者に参照渡しって用語を覚えさせなければ済むじゃん
最初から変数に参照が入っていると教えちゃダメなの?
>>499 よくある入門本の記述
1. 変数は値を格納する箱のようなものです
2. オブジェクトの場合もintとかと同様に変数に格納できます
これが諸悪の根源かと思われる
そういう説明の仕方をしてる入門書って本当にあるの?
JAVAで初めてプログラムするって人には、「JAVAには参照渡しはありません」って説明しないほうがよさそうだなw
銭湯の靴箱の木札とロッカーでオブジェクトと変数の説明をしてた先生がいたが、 生徒達に銭湯の話が通じていなかった。 銭湯が少なくなったのが諸悪の根源かと思われる
>>501 プログラム初心者にもやさしいと謳っている本は大抵
>>487 だが、書き方が悪かったな。ってか言葉足らずだったな。
呼び出し側で例えばstaticな共有変数を使ってて、
それが複数スレッドから利用されるときに適切な同期を行ってなければ、
メソッドに渡す変数の値自体が問題あるかもしれないってこと。
※もちろん値渡しでも同じこと
まあ冗談で言ってみただけだ。
書籍「Java 並行処理プログラミング」に、揮発性変数の説明のところで、 ”SynchronizedInteger のメモリ可視性効果は、揮発性変数よりもやや強力” と注釈に記述されているのですが、参照しろといわれている章を見ても、分かりません。 言語仕様3版になったときの変更のことを意味しているくらいしか 思い浮かばないのですが、本文には第3版の仕様の内容が書いてるので、 違うっぽいです。 同じじゃないんすか?エロイ人教えて
508 :
507 :2007/10/01(月) 03:48:49
あ、AtomicInteger と混同してた。どのみち疑問は同じなんだけど。 本に載ってる SyncrhozniedIntegerは、以下のような感じ public class SynchronizdInteger { private int value; public synchronized int get() { return value; } public synchornized void set(int value) { this.value = value; } }
>>500 なにそのやさしいjavaのコピペ?
javaの教本なのに参照渡しがどうのこうの説明してる本もあるな。
>708 手元に本がないので確かな事はいえないが(読んではいる)、 this.value = value; の箇所で、同期が取られている分、揮発性変数よりも協力という意味じゃないのか? 揮発性変数にした場合、this.value とvalueを参照しに行く部分ではAtomic性を保証し、 = value で代入する部分でもAtomic性を保証する だが、全体の代入処理に関しては以前非同期のままだから意図しない代入が行われるかもしれない(仕様次第)
511 :
507 :2007/10/01(月) 08:25:16
>>510 >全体の代入処理に関しては
すまん、ここわかんね
あと、同期の3つの性質(原子性、排他性、可視性)のうち
注釈は、可視性って限定してる。
以前H2 databaseのことを書いていた者です。 サーブレット間でDBに入れたデータを渡せないとか言ってましたが、 全くの勘違いでした。 メモリに入っているDBのデータは普通にどこからでも取り出せます。 自分は結局、次のパターンで実装しました。 データを管理するクラスのArrayListを作る。 オブジェクトから上のArrayListのインデックスへHashMapで対応付ける。
>>507 volatileは半同期だからじゃない?
volatile変数から値を読み取っても、書き込みは同期されない
volatile変数に値を書き込んでも、読み込みは同期されない
synchronizedは入口で読み込みを同期して出口で書き込みを同期するから、SynchronizedInteger#getを呼ぶだけで完全に同期される
全然違ったらすまそ
しかしSynchronizedIntegerでもset(get()++);みたいな事をすれば駄目と。 そのためのアトミック変数と。
H2は検索が遅いんだよな。
すみません。WindowsのJDK1.6u2なんですが、classes.zipってなくなったんでしょうか? 検索しても見つかりませんでした。
classes.zipはJava2の時点で消えたんではなかったかな
>>520 HSQLDBには機能的にないものがあるから
H2が負けても仕方がない部分はある
522 :
デフォルトの名無しさん :2007/10/02(火) 14:12:15
<script language="JavaScript">と <script type="text/javascript">は全く同じなんですか?それともブラウザによって違ったりするんでしょうか
>>520 ども
Client-Serverは遅いって事でしょうかね
>>515 Embeddedは早いすね
ベンチマークからすると、C/Sが遅いのはIOのせいで、 H2とMySQL自体はほぼ同等の性能と言う気がする。 計測者のPCの性能が上がったらもっと、EmbeddedがC/Sより早くなりそう。 MySQLにもC/C++のEmbedded版があるらしいからそれと比較して欲しい。 スレ違いだな・・・
質問です。ArrayListに色々なクラスを登録し制御したいのですが リストから取り出すときにキャストをしなくてはいけないみたいで、困っています。 ArrayList classs = new ArrayList(); @リストにいろいろ突っ込む classs.add(new Ringo()); classs.add(new Mikan()); classs.add(new Unnko()); classs.add(new Nurupo()); A取り出し Iterator it = classs.iterator(); while(it.hasNext()){ ↓ Ringo ta = (Ringo)it.next(); Mikan ta = (Mikan)it.next(); Unnko ta = (Unnko)it.next(); Nurupo ta = (Nurupo)it.next(); ↑この部分をリストに登録されている型で効率よくしたいのです ta.draw(g, frame1); if(ta.isOutOfScreen()) it.remove(); } どうかお願いします
うーん。無理だろ? そもそもこういう使い方ってあまりよくないんじゃなかったっけ? ジェネリクスものすごく書きたい。
>>527 そのクラスが全部1つのクラスorインターフェースから継承されてるなら
ArrayList classs = new ArrayList();
@リストにいろいろ突っ込む
classs.add(new Ringo());
classs.add(new Mikan());
classs.add(new Unnko());
classs.add(new Nurupo());
A取り出し
Iterator it = classs.iterator();
while(it.hasNext()){
↓
Super ta = (Super)it.next();
↑この部分をリストに登録されている型で効率よくしたいのです
ta.draw(g, frame1);
if(ta.isOutOfScreen()) it.remove();
}
こんな具合にはなる
530 :
527 :2007/10/02(火) 22:19:05
>>529 素早いレスありがとうございます。
たしかに継承したサブクラスですが
drawなどのメソッドはオーバーライドして使っています。
大丈夫かな・・・ ちょっと試してみます。
>>527 こういうのを使ってみるというのはどうだろう
class FluitsMap{
private Map<Class<?>,Object> map = new HashMap<Class<?>,Object>;
public <T> void set(Class<T> clazz, T fluit){
map.add(clazz,fluit);
}
public <T> T get(Class<T> clazz){
return clazz.cast(map.get(clazz));
}
}
注意点
・ひとつのクラスにひとつの値しか格納できない
・Generics型は扱えない
と、書いてみたはいいが元の文脈を見ると普通にインターフェースでいいな
オーバーライドしてんなら問題ないよ 変数の見た目がスーパークラスでも、実際に動くのはオーバーライドしてるメソッドだ
534 :
527 :2007/10/02(火) 22:44:33
レスをくださった方々、どうもでした。
>>529 さんのやり方で問題なく?動きました。
とりあえず、このやり方でプログラムを肥大化させます。
肥大化さすなw
質問させてください <html> <body> <SCRIPT LANGUAGE="JavaScript"> <!-- for(i=0;i<10;++i) { window.open(10); } --> </SCRIPT> </body> </html> これに画像を載せる場合、どんなタグをどこに入れればよいのでしょうか
>>526 H2はLOBファイルが1:1で作られるからC/SでIOの差が顕著なんだと思う。
LOBが1:1ってのはUSBメモリに入れるようなアプリの組み込み用途には厳しかったりする。
HDDガリガリやる事にもなるし。
ほかはpure java組み込みDBでは圧倒的なんだけどね。
JAVAのHPでインストールしようとしたら致命的ななんとかかんとかが出てインストール出来ないんですけど どうすればいいですか? 以前はいけてたんですけど、間違ってアンインストールしたみたいで。。
すいません自己解決しましら! 迷惑掛けました><
541 :
デフォルトの名無しさん :2007/10/03(水) 12:01:29
動画を入力としていろいろ処理するときはどんなクラスを使ったらいいんですか? 動画のRGBを処理したいです。 検索してもなにもでないので何かヒントください。
>>543 >JavaScript, Ajaxの質問は、ここでは受け付けていません。
>>544 ありがとうコピペマン
どこ行けばいいの?
pure javaじゃないし標準APIでもないが一応SDLのjavaポートがある。
>>538 恥をしのんでお伺いしますが「LOBファイル」というのがわかりません。
教えていただけませんでしょうか。
何の略か、または何という語でぐぐればいいかだけでも結構です。
よろしくおねがいします。
# ラージオブジェクト型とは別ですよね?
# 1:1 というのが何と何の一対一なのかがわからず。すいません。
H2はドキュメントが真っ先に日本語訳されたりと、作者が日本びいきだから使いやすいよ。 なにせ作者本人が日本語の質問に答えてくれたらしいからな(返事は英語だったらしいが)。 今後もサポートは熱いだろうし、将来も期待できてマジオススメ。
ぼうようってオブジェクト指向理解してないだろ…
こんなところで愚痴らずに本人に人心を惑わすなと直接指摘してやるべきだろう
コンパイル後に生成されるファイルについて >javac *.java こんな感じに何も指定しないとバイトコードとソースがごちゃ混ぜになって混沌としてくるので、 >javac *.java -d tmp こうするとなかなか綺麗にまとまるんですが、実行するために逐一cd tmpとしないといけないので面倒です。 皆さんどうしていますか?
eclipse使ってるからclassファイルなんて気にならない
java -cp tmp Hogehoge
マウスポインタの移動速度を変更することはできますか? ある窓内にポインタがある時だけ、移動速度が変わるようにしたいのですが。
561 :
559 :2007/10/04(木) 04:18:21
すみません。自己解決しました。
javaで音量の変化を波形でバンッってわかるようにしたいんですが、なんせ無知なもんでググってもかかりません。 どうすりゃいいですか?
564 :
563 :2007/10/04(木) 12:26:18
追加:ビデオカメラで撮った映像の音の変化です。(AVI形式になるのかな)
質問します。 String[][] A = new String[100][10] String[][] B = new String[100][11] とあったときに,Bの[x][0]には1次元目の要素番号自体(つまりx)を入れておき, B[x][1-10]をAの[x][0-9]で埋めたいとき,どのようなコードがもっともよいでしょうか?
もっとも良いかどうかは知らないが for(int x=0;x<100;x++){ B[x][0] = String.valueOf(x); System.arraycopy(A[x], 0, B[x], 1, 10); }
javaでiniのような設定ファイルが欲しくなったので調べてみると、 iniはもう古い、糞、XML使えってのが大方共通の主流意見みたいだった。 XMLの基本のきの字も知らなかったので、色々調べてみる。 その内だんだん全体像がつかめてきたので今度は実装方法を調べて ―これまた情報が少ない上に古い―試行錯誤の後にようやく完成した。やったー。 そんで、ふう疲れたなあと余韻に浸りながらネットサーフィンしてたらjava.util.Propertiesの存在を知る。 おいウェjf;あおいjlk;xzjvc「あ;。;
>>566 ありがとうございます。求めていたようなコードです。
System.arraycopy,知りませんでした・・・
>>567 用途によるけど java.util.prefs.Preferences というものもある
572 :
472 :2007/10/04(木) 17:54:44
>>572-573 >>572 の本も悪い本じゃないけれど、
ちょっと難しく感じるかも知れないね。
>>572 の本は、たしか訳者のサイトに、
翻訳の訂正などもあったので見ておくと良いかもね。
>>573 の本もお勧め。文章が分かり易いのが良い。
>>573 両方読むとちょうどいいと思う。
Java並行処理プログラミングは1.5で導入されたフレームワークの教本ってのが大きいと思うぞ。
なにせ作者の本だからな
Xmlといえばなんでjdomは本筋とマージされないの? 最初w3c標準の方使っててむちゃくちゃ面倒だった。
DOM オルタナティブは、JDOM、DOM4J、XOMと、いろいろあるからなぁ
名前にDOMがつくだけで実際には全く別物のパーサをいれても素人が混乱するだけだろ。 xml apiなんて異常に充実してんのに低レベルに位置するパーサーをこれ以上増やす意味はない。
579 :
すみません。 :2007/10/04(木) 23:36:50
重複していたらすみません。 単刀直入にお聞きします。 プロキシランダムのページを作成したいのですがどのように作成するのか教えてくれませんか?
vipperとしては釣り針には全力で食いつきたいところだがここはエスパーさんに譲ることにする。
581 :
デフォルトの名無しさん :2007/10/05(金) 01:31:11
質問です。2の入力した乗数(8ならば256)をfor文を使って求め、答えを表示する。 どうやって書けばいいのでしょうか?
>>581 一応再帰/非再帰版を書いておくと、
//非再帰版
int answer = 1;
for (int i : kaijo)
answer *= 2;
// 再帰版
int _2kaijo(int kaijo) {
if (kaijo == 0)
return 1;
else
return 2 * _2kaijo(kaijo - 1);
}
後、微妙にすれ違いだから、今度からJavaの宿題スレに言った方がいいぞ。
Javaの標準ライブラリで、'< > & "' を '< > & "' にエスケープしてくれるユーティリィ関数はありませんか。 作るのは難しくないんですが、Javaで標準的に使われているものがあればそれを使おうと思っています。
前後の違いが分からない
後者は一つ目のシングルクォートの前に空白があるな。
&と書きたかったのだろう。
&&とやればいける? そういやなかったような。たいていフレームワークで準備されててそれ使ってるよ。
& と掲示板に表示するための方法のことを言ってるのだが、 '< > & "' を '< > & " ' に と書きたかったわけだろ。 &amp; でいけるね。
>>583 専用の関数を作るほどじゃないと思う
s = s.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">");
で済むし
quot忘れてた まぁ脳内補完よろ
592 :
デフォルトの名無しさん :2007/10/05(金) 09:01:52
サーブレットについて質問なんですけど、ResultSetなどでデータベースの テーブル一覧を得ることは可能ですか?
593 :
563 :2007/10/05(金) 10:13:34
お願いします。
>>592 DBによるが基本的に出来るハズ
通常、システム系のテーブルの中に、定義されているテーブル一覧を格納したテーブルがある。
そのテーブルに対し適切なSQLでテーブル一覧を引っ張ってくればOK
もしくは、DBによっては専用のSQLが用意されているかもしれない。
この辺はDBに依存する部分なので、どんなDB使うのかによる。
>>593 >563は建築屋で言えば犬小屋もろくに作れないレベル
ところが質問の内容は南欧風一戸建ての建て方を教えてくれというレベル
初心者ではないが、初歩的な質問。 クラス名の命名規則は、先頭文字が大文字となってるけど、 小文字から始めて何か弊害とかあるかな。
ファイル名も変えないといけなくなる
>>592 MySQL なら show tables;
アンパサンド問題でハマるわけか。
>>576 クラス名は大文字から、メソッド名や変数は小文字から、という規則があるのでソースコードを読むときにヒントとなる
なんで、小文字から始めてもその場での弊害はないけど、後から自分でも読みにくいし、チームで開発していると読みにくくて仕方ない
601 :
596 :2007/10/05(金) 14:00:15
>>600 個人開発だからいいかな。いちおう命名規則にはうるさい人間なんだけど、
リフレクション使うときに小文字だと余計な変換がなくて楽な部分があるから。
>>601 リフレクションを使うときにクラス名の先頭が大文字だとどういう余計な変換があって楽じゃなくなるの?
603 :
596 :2007/10/05(金) 15:07:00
>>602 サーブレットで、リクエストURLのファイル名部分がindex.jspならIndexControllerクラスで処理、
submit.jspならSubmitControllerで処理みたいなことをやってるんで。
indexController,submitControllerになっておけば、リフレクションするのに楽。
index_hoge_poge.jspとか長いファイル名になってもindex_hoge_pogeControllerで対応できる。
別にファイル名をIndex.jspとかIndexHogePoge.jspにしてもいいんだけど、
なんとなくURLに大文字使うのは嫌な気がしただけ。
public void stop() { if (thread != null) { thread.stop(); thread = null; } } これはどういう風に変化させれば良いですか? verj2sdk1.4.1_07
何がなんだかわからんが、スレッドを強制終了するな。 停止したければinterrupt()しろ。 そしてタスクの中身でinterruptに応答するように書くんだ。
607 :
デフォルトの名無しさん :2007/10/05(金) 17:54:28
初歩的な質問で申し訳ないです(><) サブクラスで乱数を用いて発生させた1元配列を メインクラスに持ち込むには、どうしたらいいですか? 配列じゃなくて、1つの数なら下のように難なくできるのですが・・・ メイン ===================================================== public class Play1 { public static void main(String Args[]){ Sub p = new Sub(); p.generate(); System.out.println(+p.generate()); } } ===================================================== サブ ===================================================== public class Sub { public int generate() { int k; k=(int)(Math.random()*20); return k; } }
配列を返せばいいだけだろw どうせ出力するだけならリストのほうが楽だろうが
public class Sub { public int[] generate() { ........ } }
あとサブクラスという言い方はやめいw 継承したクラスに聞こえるからw それとこれくらいならわざわざオブジェクトを作らなくてもstaticメソッドで実装したほうがいいだろ
611 :
デフォルトの名無しさん :2007/10/05(金) 18:21:18
>>608-610 ありがとうございます。
609についてですが、
例えば、1元配列の要素数を10個にしたいとして、
public class Play1 {
public static void main(String Args[]){
Sub p = new Sub();
System.out.println(+p.generate());
}
}
=====================================================
public class Sub {
public int[] generate()
{
int i;
int[] k= new int[10];
for(i=0;i<10;i++)
{
k[i]=(int)(Math.random()*20);
}
return k;
}
}
としたのですが、下の方のプログラムにはエラーは出ないのですが、
上の方のSystem.out.println(+p.generate());
の部分にエラーが出てしまいます。
非常に初歩的で申し訳ないのですが、どなたがご教授いただけないでしょうか?
配列を + とかできないでしょ。 int[] k = new int[10]; があったとして、 System.out.println( +k ); とか書くのか?
1.+p.generate()のプラスの意味がわからない 2.1を直せばとりあえず何か画面に表示できるだろうが、たぶん求めているものではない。 なぜなら、配列の文字表現はtoStringで取得できるが、この書式が"型@ハッシュコード"になっているから。 中身を表示したければ、ループを使って中身を1つ1つ表示するか、配列のかわりにリストを使うかしろ。 Javaのバージョンが5.0以上ならArrays.toString(int[] a)も使える。
614 :
デフォルトの名無しさん :2007/10/05(金) 18:37:31
>>612 おかげさまで解決しました。
ありがとうございます。
615 :
デフォルトの名無しさん :2007/10/05(金) 18:39:44
>>613 >中身を表示したければ、ループを使って中身を1つ1つ表示するか
この方法で解決済みです。ありがとうございます。
なぁ、JAVAの配列ってさ 宣言するときに要素数も決めて記述しないとだめじゃん? でも必要な要素数が未確定でその後の処理で決まるような場合はどうするの? からっぽにしたらエラーが出るし多目の要素数で確保しておくのはメモリもったいないし いろいろ調べたけどわかんない。誰か教えて。
>>616 ArrayList使え
それか、要素数が足りなくなったら新たに配列を確保してそっちに元のをコピーしろ
>>616 >いろいろ調べたけどわかんない。誰か教えて。
ゆとりのよく使う手だなw
>宣言するときに要素数も決めて記述しないとだめじゃん? 駄目じゃないよ
配列を利用開始する前までに要素数を確定してメモリ確保しないと駄目じゃん? てことじゃね ジャヴァの配列の作りの悪さは異常
低レベルな扱いをある程度もたせないとコレクションの素材としては使いにくいとか? まあ継承での共変性とかlengthが関数じゃなくてフィールドだったりすることとか変な仕様は多いわけだが。
それ宣言じゃ無くて初期化
配列.length がフィールドなら、クラス.class もフィールドだな Javaの配列はおかしいし、オブジェクト以外にプリミティブが用意されているのも変な仕様だな
単純に高速化のためだろうがなプリミティブもlengthがフィールドなのも 素直にリストでも使っとけ
本当は配列オブジェクトにlengthフィールドなんて存在しない
配列のlengthは構文上public final fieldに見せかけているだけで本当のフィールドじゃないよ
っっh
これからプログラミングを始めて習うんですが、 どちらのコースを受けるか迷ってます。 1.JAVA基礎+サーブレット+UML 2.JAVA基礎+サーブレット+アプレット HTML・DB・XMLは共通して授業(基礎)があります。 どちらがより未経験者でも需要があるのか アドバイスいただけませんでしょうか。(スレチならすみません)
>>633 需要っていうのは人気があるってこと?それとも役に立つかということ?
人気があるのは上、役に立つのは下。
>>634 ごめ、逆だ。アプレットは既に死んでいる。
アプレットなんて役に立つの?
JavaWebStartのほうがマシだし、それも普及してないし。 とっととJREをモジュール化してローディングを早くしないと駄目だな。 Java6の内にやるらしいが。
やさしいJavaとプログラミングレッスンはどっちがいい?
633です、レスサンクス。 アプレットは、意味がないですか?? この授業が終わったら、仕事を探します。 未経験可でもOKな実務になりそうなほうを受けたいのです。
うるせーよゆとり
getClass..getFields()で得たField[]に対して それぞれのFieldクラスが示す元の変数(のインスタンス)を得るには どうすればいいですか?
java.awt.event.WindowListener#windowIconified(WindowEvent) では javax.swing.JWindow インスタンスが 「デスクトップの表示」(Windowsキー + D)によって最小化されたことを 検知できないようなんですが、 代わりに何を使えばいいでしょうか。
>644 Windowsキーの無いキーボード
プラットフォームのホットキーのマッピングとリアクションはLnFの仕事。
647 :
デフォルトの名無しさん :2007/10/06(土) 14:08:18
質問です。thisによる明示的なコンストラクタの起動について、 this()の引数としてインスタンス変数やインスタンスメソッドの戻り値を渡すことはできない。 ていう記述があるのですが、これってどういうことでしょう?
>>647 this(this.instanceField) とか、this(this.instanceMethod()) はダメって事
649 :
647 :2007/10/06(土) 14:27:53
>>648 速レスありがトン
同一クラス内でオーバロードされたコンストラクタではないインスタンス変数や
インスタンスメソッドは起動できませんよ。 ってこと?
いや、コンストラクタ起動前は、インスタンスフィールドは初期化されてないので、 初期化されてないフィールド使っちゃダメって話だと思うが。 あと、インスタンスメソッドもフィールドが初期化されてない状態では 正常に動作しないので使っちゃダメ。じゃなかったっけか?
651 :
647 :2007/10/06(土) 14:41:30
>>650 おおっわかりやす! ありがトン!
今月21日に基本情報技術者試験でJAVA選択しようと思って勉強中で、、、
この調子じゃ間に合いそうにないかなwww
とりあえずコンストラクタは初期化動作みたいなもの、てことでおk?
>>651 少し正確に言えば、オブジェクトを作成する時の手順は
1. オブジェクトのメモリが確保
2. フィールドの初期化
3. コンストラクタに記述された文の実行
オブジェクト生成の初期化を行うのはコンストラクタは不完全
コンストラクタではオブジェクト生成時の初期化処理を記述できるが正解。
653 :
647 :2007/10/06(土) 15:45:03
>>652 ありがとう!! 参考書にはそういうこと書いてないから困る
人に聞くのが一番だね
× 人に聞くのが一番だね ○ プログラムを書きながら理解するのが一番だね
× プログラムを書きながら理解するのが一番だね ○ ちゃんと仕様書読むのが一番だよね
ちゃんと仕様書読んで プログラムを書いて理解して それでも分からないとこを人に聞くのがいいね 一番何て作らない方がいい。
>>652 センセー(AAry、スタティックイニシャライザとインスタンスイニシャライザを忘れてます。
>>657 初期化子なんて辛気臭いものは書かなければいい
親クラスの初期化が抜けてる。これは、フィールドの初期化の前。 しかも、親クラスのコンストラクタに渡すべき引数を探すに 先に子クラスのコンストラクタの頭を見なくてはいけない。
660 :
652 :2007/10/06(土) 17:11:28
>>657 イニシャライザはフィールドの初期化の一環だから2に含まれるよ
>>659 抜けているのではなくて、今回の説明には不要な箇所
質問者が知りたいのはコンストラクタの動作
>>653 良質な参考書であれば最低限、このくらいは書いてある
>657とか>659の話だと言語仕様とかそれに近い本でないと書いてないが…
まともな参考書を探す事をお勧めする
質問者が知りたいのは、 コンストラクタの最初にかける this() でなんで、フィールドが使えないかってことだろ。 先に親コンストラクタを初期化しなくてはならないから、 this() のチェーンの先のコンストラクタに記述される super() を探さなくてはならない。 そして、親コンストラクタの呼び出しは、フィールドの初期化より前に行われる。 したがって必然的に、this() の呼び出しの瞬間には、 フィールドは本当に初期化されていない。 このため、フィールドを引数として使うことはできない。 ここまで説明せねば。
662 :
647 :2007/10/06(土) 19:02:02
なんかすみません
いやイニシャライザの種類にフィールドイニシャライザとスタティックイニシャライザとインスタンスイニシャライザがあるんだろ。 順番はクラスが初めてロードされたとき、スタティック。 親クラスの初期化後、フィールドイニシャライザ。 フィールドイニシャライザが完了後、記述順にインスタンスイニシャライザ。
かなりどうでもいいことかもしれないのですが、パッケージ名についての質問です。 ドメインを逆にしていく、というのは分かるのですが、個人的な開発で、加えてドメインの取得やサイトでのパッケージ名の登録をしたくない場合、皆さんはどのような名前にしていますでしょうか? orgやjpに代わる、個人的な使用の印みたいなものはないのでしょうか? 公開しないのであれば、ユニークにする必要はないのでしょうが、どうも気持ちが悪くて・・ よかったら意見を聞かせてください。
案:アプリケーション名やライブラリ名で作っちゃう。
そりゃ変だろ。
>>665 今のところその方法をとっていますが、ちょっと最近かっこつけたくなっちゃって・・
やっぱりそれが堅いかもしれないですね。
>>666 イイ!!…とも思いましたが、そうなると全く自分に関係のない会社の名前ついてしまいますしね。
ここで聞いて出ないということは、こういう場合のスタンダードってのは無いみたいですね。
今まで通り、ライブラリ名で始めることにします。
案出していただきありがとうございました。
前は jp.gr.java_conf でパッケージ名登録サービスとかやってたけど、 今は使えないんだっけか? まぁ、パッケージ名が長くなっちゃうけど。
>>668 公開しないのであれば com.example.dan.sos.haruhi.* とかでいいんじゃまいか。
>>670 公開しないのなら、公開されたパッケージと一緒に使うことを考えて、
パッケージ名の最初の識別子がjavaやjavax、comやgovやカントリーコードでなければ何でもいいと思う。
Java で DB にアクセスするプログラミングの定石を紹介した書籍、web サイトってありませんか?
入門用ならばJDBCと使いたいDBで検索すれば幾らでも出てくる SQLとかのチューニングとかまで含めるのであれば、プログラマのためのSQLって本がいい ただ、第3版が和訳されていないし、内容的にはちと古い あとはオライリーのJDBCによるJavaデータベースプログラミングが定番? 触る程度であれば、J2EE関連の本に10ページ程度はあるだろうから、それで充分。
675 :
デフォルトの名無しさん :2007/10/07(日) 13:28:31
質問です。 「Javaゲームプログラミング」という本のサンプルのゲームを元にして、 自分なりに改造してみています。それで、あるキャラクターをアニメーシ ョンさせると、コンパイル時は全く問題ないのに、実行時、途中まで順 調に進んでいても、何度実行しても同じところで下のようなメッセージが コマンドプロンプトに繰り返し出てきます。 Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsExcepti 3 at Sprite.paintScreen(Sprite.java:492) at Game2D.update(Game2D.java:411) at sun.awt.RepaintArea.updateComponent(Unknown Source) at sun.awt.RepaintArea.paint(Unknown Source) at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
676 :
デフォルトの名無しさん :2007/10/07(日) 13:31:06
(675の続き) 下は問題のソースです。Enemy1はアニメーションさせても正常に進行しますが Enemy2をアニメーションさせるとアニメーション自体は正常に表示されますが、途中でエラーが出ます。 /** 下方に流れ体当りする敵物体を表すEnemy1クラス */ class Enemy1 extends GameObject { int count = 0; public Enemy1(int plnNo, Sprite sprite, Queue keyQ, int x, int y, GameObjects gos, int targetPlnNo) { super(plnNo, sprite, keyQ, x, y, gos, targetPlnNo); attribute = ENEMY; sprite.setPlaneGrp(plnNo, 1, 12); sprite.setPlaneGrp(plnNo, 2, 12); sprite.setPlaneGrp(plnNo, 3, 13); sprite.setPlaneAnime(plnNo, true); sprite.setPlanePos(plnNo, x, y); hitX = hitY = 8; hitW = hitH = 16; scorePoint = 10; } public void move() { (中略) } public void beDestroyed() { (中略) } }
677 :
デフォルトの名無しさん :2007/10/07(日) 13:32:08
/** 出現位置から中心方向に動き弾を撃つ敵物体を表すEnemy2クラス */ class Enemy2 extends GameObject { int count = 0; int direction; public Enemy2(int plnNo, Sprite sprite, Queue keyQ, int x, int y, GameObjects gos, int targetPlnNo) { super(plnNo, sprite, keyQ, x, y, gos, targetPlnNo); attribute = ENEMY; sprite.setPlaneGrp(plnNo, 0, 14); sprite.setPlanePos(plnNo, x,y); scorePoint = 20; hitX = hitY = 8; hitW = hitH = 16; if(x > 134) direction = -2; else direction = 2; } public void move() { (中略) } public void beDestroyed() { (中略) } } 説明不足な点があるかもしれませんが、宜しくお願いします。
関係ないソース載せられても。 ArrayIndexOutOfBoundsException at Sprite.paintScreen(Sprite.java:492) って出てるんだから、Sprite.java の 492 行目あたりで配列インデックスが境界超えてないか調べればいい
>>668 ライブラリとして配布する場合だけでいいと思う>名前が重複しないようにとかこだわるの。
最終的なアプリケーションとなるものなら、他とパッケージ名が重複することはないので、
俺はappってパッケージ名にしてる。
ただし、別のプロジェクトで使い回しそうなコードは、
ドメイン名使ったパッケージにいれてるけどね。
パッケージ名なんて簡単に自動リファクタリングできちゃうわけだし 気にせず適当に作っちゃえ
TransferHandlerでペーストとかをしたいのですが、 どのようにCTRL+Vを通知してやればいいか分かりません。 たぶんActionMapとかを使うと思うのですが、 どのように記述すればいいですか?
なんの転送をするの?javaオブジェクト? Swingコンポーネント上でテキストのクリップボードへの転送するだけならActionとかActionMap周りだけでTransferHandlerはいらないはずだけど。
>>682 ファイルのリストを転送していろいろしたい。D&Dもしたいし(これはできた)からTransferHandlerを使ってます。
Linkedlistに入力した情報(ID,名前など)を自動的にMember.txtに書き込んで あとでremoveItemなどで特定のNodeの情報を消したりしたいんですが よくわかりません。 Member.txtは 101,太郎 102,次郎 99,三郎 のように書き込まれて、removeItemで次郎を消すと 101,太郎 99,三郎 になるような感じです。 わかりにくいかもしれないけど、よろしくお願いします。
>>684 何をよろしくお願いなのかわからんw
その仕様のプログラム作ってくれって事なのか?
作ってもらえたらうれしいけど 今一番知りたいのはlinkedlistの情報のファイルへの書き込み方法です。 File f = new File("Member.txt"); で作って ID, 名前をStringにしてwriteで書き込みしようとしたりしてるんだけど そうすると書き込むだけで消せないんです。 言い忘れたけど、消すときはIDをキーにしたいです。
上書きすればいいんちゃう?
オブジェクトへの追加・削除を、ファイルと同期したいなら、 クラスを継承して自前のを用意するのが一番いいと思う。
689 :
668 :2007/10/07(日) 23:14:25
どういたしまして がんばってね^^
691 :
デフォルトの名無しさん :2007/10/08(月) 00:23:23
>>683 じゃあ、基本的な部分だからjavadocとsunのチュートリアルの通りにすればいい。
>>691 今チュートリアルにあることに気が付いて読んでるけど、
日本語訳ないし、サンプルがけっこう複雑だなって…
TransferHandlerのサンプルで複雑とか言ってたらjava.awt.dndパッケージ使ったDnD処理が書けないぞw TransferHandlerは低レベルな部分を全部ラップして フレーバーとハンドラ実装すれば良いだけだから半端無く楽になってるよ。 java.awt.dndで低レベルな部分いじってTransferHandlerでは出来ないか逆に面倒なこと実装するか。 TransferHandlerで超楽して単純な実装するかで使い分ければ良い。
>694 単位落として留年するといいと思うよ。
学坊ばっか
γ´`ヽ _ゝ -''` ー- _ / \ / ヽ 、′ 、 ’、 ′ ’ ; 、 ,':.. ', . ’ ’、 ′ ’ . ・ !:::::. , -────── 、 | 、′・. ’ ; ’、 ’、′‘ .・” |:::::::. | `ィェァ `ィェァ| | ’、′・ ’、.・”; ” ’、 |::::::::.. `───────' | ’、′ ’、 (;;ノ;; (′‘ ・. ’、′”; .|:::::::::::.. | ’、′・ ( (´;^`⌒)∴⌒`.・ ” ; ’、′・ |::::::::::::::.. l 、 ’、 ’・ 、´⌒,;y'⌒((´;;;;;ノ、"'人 ヽ l:::::::::::::::::.... / 、(⌒ ;;;:;´'从 ;' ;:;;) ;⌒ ;; :) )、 ヽ |:::::..ヽ:::::::::::.... / ( ´;`ヾ,;⌒)´ 从⌒ ;) `⌒ )⌒:`.・ ヽ |:::::::....` 、:::::::::.. / ′‘: ;゜+° ′、:::::. ::: ´⌒(,ゞ、⌒) ;;:::)::ノ }::::::::::::::::...`ヽ_人,ノ{ `:::、 ノ ...;:;_) ...::ノ ソ ...::ノ  ̄:::::::::::::::.:::::::::::::::::::..  ̄ ー- _ ::::::::::::::::::::::::::::::::::::::::::::::::.... \
eclipseで開発してるのですが、他のPCで作ったプロジェクトを コピーしてきたら動きません。 正しいプロジェクトの移行方法を教えてください。
>699 すんません。了解しました。
701 :
デフォルトの名無しさん :2007/10/08(月) 19:13:01
なんだか聞くのも恥ずかしいような初歩的っぽい事なのですが、恥を忍んで・・・ java.sql.Timestamp型の値をStringに変換するにはどうすれば良いのでしょうか?
>>701 Stringならなんでもいいのか?
それならば、toStringで適当な文字列になる。
一般的には、getTime()で基準時からのミリ秒を取得してjava.util.Date に渡す。
後はSimpleDateFormatなりで変換する
J2EEのインストールが出来ません。 ダウンロードは出来るのですが、Java_ee_sdk-5_03-windowsをインストールしようとすると、 「Java_ee_sdk-5_03-windows が原因で MSVCRT.DLL にエラーが発生しました」 というエラーメッセージが出てインストールが中止してしまいます。 OSをupdateしたり他のバージョンのJ2EEをインストールしたりしてみたのですが解決出来ませんでした。 PCはノートのWindows Meです。 他にJ2EEをインストール出来る方法はないでしょうか?
2kはともかくXPは動くのかね? PC板でもないので詳しくは書かないけど、開発環境+ネット+メール程度で利用するならばいっその事Linuxいれちゃえば?
同じIDのファイルを作ろうとしたときには どのExceptionを使えばいいんでしょうか? あと、IDが数字じゃないときには何を使えばいいんでしょうか? 教えてください。
>>706 です。
IDが数字じゃないときにはどのExceptionを使えばいいんでしょうか?
でした。
日本語変ですみません。
708 :
703 :2007/10/08(月) 20:39:30
>>704 >>705 自分だけが使うPCではないのでOSを入れ替えるのは難しいです。
教えて頂いたアドレスの方法に挑戦してみます。
ありがとうございました
>>706 自分で 「同じIDのファイルを作ろうとした例外」 クラスや 「IDが数字じゃない例外」 クラスを作ればいい
>>708 開発用のマシンでMeって終わっているがな
Vectorを使ってtxtファイルに書き込んだ情報を 情報のIDで選んで消すことってできますか?
Vectorじゃtxtファイルには書き込めない 情報のIDで消す事はそのように実装すればできる まずは入門本でも読んでこい
最近XMLEncoderってクラスを知った なんであんな便利なのに入門書とかに載ってないんだ?
入門書だから
なんかXml関連は混乱してるからなあ。 今のところ公式なXmlライブラリがw3c以外にないってのがまずおかしい。
じゃあまずおまえが代替物を作れ
まあ待て、公式なライブラリが複数あるのもおかしくないか?
719 :
716 :2007/10/09(火) 12:28:19
>>717 >>577 のいってるように、ライブラリはたくさんあるよ?
でも、これだけxmlが広がって、XmlEncoderとか標準ライブラリ内でも使ってるのに、
基本的な読み書きが、w3cでしかできないっていうのは不親切じゃないのかな、と思ったわけで。
実際自分もw3cで一通り書いてからJDOM知ったし。
JavaAppletの質問で恐縮です。 JavaAppletでエクスプローラからのファイルのドラッグ&ドロップでの 受け取りをしたいのですが、どこかにサンプルは無いでしょうか? googleでいろいろ検索してみたのですがなかなか見つかりません。 もし御存知の方がおられましたらご教示くださいませ。
無理
署名なしのアプレットは、ローカルファイルを開くことが出来ない。 エクスプローラからドラッグ&ドロップしたファイル名を受け取ることは出来ると思うが、 ファイル名を受け取ってもそのファイルは開けないから意味がない。
署名ありにするにはどうしたらいいでしょうか?
VerSignとかGlobalSignと契約
uploadするくらいならできるだろ
726 :
デフォルトの名無しさん :2007/10/11(木) 00:00:45
実行可能なjarファイルを作ったのですが、 jarのアイコンをダブルクリックしても全く反応しません。 コマンドから実行してみたら Uncaught error fetching image: java.lang.NullPointerException at sun.awt.image.URLImageSource.getConnection(Unknown Source) at sun.awt.image.URLImageSource.getDecoder(Unknown Source) at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source) at sun.awt.image.ImageFetcher.fetchloop(Unknown Source) at sun.awt.image.ImageFetcher.run(Unknown Source) と表示され、動きませんでした。 画像ファイルが読み込めてない、ということなのでしょうか・・・? いくら見直しても指定したファイルはちゃんとあるし、階層も、ファイル名も合ってました。 それともパスの指定とかいうものが必要なのでしょうか? 初心者丸出しの質問ですみません。
本当はjarのエントリを読みたいのだが、実はファイルを読み込んでるとか、そういうことはない? jarの中のエントリはファイルじゃないので、ファイルとして読もうとしても読めない 画像をどこにおいてるのかその正確なところと、 その画像をどうやって読み込んでるかそのコードを示してみ
jar化する前は動作していたというのなら、 画像ファイルの指定の仕方を間違えている。 リソースとして読み込んでいるかどうか確認汁。 また、jarの中に入れたファイルの読み込みに失敗する原因として、 名前の大文字小文字を間違えている可能性がある。 Windowsなどの大文字小文字の区別をつけないファイルシステムで動作しても、 jarの内部はその区別をつけるのでファイル名の確認はそこまで合っているかどうか見れ。
>>726 フォルダ構成と画像のURLを取得している部分のソースを書け
730 :
デフォルトの名無しさん :2007/10/11(木) 01:09:02
>>727 >>728 すみません、ファイル、エントリ、リソースとして読み込むのは
どう違うのかが具体的によくわかりません。
クラスファイルを置いている階層にフォルダを作り、その中にgifとpngを置いています。
名前の大文字小文字は、確認しましたが間違えていませんでした。
ソースはどの箇所を示せばいいのかいまひとつわからないんですが
String file = "images\\○○○.gif"
Toolkit.getDefaultToolkit().getImage(getClass().getResource(file)));
というような感じです
\\ じゃなくて / を使ってみる
732 :
デフォルトの名無しさん :2007/10/11(木) 01:21:06
>>731 実行できました!すごく単純なミスでしたね(´Д`;)
皆さんどうもありがとうございました。
別にxmlの公式はW3CだけじゃないよXMLファミリの標準化をW3CがやってるだけでXML basedな仕様はいろんな所で標準化やってるんだから。
>>732 ミスとはちと違うな
誰でもはまる場所の1つだから、\\と/で何が異なるのかを学んでおかないと、同じような原因で何度もはまるぞ
>>734 >>726 じゃないが、是非教えてくれないか?
俺も一度はまった口なので、理由を教えてもらえると非常にありがたい。
>>735 そんなに難しいことか?
\\は(主に)Windowsのファイルシステムでのパス区切り
原則として使わずに、File.SEPARATOR を使用するべき。
/はURL(URI)で階層を表す時に使用する区切り文字
こっちは環境に依存せず、世界中何処でもどんなマシンでも/
これらを踏まえた上で、リソース等をファイルなどから指定する場合、
カレントディレクトリからのファイルの相対パス、またルートからの絶対パスでファイルとして指定するパターン。
リソース内での絶対パス、もしくはリソースのルートからの絶対パスでURLとして指定するパターンの2つがある。
で、はまる理由は意外と適当に書いても動くから。
730がはまったのは、jarにしない時はgetClass().getResource(file) でファイルとしてImageを取りに行った事。
これはjar に固める前では、当然クラスのある場所の構造と画像のある場所の構造がURL指定とファイル指定で一緒。
だけど、jarにしてしまったら、全部同じファイルの中にあるだろ?
そうなると、リソースとしてみないと階層をたどって画像ファイルにたどり着けない
>>736 そうなんだけど、クラスローダーがリソースを見つける時に、ファイル区切りでも見つけちゃうわけ。
740 :
デフォルトの名無しさん :2007/10/11(木) 13:31:44
import java.io.*; import javazoom.jl.player.advanced.jlap; public class HelloMp3 { public static void main(String args[]) { if (args.length != 1) System.exit(1); String filename = args[0]; System.out.println(filename); try { jlap j = new jlap(); j.play(filename); } catch (Exception e) { e.printStackTrace(); } } System.out.println("うんこ\n"); }
appletやってます。 -Xmxオプション付けない場合ってメモリどれぐらい使えますか? 64MBでしょうか? JRE/JDKのバージョンによって変わったりするのでしょうか? 情報のポインタ知ってる方教えてください。
public class Grade{ public static void main(String args[]){ Data Suzuki=new Data("Suzuki",90); System.out.println("Suzuki="+Suzuki.getData()); } } class Data{ private String name;private int grade; public Data(String name, int grade){ this.name=name; this.grade=grade; } public int getData(){ return grade; } } このjavaプログラムに関する問題が出題されたのですが、javaはまったくやった ことなく、どうしていいものか悩んでます。 文が長すぎるので問題は下に書きます。
>>742 の問題文
1:このプログラムのメソッドgetData()のアクセス修飾子publicを修飾子staticに
変えてコンパイル、実行してみよ。エラーがでるので修正したプログラムを作りなさい。
2:このプログラムにはthisキーワードが2箇所使われている。これらのキーワードを使わずに
同じ実行結果が得られるように、プログラムを修正しなさい。
3:このプログラムで、int grade(評点)はclass Dataのコンストラクタの2番目の引数
を、例えば90から85に変えることによって任意に変更できるが、最初の引数"Suzuki”を"Kimura"
に変えても結果はSuzuki=85のようになり、Kimura=85とはならない。
名前と評点を自由に出力できるように、このプログラムを修正せよ。
修正前の分には、先頭に//を付してコメント文とせよ。また、修正、付加した文
には、語尾に//修正//,//付加のコメント文を付けよ。
(修正および付加する箇所)
・ Data Suzuki=new Data("Suzuki",90); →
Data data=new Data("各自の学籍番号",希望の点数);
・ System.out.println("Suzuki="+Suzuki.getData()); →
System.out.println("修正せよ+data.getData());
・ getData()→getGrade()
・ getGrade()を参考にして、メソッドgetName()を新しく付け加える。
よろしくお願い致します。
>>743 教えたこともないのにそんな問題出すんじゃねえ、この給料泥棒が!
と言ってやれ。
または、宿題は宿題スレへ。
>>745 ありがとうございます。
しかし、「デフォルト値は、実行時にシステムの設定に基づいて選択されます。」は、
-serverを付けた時の挙動だと思います。
今回は、appletですので、おそらく-clientがついた状態になっていると思います。
この場合はやはり64MBでしょうか?
自分でググったかぎりは、64MBなのかなぁという感じです。
明確な情報がありましたら、是非・・・。
749 :
デフォルトの名無しさん :2007/10/11(木) 21:39:14
/ヾ〜〜╋┓ ┣¨┣¨┣¨┣¨┣¨ ┃┃¨╋┓┃┃¨╋┓
ローカルのアプレットに権限を与えるには (Windowsの場合) C:\Documents and Settings\(user)\.java.policy に grant codeBase "file:/*" { permission java.util.PropertyPermission "user.home", "read"; }; と書けばいいと思って試してみましたが、書く前と変わらず java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read) が出ます。どこが間違っているのでしょうか・・・
>1:このプログラムのメソッドgetData()のアクセス修飾子publicを修飾子staticに >変えてコンパイル、実行してみよ。エラーがでるので修正したプログラムを作りなさい。 頭の悪い問題だな。 自分でpublicをstatic変更しといておかしくなったならpublicに戻せば良いじゃないか。 言いたいことは分かるが国語力なさ過ぎだ。
752 :
デフォルトの名無しさん :2007/10/12(金) 01:00:20
で?
以前、アクティブデスクトップだとなぜかアプレットが使えない!と言っていたものですが <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="300" height="100"> <param name="code" value="hoge.HogeApplet" /> </object> と書いたら動きました。 解決したので一応報告。
>>753 今年のお正月の話?ぼんやり覚えてる。懐かしいな。
要はwin2000ではappletタグでなくきちんとobjectタグにしなさいってことかな?
755 :
750 :2007/10/12(金) 02:02:14
自己解決しました。 ブラウザ再起動で反映されました。申し訳ない。
というかgetDataをstaticにしたらオブジェクトの意味がよくわからなくなるんだが
今swingでゲーム作っているのですが、 キャラの重ね合わせ制御の方法が解りません。 JLabelを使ってキャラを表示させています。 で、あるキャラとあるキャラが重ねあった場合、 特定のキャラを必ず上に表示させたいのですが・・・その方法がわかりません。 誰かご存じないでしょうか?
759 :
758 :2007/10/12(金) 08:06:06
書いた直後ですが・・・自己解決しました。 コンテナにJLabelをaddする際にインデックス0を指定するだけでした。 失礼しました。
>>758 解決したようだけど、JLabelでいわゆるスプライトを行うのは限界があるよ。
スプライトは結構簡単に実装できるので、ゲームに興味あるならば勉強するべし。
「15歳からはじめるJAVAわくわくゲームプログラミング教室」がオススメ
名前はあれだけど、入門本スレでも評価が高い
日付に対してデータを登録できるカレンダーを作ってみたいのですが、 javaでGUIを作るとなるとswingを使うことになるのでしょうか? ネットで調べてみるとswingは廃れていく技術のように書かれてるのが多かったので気になりました。 経験多いプログラマーの方がカレンダーを作るとしたらどんな技術を選んで作りますか?
>>761 ソースを下さい。
廃れているのは、SWTとかかれていませんか?
Swingは、むしろ最近力を入れて改良されている部分です。
趣味ならまだしもSWTとかSwingって実践で使えるの? SWT、Swing、AWT、applet、ここら辺の違いは何なんだろう
一度LimeWireかV2Cを使ってみれば? あれでSwing使えねーと思うなら使えない。
>>763 うるおぼえ(<-なぜか変換できない)だが、
SWT Windowsに特化したGUI。早いがWindows以外では使えない。Eclipseでも使用
Swing もっとも一般的。どのOSでも一応動く。
AWT Swingの一層下。細かくいじれるが、扱いづらい。初心者は大人しくSwingへ。
applet ウェブブラウザ上でJavaを使えるようにする技術。その性質上リソースが著しく制限される。
って感じだと思う。適当に書いてることなので、間違ってたら訂正よろしく。
>>763 Swingが余裕で実践に使えることはV2C(2ちゃんねるブラウザ)で証明されている
>>765 SWTだけど、今はJavaも結構早くなってるからそんなにメリットはないかも。
昔は極端に遅かったからでC言語で仕事させたほうが速かったんだけど。
AWTはフレームに入る入れ子要素(パネルとかボタンとか)までOSに委譲している
Swingでは中身はSwing側で書いてるだけ
よってSwingのほうが軽量(LightWeight)といわれている
一部分使いまわしてるけどひとつ下の層というと語弊があるかな
あとアプレットの代替要素としてWebStartがあったり。
アプレットやWebStartは(証明書なしで)ローカルファイルにアクセスできないのがつらい
769 :
デフォルトの名無しさん :2007/10/12(金) 16:46:54
なんで、swingとAWTの解説サイトって全部アプレットなの。 イベントの処理の仕方も違うはずなのに
>>769 積極的な理由として、webで解説するために、その場で動いた方がわかりやすい。
消極的な理由として、解説系のサイトでは主にロジック部分の解説が多いため、リソースの取得が必要でない場合が多い。
かな。
yahoo gameってappletだよね ってことはこれも実践で十分いけるんでない?
AppletとJWSじゃセキュリティモデルが違うのを忘れちゃだめだぞ。 てか、Swingが廃れたってソースはITなんとかか? eclipseとnetbeans両方使ってるが大した違いはないぞ。 まあ、netbeansはデフォルトのVM引数が控えめなので自分のPCに合わせる必要があるが。 むしろ、SWT開発はめんどい。 javaとSwingがまともになった今、JNI使う意味は低レベルな部分触るときくらいしかない。 java.dev.netのgame.coreプロジェクトが良い例。 なんでまともに使いもせず定期的にJNIとpure java絡みの話が上がるのかが不思議だ。 Swing遅いって言う奴はだいたいSwingの作法間違えてるしな。
Struts1.2.8使ってるんですが、メッセージリソースの中に左中括弧を含んだメッセージを定義したいのです。 普通に左中括弧書くと、プレースホルダの開始だと認識されてMessageFormatクラスで例外が出てしまいました。 JavaDoc読んだらシングルクォートで囲えばよさそうに見えたのでやってみたけどダメでした。 ダメ元でバックスラッシュも試しましたがダメでした。 何かうまい方法あったら教えて下さいm(__)m
>>773 Wiiコンの入力を読んでみた時にはJNI使ったんだけど、pure javaで書けるのかな。
>>773 イベントディスパッチスレッドがうんちゃかって話ならTiming Frameworkで解決しそうな気がする
いやよく知らないんだけど
アンカー重複したw
777 :
デフォルトの名無しさん :2007/10/12(金) 23:06:04
Sun の JDK ダウンロード・サイトって、なんであんなに重いんですか? やっぱ、サーバが Java だからですか? だとしたらサーバに Java はやめといた方がいいですかね。 素直に Apache で PHP でも動かした方が無難ですか?
ウィンドウの左上端を基点として、100,100の位置に 新しくウィンドウを表示したいのですがどうすれば良いでしょうか。
780 :
デフォルトの名無しさん :2007/10/12(金) 23:57:04
>>779 あなたにとっては、アレが当たり前なんでしょうね。
>>780 ダイアルアップじゃ大変だね
N88Basicでもやるといいよ
>>778 Component#setLocation(int,int)
783 :
778 :2007/10/13(土) 00:47:42
>>782 それでは画面左上が基点になってしまいませんか?
そうではなく今あるウィンドウを基点にしたいんです。
>>783 君は応用も出来ないバカですか?
今あるウィンドウの位置を増分としてsetLocationを使えばいいくらい分かりそうなものを
785 :
778 :2007/10/13(土) 01:18:16
>>784 ごめんなさい。
質問する前にそれは調べました。
けれど、見つからなかったのです。
今思えば
>>778 ではそちらを質問したほうが良かったのかもしれません。
お手間を取らせて、すみませんでした。
どなたかウィンドウの位置を知る方法を教えてもらえませんか?
APIリファレンスの読み方を身に付けたほうがいいよ 設定したいフレーム.setLocation(基準フレーム.getX() + 100, 基準フレーム.getY() + 100);
そんな厳密に決めずに setLocationRelativeTo(親) が楽でいいけどなー
788 :
778 :2007/10/13(土) 01:34:39
>>786 そんなに便利で簡単なメソッドがあったんですね。
探しきれずに恥ずかしいです。
ご親切にどうもありがとうございました。
>>787 まあsetLocationRelativeToの方が楽だとは思うけど要求が(+100,+100)だったので
>>788 FrameとかJFrameのリファレンスしか見てないんじゃないのか?
getXやgetYはその親クラスのComponentで定義されているメソッド
〜から継承されたメソッドとかのリストも見てそれっぽいのを探すこともやった方がいい
790 :
778 :2007/10/13(土) 01:56:53
setLocationRelativeToは便利ですが、今回自分で値を設定したい所でした。
>>789 まったく見当外れのGraphicsConfigurationという場所を見ていました。
灯台下暗しですね。
これからは継承されたメソッドも詳しく見て行こうと思います。
それでは。
標準のJavaDocは、見るのに少しコツがいるからな。 特に継承やインターフェイスを理解してないと結構つらい物がある。 逆に理解してれば、あれほど簡潔でわかりやすいものもないと思うんだが(言い過ぎ?
その認識でいいんじゃないの
>>775 >Wiiコンの入力を読んでみた時にはJNI使ったんだけど、pure javaで書けるのかな。
>JNI使う意味は低レベルな部分触るときくらいしかない。
javadoc嫁以下だな。
>Swingの作法間違えてるしな kwsk
795 :
デフォルトの名無しさん :2007/10/13(土) 05:19:36
入力した画像の16階調のRGBヒストグラム(赤、緑、青の3種の16階調グラフ) を表示させるプログラムの課題が出ているのですが getRGB()の使い方がよくわかりません。 どうやって特定の色の値を計算するのでしょうか?
(ビットのうち 24 〜 31 はアルファ、16 〜 23 は赤、8 〜 15 は緑、0 〜 7 は青)。
つかgetAlpha、getRed、getGreen、getBlueってあるんじゃないの?
「getRGB()」を使えと指示が出ている課題かも知れないジャマイカ
この手の課題はシフト演算とビットマスクを学ぶという 目的がある事も多いのであまりおすすめしない
>>797 >>795 がjava.awt.Color#getRGBのことを言ってるのならね
java.awt.image.BufferedImage#getRGBのことならBufferedImageにgetRedの類は無いから
もしgetRed等を使うのならnew Color(bufferedImage.getRGB(...)).getRed()とかしないと
てか、もしかして
>>796 の個々のビットフィールドの取り出し方が分からないとか
801 :
デフォルトの名無しさん :2007/10/13(土) 13:29:55
ビットマスク、とビットシフトでググッたら?
っていうかJavaでビットを扱うっていうのが根本的に間違ってると思う。 そういうのはC向き。たぶん出題者もCでやることを前提で問題出したんじゃないの?
804 :
デフォルトの名無しさん :2007/10/13(土) 13:55:25
まちがってるのはお前の頭のほうじゃね?
いやbyte型でビット操作とかしたら暗黙の型キャスト周りで意外とめんどいことになる
あとunsignedがないからな
理解していないからすぐ言い訳する
自分で作成したjavaプログラムを動かすにはjavaコマンド打つんですが、 ネットからダウンロードしたjavaで作られたプログラムを使うときってアイコンをダブルクリックとかで動きますよね。 前者の状態から後者の状態にするにはどうすればいいんでしょうか?
>>808 たぶんJarファイルのことをいってるんだろう。
俺はEclipse使ってるので、エクスポートからしてるが、コマンドラインでもできるはず。
java -jarで確かuseageが表示されるからやってごらん。
間違えた。jarだけでいいな。
>>808 アイコンをダブルクリックとかで動くやつを実行可能jarという。
jarのヘルプだけでは実行可能jarの作り方は分からないと思うので、
sunサイトのドキュメントを参照したり、実行可能jarでぐぐったりするといい。
814 :
808 :2007/10/13(土) 19:23:50
>>809 >>810 >>811 >>812 なるほど、単なるクラスファイルとは別にプログラムを実行するためのファイルってのがあるんですね。
jarファイルでググってやってみます。ありがとうございました
>>799 javaだと型昇格して全部intになっちゃう・・・って先を超されたか。
ObjectInputStream(以下ois)とObjectOutputStream(以下oos)を使ってオブジェクトの入出力を行っています。 oos.writeObject()で書き込んだデータをネットワーク経由で受信し、 ois.readObject()を実行した場合に、オブジェクトデータであれば問題はないのですが、 オブジェクトデータ以外(バイナリ配列)であった場合にも、Exceptionをキャッチした後バイナリ配列として読み取りたいと考えています。 しかしoisのストリームのポジションを戻すことができず、困っています。 oisでreadObject実行前に全てを一度バイト配列として読み取って退避させ、 再度バイナリ配列からoos→oisという具合に復元させる方法も考えたのですが上手くいきませんでした。 データを再送信させる以外の方法ってありますか? ご存知の方いらっしゃいましたらお願い致します。
818 :
デフォルトの名無しさん :2007/10/14(日) 02:05:54
ファイルIO(CSVファイル)でいい本があれば教えて下さい。 重複チェックのロジックとか、あるデータのキー値が 他のファイルに存在してるとか、 ファイルIOと読み込んだCSVデータに関するロジックを 知りたいです。
>oisでreadObject実行前に全てを一度バイト配列として読み取って退避させ、 >再度バイナリ配列からoos→oisという具合に復元させる方法も考えたのですが上手くいきませんでした。 その考え方でいけるはずだが、やり方が悪いんじゃないか 復元するのに oos が入ってるのはなぜ? コードみせてみ
820 :
デフォルトの名無しさん :2007/10/14(日) 02:10:29
すいません 初心者なんですが、コマンドプロンプトのc:\Dcument and Settings\(ユーザ名)にあるディレクトリって、どこのことですか?
どこのことって、そのまま c:\Documents and Settings\ユーザ名 だと思うけど。 エクスプローラでも辿れるでしょ。 何がわからんの?
CSVの仕様はRFCが公開されてるんだっけ?あれ読んだ方が早い。 あとは、java.ioかjavax.nioのjavadoc読む。
823 :
820 :2007/10/14(日) 02:24:10
コマンドプロンプトでのmkdir javaとやって、画面上に何も出ず、 それでマウスで(?)それを作って、で、消した(ゴミ箱からも)んですけど、 コマンドプロンプトでもう一度作ろうとしたら、もうあるって出たので…… で、一体どこにあるんだろう?と思って人に聞いてみたら、c:\Dcument and Settings\(ユーザ名)だと言われ、 なんのことだろうと思って来た次第です。。
824 :
820 :2007/10/14(日) 02:24:59
(つけたし) 初心者発言ばかりで恐縮ですが、コマンドプロンプトっていうのは、絵じゃなくて文字でPCを動かすものですよね? てことは、目に見えるどっかに「java」がつくられているんでしょうか??
>>823 マイコンピュータ → (C:) → Documents and Settings → ユーザ名 と辿っていけ
というか、Windows の基本をまず勉強した方がいい
>>820 C:\Users\<ユーザー名>はある?
windows板行って来い。
>>821 今の時期だとvistaってオチだろ。
c:\Documents and Settings\ユーザ名は下位互換のためのソフトリンクだから。
827 :
820 :2007/10/14(日) 02:31:13
なるほど……あった……orz プログラム学ぶ上でそうしたいとは思ったのですが、図書館に行っても「パソコン基本入門〜おじいちゃんでもできる!メールの方法〜」とかしかなく…… 独学ってのは案外いやなところでつまずく; ありがとうございました
828 :
820 :2007/10/14(日) 02:37:37
>>826 次からはそこに聞いたほうがよさそうですね
了解です
String配列の要素数ってどうやって調べますのん? length()もsize()も使えないYO!
830 :
817 :2007/10/14(日) 02:41:03
>819 復元するのにoosを入れたのはバイト配列にする際に先頭4バイトのマジックナンバーなどが抜け落ちていたためです。 (oosを介しても同様でしたが・・・) import java.io.ObjectOutputStream; import java.util.*; import java.io.*; public class Test2 { protected static final int BUFF = 512; public static void main(String args[]){ Hashtable hash = new Hashtable(); try{ ByteArrayOutputStream baos = new ByteArrayOutputStream(BUFF); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(hash); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); byte[] b = new byte[baos.toByteArray().length]; //ここで情報が抜け落ちる bais.read(b); System.out.println(); }catch(Exception e){ e.printStackTrace(); } } }
>>829 String配列だろうがint配列だろうが配列は配列
lengthしかないのは分かりきってるじゃないか
>>830 bais.read する必要なんかなくて、baos.toByteArray() をそのまま使えばバイナリ配列になってるんじゃないの?
>>831 >>832 ありがとう!!
()いらないなんて想定の範囲外だった。
ホンマにありがとうやでー
じゃあ今までどうやって配列の要素数を求めてたんだよって聞こうと思ったけど アプリケーションプログラミングから入ると最初に出会う配列ってString配列なんだなw
>833 いやこれは簡素化したもので、baosやoosはネットワークの向こう側で見えない。
見えなくても、バイト列を送ってるわけでしょ。 それそのままでいいじゃん。
838 :
デフォルトの名無しさん :2007/10/14(日) 17:55:41
0からみた9と、0からみた9は相対的に文字コードの距離は相対的に等しいから まず、ある全角数字の相対コード(変な言い方ですが・・)を計算(c - '0')し その後絶対的な位置として( + '0')をしてやる。 こんな感じっしょー
うわ、相対的にって使いすぎww ごめんなさい。恥ずかしい。。
>>838 0が変換されるのがわかればわかるんじゃね
たった10通りだから、紙の上で確かめてみるのもイイかも。
>>838 前提として、文字コードでは0〜9が連続して並んでいる
全角0〜9も同様
>if (c >= '0' && c <= '9') {
これで対象が全角数字の場合に限定している
>c - '0'
これで、文字コードから一桁数値に変換する。
'0'-'0'==0
'1'-'0'==1
...
'9'-'0'==9
>c - '0' + '0'
数値に変換した物に'0'を足すことにより、半角数値となる。
0+'0'=='0'
1+'0'=='1'
...
9+'0'=='9'
文字で考えるんじゃなくてunicodeのコードポイントで考えれば良いんじゃない? そこら辺が分からないのかな。
スレッドがタイムアウトするってどういう状態なのですか?
846 :
デフォルトの名無しさん :2007/10/14(日) 19:35:45
いや、もう分かってるんだろうよ
GCっていつおこっているか、どのくらいの時間がかかっているか知りたいのですが、 どうやってしればいいのでしょうか? また、GCのチューニング方法が載ってるサイトや本はないでしょうか? 今、eclipse、Java4、Tomcat、strutsで開発しています。
-verbose:gc オプションを付けて起動すれば表示される
javaコマンドのVM引数読め。 それかプロファイラのようなものでも監視できる奴が無いわけでもない。
>>848 >>849 ありがとうございます。
すみませんが、javaコマンドのVM引数ってどうやって読むんですか?
監視できるツールは普段はjrocketを使ってるんですけど、SunのJavaではやりかたがわからなかったんです。
>>847 なんで今、サポートが切れる直前の1.4で開発しているのかは知らんけど、5.0以降ならJDKに付属しているJConsoleってツールを使えば簡単にモニタリングできる。
jrockitな
DoJaだからか? < 1.4
>>851 jrockitは1.4.1ベースなのでEOF期間終了してる。EOF期間中なのは1.4.2。
というか現実問題java7が出たらjava5.0がEOF突入するのに日本じゃまだ1.4.2ベースなんだよな。
5,6で最適化が全然違うんだが・・・。
jrockitの5.0ベースのやつ、もう出てるんじゃなかったっけ? 世界最速をうたってたと思うけど
世の中誰もが最新の環境を追っかけてくれていたら苦労しないんだが、そうもいかんって顧客は多いんだ、これが
でも開発側は使う使わないは別にしても最新の情報を追っかけてないと死んじゃうよ
>>850
>>857 Java6にするだけで速度がかなりあがりますよ、とプラス面を大きく言えば結構簡単に納得してくれるもんだよ
特に未だに1.4.2を使えといってくるところは、Javaは遅いという幻想を抱いているんでパフォーマンスをちらつかせると効果高い
>>858 1.4から1.6に更新したとき、パフォーマンスが三割以上上がってマジビビったわ。
jrockitってことはサーバー用途だからやっぱ枯れて安定したやつを使いたいんだろ。
ただ、jrockitは最適化が速度重視で安定性重視じゃないしHotSpot技術とは別の最適化方法だから
serverモードでHotSpotが効いて来た頃のsun java6との総合性能でどういう違いがあるか気になる。
>>858 javaやswingが未だに重いとか言ってる連中は頭が1.3,1.4で止まってるからな。
あの頃とはSun HotSpot VMの実装が別物なのになぁ・・・。
今はCDCで普通にSwingが動く時代なのに。
>>859 5.0のクラスファイルをリコンパイルなしに6で
実行してSwingが明らかに早くなってたんだから1.4~6ならそりゃビビるわw
ただ、6は目に見えるバグが多いな。やっと直ってきたが。
問題はjdk6uNとjdk7か。
6でリコンパイルって速度になんか関係あるの?
>>861 少しはあるよ。
有名どころでは、文字列連結の+演算子の展開に
StringBufferを使ってたところをStringBuilderにしてたりとか
863 :
デフォルトの名無しさん :2007/10/15(月) 12:43:29
Javaで、「あったら便利」と思うようなシステムを作ろうと思っているのですが、 何かいいアイデアがあったら教えてください。
すみませんが、質問です。 Apache Tomcat(4.1.34)を使っているのですが、server.xml の context要素の 子要素で <Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1"/> というものがあるのですが、 このDevLoaderというクラスは何をするものなのでしょうか? Google検索してみましたが、よくわかりません。
>>863 ちょっと考えてみたけど、以外と浮かばないもんだなあ。
Javaの特性から考えると、OSや環境に依存するようなシステムより、JavaVMを生かしてOSの違いを無視できる、
ネットワークを活用したシステムなんかを作ってみたらおもしろいんじゃなかろうか。
・・・と、ここまで書いてなんだけど、スレ違いでわなかろうか?
>>863 俺のアイデアメモから一つ出してあげる。
Skypeログを2ch鯖形式で見せるソフト。
Javaでなくても.NETとかでもSkypeAPIアクセスできるからJavaである必要はないけど。
これがあれば、2chブラウザでSkypeログが見られる。
868 :
デフォルトの名無しさん :2007/10/15(月) 17:02:51
プログラムの「前」ってどっちですか? static void main(String[] args) { int k = 0; ← こっちが前? for (int i = 0; i < 10; i++) { k += i; } System.out.println("こたえ=" + k); ← こっちが前? }
870 :
デフォルトの名無しさん :2007/10/15(月) 18:37:48
>System.out.println("こたえ=" + k); ← こっちが前? ていう発想が理解できないのだけど、もう少し分かりやすくいってくれないか?
「前」というのは、時間的に言うと後ろだし、視覚的に言うと先になる。 日本語の不思議である。 筒井康隆だかの文でも見たような気がする。唯野教授だったかな? まあ、定義は無いってコトだよね。文脈によって変わるから。
って、アセンブラスレにも出没してたw なんだこいつwwww
873 :
デフォルトの名無しさん :2007/10/15(月) 19:02:41
>System.out.println("こたえ=" + k); ← こっちが前? こっちを前にする方法(Java)はあるのか?
874 :
デフォルトの名無しさん :2007/10/15(月) 19:27:06
まえ=forward うしろ=backward の意味の場合は System.out.println の方 まえ=before あと=after の意味の場合は int k = 0 の方 たぶん。
876 :
デフォルトの名無しさん :2007/10/15(月) 19:44:37
じゃぁ 前方参照ってどっち? 後方参照ってどっち?
Callable を使ったとき call は Exception を投げられるけど InterruptedException はキャッチして復元するのが定石? そのままだと Future 使ったときに get 用にと食われて スレッドの大元まで伝わらないんだけど
>>876 アセンブラで言うところの前方参照は、ソースファイルの下の方へ飛ぶJUMP命令など。
下はまだアセンブルしてないので距離(バイト数)が確定してない。そのためJUMP命令の長さも確定できない。
JUMP命令の長さを大きく確保して、コードが確定してから余った部分をNOPを埋めたりする。
Cの前方参照も、下の方のまだコンパイルされてない定義を参照することだね
880 :
デフォルトの名無しさん :2007/10/15(月) 22:37:03
つまり「下」が「前」という事ですね!
いきなり前みせ
882 :
デフォルトの名無しさん :2007/10/16(火) 00:11:49
宿題スレの方(Java宿題スレの238)に丸投げしている物ですが、javax.vecmathパッケージのGVectorとGMatrixのクラスが どのようにして動いているのか分かったら自分で解けそうなので、こちらで質問させてください。 GVedctorクラスには、void mul(GVector v1, GMatrix m1) というメソッドが用意されているのですが、 自分で用意したベクトルv1と行列m1をこちらのメソッドに投げて、乗算した結果をコンソール画面に 出力させるにはどうすれば良いのでしょうか? 同じようにGMatrixクラスにも、void mul(GMatrix m1, GMatrix m2) というメソッドが用意されているのですが、 同じように自分で用意した行列m1とm2をこちらのメソッドに投げて、乗算した結果を出したいです。
884 :
デフォルトの名無しさん :2007/10/16(火) 00:35:03
質問です。 激しくJava初心者なんで変なこと言ってたらすいません。 Javaで区分積分法を使って下の値を求めます。 関数x^2があり、その関数とx軸と区間[0,10]に囲まれたの面積Sの近似値を区間[0,10]を「5000分割」して求めます。 実際の面積Sは、普通に積分すれば求まります(S=∫[0,10]x^2 dt)がJavaで区分積分法のプログラムを作ることができません。 どなたかご教授ください。
>>884 積分とはどういう意味かを理解していれば単純な長方形の面積の和となることくらい解るだろ?
後はfor文をつかって面積を足しこんでいけばいいだけ。
なにが解らないんだ
>>885 激しくJava初心者というよりは激しく数値計算初心者じゃまいか?
887 :
882 :2007/10/16(火) 00:42:51
>>883 Javadocを読むと、このようなコンストラクタやメソッドが用意されている、
というのは分かるのですが、それを実際のプログラムに応用ができないのですorz
例えば、
double[] v1 = new double[3];
double[][] m1 = new double[3][3];
double[][] m2 = new double[3][3];
こういったメンバがある場合だと、どのようにメソッドを使えば、
乗算した結果が表示されるのでしょうか?
>>887 double[][] m1 であるならば、行列M の要素M1[i, j] が各配列の要素に対応するんだよ
M1 + M2 であれば全ての要素を足せばいい。
forで二重ループつくって、m[i][j] = m1[i][j] + m2[i][j]
>>884 プログラム初心者は入門本でも読んでからJava初心者を名乗るといいと思う
こんな感じか
GVector v=new GVector(3);
v.setElement(0, (int)(Math.random() * 9) + 1);
v.setElement(1, (int)(Math.random() * 9) + 1);
v.setElement(2, (int)(Math.random() * 9) + 1);
GMatrix mat1 = new GMatrix(3, 3);
mat1.setElement(0, 0, (int)(Math.random() * 9) + 1);
public static void printvector() {
System.out.println("ベクトルの値");
for (int i = 0; i < getSize(); i++) {
System.out.println(v.getElement(i));
}
}
>>888 そこまでは出来てるみたい。GVectorを使って同じ事をしろって宿題だそうよ
>>890 もう宿題スレの方に完成例を投げてあげたらいいんじゃね?
>>879 ecma-262だとまだ定義されてない関数を参照する事を後方参照と呼ぶから意味が逆だな。
実行時にソースコードの存在があるかないか無いかの違いか?
893 :
882 :2007/10/16(火) 01:40:32
>>890 ありがとうございます。
一応、単純にベクトルと行列を出力するコードは書いてみました。
実際にこれらを掛け算する場合は、どういったメソッドを書けば良いのでしょうか?
積分厨をいじめすぎじゃないか。きっとやつも涙目だしwwwwwwwww
895 :
デフォルトの名無しさん :2007/10/16(火) 01:54:33
画像の輪郭をエッジ検出で出せるプログラムを考えているのですが、 どういう風に作っていけば良いですか?流れを教えてください。 よろしくお願いします。
896 :
882 :2007/10/16(火) 01:54:36
後、以下の箇所でその下に書いたエラーが出てしまいます。 v.setElement(0,〜); Syntax error on tokens, AnnotationName expected instead v.getElement(i) Cannot make a static reference to the non-static field v
897 :
882 :2007/10/16(火) 02:31:20
色々とやってるのですが駄目ですorz
ところで、ベクトルは1列の行列と考えて良いのでしょうか?それともコンセプト的に違うものなのでしょうか?
明日の何時まで?
900 :
882 :2007/10/16(火) 02:46:28
>>898 一列の行列と考えて頂いて結構です。
>>899 10月16日の朝の6時までですorz
後3時間ちょっとですorz
901 :
899 :2007/10/16(火) 03:03:09
>>882 とりあえずざっと作っといた。宿題スレの方を見るよし。
俺は眠いからもう寝る。上手く行かなかったら自力でなんとかしてくれ。
というか高校行け
903 :
デフォルトの名無しさん :2007/10/16(火) 04:03:46
Javaプログラミングの質問とはちょっとずれるかも知れませんが教えてください。 開発環境はWindowsXP、JRE,JDK共に1.6です。 URLConnectionにて、とあるサーバへHTTPS通信をするプログラムを書き、 そのクラスファイルをバッチファイルからstart javaw 〜により起動しています。 この時、サーバへの接続において、Javaコントロールパネルにて設定した接続方法を 使用してもらいたいのですが、どうもそれが無視されているようなのです。 具体的に言うと、プロキシサーバの設定が反映されずに、直接続されてしまいます。 ブラウザ内で動作するアプレットではコントロールパネルの設定が使われているようなので スタンドアロンアプリでもその設定が使われると考えていたのですが、間違いでしょうか? または、動作させるべきjavawが違うのでしょうか? Windowsの環境パスではJDKのbinディレクトリが指定されていましたので、 細かにバージョンのあるJREディレクトリ中の最新バージョンのjavawでも試してみましたが ダメのようでした。 解決方法、または些細なアドバイスでもいただけるとありがたいです。 よろしくお願いします。
904 :
882 :2007/10/16(火) 04:34:39
>>901 ありがとうございます。動作確認しました。
あちらの方にもお礼を書いておきます。
>>903 >URLConnectionにて、とあるサーバへHTTPS通信をするプログラム
>Javaコントロールパネルにて設定した接続方法
この2つが関連していないだけじゃないのか?
コントロールパネルで設定できるプロキシ設定ってJREのアップデートとかに使用するだけで、プログラムの実行には影響がないと思う
あったとしたらどうやって解除するの?って話になるじゃん。
プロキシはプログラム内で明示的に指定しないと繋がらないと思われ。
906 :
903 :2007/10/16(火) 08:29:34
>>905 ご返事ありがとうございます。
Javaコントロールパネルの通信設定が関係していないのでは?
の件について、ローカルのプロキシを立てて実験してみましたが、
やはり、ブラウザ上でのアプレットでのみこの設定は効くようです。
つまりあれはJavaプラグインのみの設定画面という事なのでしょうかね。
色々と調べてみたら、どうやらJavaでは昔、システムプロパティに
プロキシの設定を保持していたようです。
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/net/proxies.html そこで2.1)HTTPの項目にある、実行時にシステムプロパティを設定する方法で
-Dhttps.proxyHost -Dhttps.proxyPort
をバッチファイルに追記したところ、プロキシを使うことが出来るようになりました。
というわけですので、取り敢えず解決とさせていただこうと思います。
皆さんどうもありがとうございました。
Javaで作ったGUIアプリケーションをWindows向けに配布する場合の形式について質問があります。 まずダブルクリックで起動できるjarファイルを試してみたのですが、 ・javawとの関連付けがうまくされていない人が結構いる(起動できない!) ・アイコンを設定できない ・見慣れない と言う理由でさようならしました。 次にbatファイルを試してみましたがダブルクリックjarと似たような理由でやめました。 そこで、関連付けとは無縁でアイコンも設定できてエンドユーザにも馴染みのあるexeファイルで 起動ファイルを作ればいいじゃないか!と思ったのですが、この起動ファイルどうやって作るのが良いんでしょう? Cを覚えるよりも簡単に出来る方法があれば教えてください。
Java1.6のTrayIconを使ってるんですが、 PNGのアルファチャンネルが適用されないみたいで透過のオンオフ1bitになってしまいます。 これをちゃんと8bitアルファにする方法ありますか? ググったらWindowsではそうなる、MacやLinuxでは大丈夫、 というような情報があったんですけど解決策はみつけられませんでした。
>>907 exewrapとかjsmoothとかlaunch4jとかでいいんじゃないすか
911 :
907 :2007/10/16(火) 16:38:20
>>910 おぉ〜、こんな良い物があったんですか。
想定の範囲外でした。
exewrapのサイトには他の二つの事が簡潔にまとめられていて分かりやすかったです。
レスありがとうございました。
あるグループウェア上で管理してる、社内の人間のスケジュールデータを表示するページがあり、 このhtmlを解析して、スケジュールデータをmysqlで管理することになりました。 htmlソースをStringにいれて、解析モジュールに渡すところまでは作成しましたが、 このあとをどうするのがスマートなのか中々思いつきません。 どなたかよかったらご教授ください。htmlパーサなども見て見ましたがいまいちです。
本末転倒って言葉は死語になったらしいなw
>>912 たぶんスマートなのは、グループウェアの改修
>>914 確かにその通りですが、グループウェア(サイボウズ)をどうこうはできませんし・・・
>>909 アイコンのαを1bitしか認識しないのはwinの仕様じゃなかったか?
vistaで変更されたはずだが。
917 :
909 :2007/10/16(火) 19:18:15
>>916 やはりwindowsでは仕方ないんですか・・・
でもVistaでやってます。変更されてないんですかね。
質問です。 EclipseかEmacsで、プロパティの定義部分にタグジャンプする方法はないでしょ うか?今はgrep以外に方法がないので、かなり面倒なのです。
920 :
909 :2007/10/16(火) 20:29:43
>>919 24bit、8bitアルファチャンネル付きのPNGです。
iTunesみたくアンチかかったきれいなアイコンをタスクトレイに表示したいんですけど・・・
>>920 PNG-32のARGB8bitでつくってみて変わる?
うまく表現できませんが、普通の変数とオブジェクトの違いが分かりません。 今の段階では両方とも何か数値を放り込んで 最後にSystem.out.printlnで表示するだけって感じなので・・・ 全然違うよって言われそうですがゆくゆくは何かメリット、デメリットや使い分けがあるのでしょうか
>>922 変数とオブジェクトは全く違う概念だ。
たぶんプリミティブ型と、オブジェクトで勘違いしている?
まず今の段階が何のことか分からん。
メリットデメリットは、しっかり教科書を読んでください。
>>922 どんな段階かは知らんけど、変数とオブジェクトは概念からして違う
数値ってのは変数じゃなくて、変数に入っている値
オブジェクトは(厳密には違うけど)そんな値に近い概念
変数ってのはあくまで「値」の場所を示すラベルのようなもん
925 :
デフォルトの名無しさん :2007/10/16(火) 23:16:06
Panelに長方形を表示する簡単なプログラムを作りたいのですが 以下のようにすると "Exception in thread "main" java.lang.NullPointerException" と出てしまいます。なぜでしょうか? public class zukei { public static void main(String[] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel(); frame.add(panel); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0) ; } }); Graphics g = panel.getGraphics(); panel.getGraphics(); panel.setBackground(Color.red); g.setColor(Color.blue); g.fillRect(0,0,10,10); frame.setVisible(true); } }
926 :
デフォルトの名無しさん :2007/10/16(火) 23:19:15
その java.lang.NullPointerException の横に、ソースファイル名と行番号が出てない?
927 :
デフォルトの名無しさん :2007/10/16(火) 23:24:55
>>926 ↓のようにでてきます。29行目は"g.setColor(Color.white);"のとこですね。
Exception in thread "main" java.lang.NullPointerException
at zukei.main(zukei.java:29)
>>920 たぶん、フレームを表示する前に描画することはできない
929 :
928 :2007/10/16(火) 23:25:50
930 :
デフォルトの名無しさん :2007/10/16(火) 23:29:38
>>929 Frameは表示できました!
でも、白い長方形が出てこないようですorz
>>928 コードは概ねあっているんだが、書く場所が違う。
paintComponents とか repaint でググってみるべし。
あと少しだ、頑張れ
932 :
デフォルトの名無しさん :2007/10/16(火) 23:36:15
933 :
デフォルトの名無しさん :2007/10/16(火) 23:53:56
>>931 ありがとうございます。
とりあえずframe.repaint(g);を最後の方の行に書き込むのかな?と
思ったのですが、どこの行に書いてもやっぱり長方形は表示されません…
>>932 書き込み時に無駄なimport文消してたらこうなっちゃったみたいです。
描画は paintComponent をオーバーライドして、その中でしなければならない。 でなきゃいつ誰に上書きされても仕方がない。 こんな感じ。 public class zukei { public static void main(String[] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel() { public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.blue); g.fillRect(0, 0, 10, 10); } }; panel.setBackground(Color.red); frame.add(panel); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setVisible(true); } }
935 :
デフォルトの名無しさん :2007/10/17(水) 00:07:36
>>934 おお!ありがとうございます!
やっぱ勉強不足っすね俺orz
936 :
デフォルトの名無しさん :2007/10/17(水) 01:04:00
>>934 たびたび質問して申し訳ないのですが、
そのようにJPanelを作る時(無名クラス?)でないところに
paintComponentを記述するときはどうすればいいのでしょうか?
普通に JPanel のサブクラスを作る public class MyPanel extends JPanel { public void paintComponent(Graphics g) { ... } } MyPanel panel = new MyPanel();
938 :
デフォルトの名無しさん :2007/10/17(水) 01:22:58
>>936 説明が足りないと思うけど、どうなって欲しいの?
939 :
デフォルトの名無しさん :2007/10/17(水) 01:47:13
>>938 あらかじめパネルがフレームに張られている状態で
そのパネルにfillRectで描画したい、という感じです。
940 :
デフォルトの名無しさん :2007/10/17(水) 01:57:47
既に上に提示されてるじゃん。
941 :
デフォルトの名無しさん :2007/10/17(水) 01:58:58
ていうか、自分の思っていることをちゃんと(問題として)説明出来ないのが、今のおまえの限界なんじゃないか?
>>941 すいません、リアルで初心者なので…orz
Cと比べてJAVAは用語やらが多くてかなりパニくります…
>>942 多分Cやってるとみて怯んだ奴が何人かいると思うがww
paintComponentを記述する目的が見えないから困っていた。
paintComponentって初心者がいきなり手を出す部分じゃない。
paint関係は、VB何かのWindows系のGUIをやってると
ちょっと戸惑うAWT,Swingの入り口。
何かやりたい事に対して道具を間違ってるんじゃないかという疑問がある。
paintComponentやpaintは、画面上で描画が必要になったら
毎度呼び出される「描画ロジック」を置いておく場所。
恐らく、静的なイメージバッファに絵を描きたいという用途だと思うが
そうだとすると、バッファを別に用意して描画はバッファにたいして行い
paint系はそのバッファの内容を描画する、とした方がいいのでは?
説明しきれてないな・・・・
CとかJavaとかの言語に関する問題でなく、ウィンドウシステム特有の問題だね。 Cしかやってなくても、Win32SDKなりXの経験があれば気が付く問題だと思う。
用語が多くてパニックになるような初心者はGUIに手を出す前に もっと言語そのものやそのバックグラウンドの設計思想とかを勉強したほうがいいんじゃないか javaのGUIは言語そのもので規定されているわけでなく その上に構築されているフレームワークだから 言語自体の言葉とフレームワークの言葉の両方が混じり合うので本当の初心者は面倒なことになる場合が多い
CってCUIしかやったことないの? Swingは描画するだけなら特に変なことはやってないけど。
947 :
デフォルトの名無しさん :2007/10/17(水) 05:03:03
>>943 のやりたいことと、やつの能力がまだつりあってない。今はまだ、素直にpaint()を上書きでオk
>>942 >Cと比べてJAVAは用語やらが多い
用語が多いのは、色々な機能や概念を逐一説明するのが面倒だからだよ
Cでも用語多いぞ、ほとんどはその現場固有の呼び方だから、一般的に通じない事も多いけど…
まずはJavaの基本機能を習得してからGUIに入るべきだろう
少なくとも継承とオーバーライドは覚えろ
その上で最初に覚える事の少ないAppletで実装する事がいいと俺は思う
俺は継承の意味とかもGUIやりながら覚えたけどな 適当にペイントツール作った まったく使い物にはならなかったけど動くだけでそれなりにモチベ上がる
>>949 やりながら覚えるのはありとは思うけど、一度にたくさんの事を覚えられる人は少ないし、なんだかんだと効率が悪いよ
別に継承を完全に習得してからにしろ!というわけじゃなくて、
class Foo extends Bar {}
では継承が行われていて、Barの機能を拡張している程度の理解でいい。
クラスって何?って段階で継承って何?というのは流石に厳しい。
Jarから不要なclassファイルを取り除くツールってありますか?
”不要”なクラスの特定が困難。 リフレクションとか使われたら、もう訳ワカラン
javac *.java -source 1.2 -target 1.2 JDK1.6でこのコンパイルが通りました。 おそらく古いVMでも動作するようになるので、これからはコンパイルが通る限り このオプションを付けていこうと思うのですが何かデメリットはありますか?
GenericsとかEnumとか使う気無しって事?
955 :
デフォルトの名無しさん :2007/10/17(水) 16:05:57
コンパイルが通る限り
Java MEのCDCが1.4.2相当らしいから、1.4でいいんじゃないの?
>>953 それでコンパイルが通ったからといって1.2のVMを含む環境で動作するとは限らない。
1.2より新しい環境で追加されたクラスやメソッドを使用していてもコンパイルを通るから。
1.2のVM向けのバイトコードしか生成しなくても、使っているメソッドとかまではチェックが入らない。
958 :
953 :2007/10/17(水) 17:56:39
レスありがとうございます。
どうやらJDK1.2で書かれたコードを1.2向けにコンパイルするというオプションなので
>>953 は全く見当外れのレスですね。
JDK1.6を使ってコードを書く以上デフォルトのソースリリースである
1.5未満のバージョンは切り捨てなければいけないみたいです。
とは言っても、世の中の大半のマシンはJRE1.5未満だと思うので
一般向けに公開するファイルを作るにはJDKを1.4あたりにバージョンダウンしないといけなさそうです。
>世の中の大半のマシンはJRE1.5未満だと思うので 脳内ソースですか
いちおう、1.3以降で新しく導入されたクラスやメソッドを慎重に避けながらコーディングすれば、1.2で動くものも作れるけどな
あんまりバージョンを低く設定しすぎると結果的に遅いJVMで動かすことになってJavaおせーとか思われそうだ
>>960 でも、たとえば String#split とか今じゃ当たり前のように
使っているメソッドすら使えないってのは相当きついだろうね
win98やマックは5が最高だからなあ マックはナイトリーなら6が出てきてるけど
Windowsについて知らんけど Javaって一般アプリには全然浸透してないよね ダウンロードから起動するまでの道筋がはっきり確立していないせい? もうちょっとなんとかして欲しい。
わざわざ50M近いランタイム落として実行しようって気にならないんだろう
Java SE 6 Update Nでなんとかなるのかな。それって。
>>964 javaで作ったアプリどうやって公開しようかと悩みつつどうせ完成してないし悩んでも無駄無駄
解凍してクリックで起動できたらそれでいいや
webstartもjreなかったら駄目じゃん
execwrap
exewrap
状況: JavaWebStart 使ってます。 あるユーティリティクラスに引数1つを持つメソッドが3つあって、 long, Date, Calendar で各々オーバーロードしてます。開発ターゲットは 1.4です。 ほとんど全てのユーザは 1.4 で、問題ないのですが、 あるユーザは 1.6, 1.5, 1.4が入っていて、1.6 の javaws で起動したときのみ(キャッシュは同一かな?)、 Date を引数にした関数が not found になります。 以下のようにしても忽然と姿を消しています。 Method[] methods = TheClass.class.getMethods(); for (int i=0; i<methods.length; i++) { System.out.println(methods[i]); } このユーザのPCからは 1.6 を除いてもらうことにしたのですが、 これに似たような状況を見聞きした方はいらっしゃいますか?
exewrapもjreいるだろがw
すみません、質問です。 javaアプリケーションを用いて描画を行い、描画された物をファイルに保存するプログラムを作成しています。 現在、Frameを用いて新たにウィンドウを開き、そこにマウスで描画を行い、ボタンを配置して閉じる事が できるようになりました。描画には、Graphics、getGraphicsを使っています。 しかし、ボタンを押すことでファイルに保存を行い、ウィンドウを閉じる…というプログラムができません。 ファイル保存するためには、imageファイルにすると思っているのですが、変換が上手く行かず、 さらに本当にimageにするべきなのか解らず右往左往している状況です。 どなたかご教授よろしくお願います。
とりあえず以下の3点をよろしく。 ・GraphicsをもらうためのgetGraphicsはどのクラスのgetGraphicsを使ってるのか ・そのimageファイルっていうのは具体的に何のことを言ってるのか ・その上手くいかない変換っていうのは具体的にどうやってるのか
977 :
975 :2007/10/18(木) 00:02:11
>>976 さん、返信ありがとうございます。
・GraphicsをもらうためのgetGraphicsはどのクラスのgetGraphicsを使ってるのか
フレームのクラス内にGraphicsの定義を行っています。getGraphicsはそのクラス内にある
マウスイベントを受け取るリスナーのクラス内で使用しています。
・そのimageファイルっていうのは具体的に何のことを言ってるのか
jpegやgif、pngといった画像ファイルの形式の事です。
・その上手くいかない変換っていうのは具体的にどうやっているのか
フレームのクラスには以下の事を書いています。
BufferedImage image = new BufferedImage(1000, 800,BufferedImage.TYPE_INT_BGR);
Graphics g;
マウスイベントのクラス内では、以下の通りに書いています。
g = image.getGraphics();
g.setColor(c);
g.drawLine(x, y, x1, y1);
このような形で描画を行おうとしていますが、描画が行えませんでした。
今まで、ただフレーム内に書くだけの場合は、フレームのクラスにおいて
Graphics g;
マウスイベントのクラス内では
g = getGraphics();
g.setColor(c);
g.drawLine(x, y, x1, y1);
の形にすることで描画を行う事が可能でした。
>g = image.getGraphics(); >g.setColor(c); >g.drawLine(x, y, x1, y1); >このような形で描画を行おうとしていますが、描画が行えませんでした。 これはイメージに対して描画してるわけだけど、イメージとフレームは別物なので、イメージに描画してもフレームには表示されない。おk? ↓でイメージの内容をフレームに表示してみそ g = getGraphics(); g.drawImage(image, 0, 0, null);
979 :
デフォルトの名無しさん :2007/10/18(木) 00:28:27
あれだ。初心者なんだからソース出したほうが話は早いぞ。
980 :
975 :2007/10/18(木) 01:07:04
>>978 さん、返信ありがとうございます。
g = getGraphics();
g.drawImage(image, 0, 0, null);
にすることによって描画を行う事ができました。しかし、
BufferedImage image = new BufferedImage(280, 170,BufferedImage.TYPE_INT_BGR);
の数値の分だけ画面が真っ黒になってしまいました…。
>>979 さん、返信ありがとうございます。
考えてみればそうですね…。ただ、少し長くなるので、txtでどこのアップローダーがいいのかよく解らなくて上げていませんでした。
見れるか解りませんが、アップします。
http://www.uploda.org/uporg1070292.txt.html 先ほど、イベントのクラスを分ける、と書きましたが、作業を行っているうちに、イベントのクラスを作らない事にし、修正を行いました。
importの部分は…色々取ってきてそのままになっています。
>>980 >の数値の分だけ画面が真っ黒になってしまいました…。
それは単に、最初にイメージ全体を白で塗りつぶしておけばいいんじゃない。
g = image.getGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, 280, 170);
とかで。
複数のクラスからなるプロジェクト(A.java、B.java、C.java・・・)を 他のクラスをそのままコピペだけでA.javaに統合したのですが エンクロージング・インスタンスが無いとのエラーが出ました このままでは実行できないのですが、どうすればいいでしょうか?
983 :
975 :2007/10/18(木) 01:27:43
>>981 さん、返信ありがとうございます。
fillRectで背景を真っ白にしようとしましたが、上手く行きませんでした…。
そこで、
BufferedImage image = new BufferedImage(1, 1,BufferedImage.TYPE_INT_BGR);
とすることで解決させました。
javaや.netは1プラットフォームなのでランタイムではない。 まあ、そこら辺はjavaカーネルとか、モジュール化が進んでいくみたいだから初めは最小限のインストールで・・・で良くなるんじゃない?
>>965 JREっていつの間にJDK並に大きくなったんだと思って確認した。
10〜20MBってとこだね。まあ50MBが大きいって人間には10MBでも面倒さは一緒かもしれんが。
986 :
982 :2007/10/18(木) 04:47:45
すいません、982もお願いします
>>986 統合するな。以上。
訳が分かってからにしなさい。
>以上。 とか言いながらも終わってねぇしw
新スレどうする?
>>989 任せた
テンプレに追加する事は特に無いかな?
>>990 立てようとしたら、立てられませんだってさ…
テンプレに追加する事は特にないと思う。
乙
じゃあ、こちらは流そうか
Saga2の流し目を百目みたいに攻撃するんだと思っていた小3の夜
ひーかりあーれー
神の右手
神の左手
ひかりあれ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。