【初心者】Java質問・相談スレッド105【大歓迎】
プログラミング言語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質問・相談スレッド104【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1185493592/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
次スレは
>>980あたりで。
2 :
デフォルトの名無しさん:2007/08/28(火) 00:42:45
2
もつ
>>999 DateFormat達はスレッドセーフじゃないから、static finalで持っちゃ駄目だよ。
>>5 自分でシングルスレッドで注意して使う分には問題ない
マルチスレッドや公開するのならば、同期化処理を行えばよし
ま、設計を見直した方が良い場合もありますが。
Genericsについて教えてください。
1: javax.naming.directory.Attributes attributes = new Attributes();
2: javax.naming.directory.Attribute attribute = attributes.get("memberOf");
3: javax.naming.NamingEnumeration<String> values = attribute.getAll();
3行目で
型の不一致: NamingEnumeration<capture-of ?> から NamingEnumeration<String> には変換できません。
が出るのですが、Attribute+getAll() の戻り値を NamingEnumeration<String> にするにはどうすればよいですか?
>>7 javax.naming.directory.Attributesってインタフェースだからnewできないんじゃ?
Attribute#getAll()が返すのはNamingEnumeration<?>で、
どんなクラスでも放り込んでますよってことだから、
NamingEnumeration<?> values = attribute.getAll();
で取って(<?>は無くてもいいと思う)、
列挙される個々のインスタンスの種類を見ながら適切にキャストすればいいと思うが。
Attribute#addも引数はStringでなくObjectを取ってるでしょ?
9 :
7:2007/08/28(火) 18:48:55
>>8 すみません、サンプルコードが不適切すぎました
その後に行っていた
4: String str = (String) values.next();
のキャストをなくしたくて3行目のNamingEnumerationに<String>をつけたのですが、
そこから先をどのようにしたら良いのかわからなくて質問しました
getAll()の戻り値がNamingEnumeration<?>になっていたので
どうにかすれば戻り値の(中身の)型を限定してキャストをなくせるのだろうと
思っていたのですが、そもそもそれが間違いだった気がしてきました
Genericsについてきちんと勉強しなおしてみます
お手数をおかけいたしました
Generics を理解するポイントは、コンパイル時に解釈されると言う事。
コンパイル前に型が確定するような状況であればGenerics で解決できるが、層でない場合は出来ないってのがポイント
というか、戻り値が <?> で宣言されているってことは、String 以外のオブジェクトも返すかもしれないということだ。
それを、勝手に型を限定できはしない。
ちゃんと instanceof でチェックするか、ClassCastException 覚悟でキャストするか、そのあたりはまぁ好きにすればいいけれど。
transientフィールドってどのタイミングで初期化されるの?
class A {
transient int x=0;
A(){
x =1;
}
}
ってクラスをデシリアライズしたとしたらxは0と1どっち?
決まってなくて実装依存とか?
transient 付いてたらシリアライズされないはずだけど。
常識的に考えてx=1だろ
つーか試せばすぐ分かるだろ
>>12 インスタンス変数初期化子の方が優先順位高いはずだから、
new A() が終わったら x は 1 になってるはず。
優先順位高いじゃなくて、先に実行される、だな。
>>13-17 サンクス。デシリアライズ時にはコンストラクタ呼ばれないような気がしてたからさどっちか確信持てなかった。
>>17読んでみる
>デシリアライズ時にはコンストラクタ呼ばれない
もし、そうだとしたらばどうやって初期化すると思ったのか教えてくれ
Vistaの環境変数の設定、システムのプロパティからだと
システム環境変数と、管理者の環境変数だけで
ユーザ別の変数が設定出来ないのな…
コントロールパネル>>>ユーザーアカウント>>>環境変数の変更
じゃないと出来なくなってるぽい
>>12 transient フィールドはデシリアライズ時には何も代入されない。
コンストラクタも呼ばれない。
初期値が書かれていたとしても、書かれていなかった場合と同じになる。
たとえ transient int x = 3; などと宣言されてても 0 になる。
初期化したければ
private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
in.defaultReadObject();
x = 1;
}
などというメソッドを書く。
private でどこからも呼んでないのに、なぜか呼ばれる不思議メソッド。
>>23 たぶん定義されてない。
>>24 が何も代入されないって書いてるけど、それも文書化されてないような。
必ず初期化しておきたい場合については readObject 定義しとけで良いけど。
ずっと放置していたRMIの勉強をしているんだけど、6.0でやると色々省略できるようで新しい資料ないかな?
スタブとスケルトンは不要、セキュリティポリシーファイルは読ませるまでは把握。
ところで、jarから起動した時って java.rmi.server.codebase も省略できるの?
>>24>>25 不思議メソッドは聞いた事あるが、デシリアライズした所で記述汁とも聞いた。
29 :
21:2007/08/28(火) 22:50:17
>>22 俺自身がそれで3時間消費したんだよ…orz
いまさらw
そもそも板違い
>>26 そのjarの中にRMI実装用のインターフェイスや、そのインターフェイスのメソッドで
使用されるクラスやインターフェイスが全部入っているなら、codebaseはいらない。
含まれていないなら読み込み先のURLが必要。
java初心者です。eclipse 3.1 で勉強中です。
newwindowをAパネルの中心に表示したいのですが???部分がわかりません。
this.setLocationRelativeTo(this..getParent())と記述しても
モニタの中心に表示されてしまいます。
class A extends JPanel 〜{
B newwindow = new B();
}
class B extends JFrame 〜{
B(){
this.setLocationRelativeTo(???);
}
}
そりゃぁ、どこかでAパネルを受け取らないとだめだろう。
class A extends JPanel 〜{
B newwindow = new B(this);
}
class B extends JFrame 〜{
B(A apanel){
this.setLocationRelativeTo(apanel);
}
}
ちょっといろいろやってみてたら以下でいけました。ありがとう御座いました。
class A extends JPanel 〜{
B newwindow = new B();
}
class B extends JFrame 〜{
B(){
this.setLocationRelativeTo(A.this);
}
}
36 :
デフォルトの名無しさん:2007/08/29(水) 14:43:34
JMenuをJMenuItemと同じく
マウスをポイントすると反転するようにするにはどうすればいいですか?
そういう LookAndFeel の実装を作る
っていうのが正道だと思うが、アドホックにやりたいなら JMenu に addMouseListener して mouseEntered, mouseLeaved が来たときに setBackground で色変えればいいんじゃないかと思うたぶん
rs.getInt(0)
だとNULL値が0になってしまうと思うのですが
こういう場合は
rs.getObject(0)で取り出して
if (rs.getObject(0) == null)
{
}
とすればNULL値かどうか判定できるのでしょうか?
rs が ResultSet のことだと仮定すると (もうちょっと情報書こうな)、
rs.getInt(0) の後に rs.wasNull() すれば判定できる
>>39 ありがとうございました。とても勉強になりました。
Cはそこそこ、Javaはぜんぜんレベルです。
ファイルから読み込んだ文字列を処理したくて、
BufferedReader in = new BufferedReader(new FileReader("foo.txt"));
String str = in.readLine();
としていて、中身にも問題はないんですが、シークをしたいのに出来ません。
そこで、
RandomAccessFile in = new RandomAccessFile("foo.txt", "r");
とすればin.seek()も可能になるんですが、System.out.printしてみると
多バイト文字が文字化けします。
BufferedReaderを使いつつもseekする方法か、
RandomAccessFileを使いつつも多バイト文字が化けない方法を教えて下さい。
43 :
41:2007/08/29(水) 18:17:02
>>42 今の所は、入力元も出力先もShift_JISです。
エンコードによって手間は変わりますか?
>>43 変わる
RandomAccessFileで文字列の読み込みに使ったメソッドは何?
45 :
41:2007/08/29(水) 18:22:57
>>44 最初の例と同じく、readLine()です。
RandomAccessFile と BufferedReader をどうやって繋いだの?
じゃないか、RandomAccessFile#readLine を使っただけか。
RandomAccessFile#readLine は Javadoc の説明によれば文字コードをまったく考慮しないようだから、ちゃんと文字コードの変換を通すようにしないと。
たぶん Channels#newReader を使うのが簡単っぽい。
RandomAccessFile ras = ......... ;
BufferedReader reader = new BufferedReader(Channels.newReader(ras.getChannel(), "Shift_JIS"));
シークしたときは Reader を作り直すことと、
多バイト文字の途中の位置にシークしてしまった場合は正しく読めないから、そういうことが起きないように気をつけること。
48 :
41:2007/08/29(水) 19:02:38
>>47 Readerは作り直さないといけないんですね。
Cで言う所の
in = fopen("foo.txt", "r");
fseek(in, 0L, SEEK_SET);
str = fgets(in);
みたいな感じを実現したかったんですが。
めげずに頑張ります。
ありがとうございました。
だって BufferedReader は名前の通りバッファリングしてるから。
ras を seek しても過去にバッファしたデータを読んでたら意味ないでしょ。
単に使い勝手の問題なら、BufferedReader と RandomAccessFile をセットに持つ新しいクラスを作れば?
シンプルに getByteと new String(bytes, codeSet) 使えば?
51 :
デフォルトの名無しさん:2007/08/29(水) 22:43:10
htmlでタグにはさまれてる値を取得したいのですが、
どうやるのが、一般的ですか?
正規表現?パーサ?
タグにはさまれてる値ってなによ
53 :
デフォルトの名無しさん:2007/08/29(水) 22:48:33
例えば、
<td>hoge</td>
のhoge
td 限定でいいんだったら正規表現でお手軽に <td>(.*)</td> とかでいいんじゃない
55 :
デフォルトの名無しさん:2007/08/29(水) 22:59:35
正規表現か。
ソース読むとき、正規表現で??って一瞬止まってしまうという。。
要するに苦手なわけだが。
xmlの解析を勉強してみるといい。
htmlは緩いから逆に難しい。
正規表現を覚える方が楽だけどな
57 :
デフォルトの名無しさん:2007/08/29(水) 23:10:00
助言お願いします。JSPで会員専用ページ(member_page.jsp)とログインページ(login.jsp)を作りました。
ログインページでクッキーを
Cookie cookie = new Cookie("key",key.toString());
cookie.setMaxAge(60*60*24*365);
response.addCookie(cookie);
のようにして、認証コードを埋め込もうとしているのですが、その直後、
pageContext.forward("member_page.jsp");
として会員ページに転送し、member_page.jspでは早速そのキーをクッキーより読み込む仕様にしていますが、
クッキーがこの時点で書き込まれていないようなのです。
なんとか、クッキーだけでもlogin.jspの段階で送信させてしまうことは出来ませんでしょうか?
正規表現でエンティティとかパラメタエンティティの展開ってどうやんの?
普通、再帰的に定義されてるはずだが。
用途限定なら小型のパーサ書いた方が早いと思うのはブラウザをパーサから実装できる人間の発想か?
HTMLParserっていくつかあるぞ。それ使えば早いんじゃない?
59 :
デフォルトの名無しさん:2007/08/29(水) 23:27:52
多次元配列をたくさん扱うプログラムを書いていたのですが
OutOfMemoryErrorとなってしまいます。
そのため処理の途中で使わなくなってしまった配列を消すことで
このエラーを回避しようとしているのですが多次元配列の削除の仕方がわかりません
教えてください
またOutOfMemoryErrorを回避するもっといい方法があれば教えてください
よろしくお願いします
null を代入してその配列をどこからも見えなくすれば消える
たくさんの程度によるけど、デフォルトではたしかヒープの最大が 64MB なので、同時使用量がそれを超えるようなら、ヒープを増やすしかない
ヒープを増やす場合は java コマンドでクラス名の前に -Xmx○○○m オプションを付ける (○○○はメガバイト数)
>>59 int[][] a;
....
.........
a[5] = null
>>59 OutOfMemoryErrorが発生するという事は、相当酷いコードだろうな。
悪い事は言わないから、レビューしてもらえ。
>多次元配列をたくさん扱う
>使わなくなってしまった配列を消す
つまり、可変リストを使えという事だ
>>59 >またOutOfMemoryErrorを回避するもっといい方法があれば教えてください
メモリを積む
nullぶちこんでもgcは思った以上に気まぐれ屋さんなのでデータ構造やロジック見直し推奨。
それでも駄目な場合はヒープサイズ増やす。
>>65 ハード増強で解決できるなら変にソフトいじられて最悪の事態を招くより断然良い
・ヒープやスレッドスタックサイズ周りの問題だったらメモリ増強しても意味なし
・メモリ増やしてうれしいのはガベージコレクションの発生頻度が下がって少し早くなる
でおk?
>>67 すごい奴来たな。512MB-->2GBが意味ないらしいw
お前は一生10年前のハイスペックマシン使ってろや
69 :
59:2007/08/30(木) 04:24:25
みなさんアドバイスありがとうございます.
>>60の方のヒープを増やす方法をとりたいと思います.
僕は普段netbeansを利用してソースを書いているので
その辺について少し調べてみたのですが,netbeans.confの6行目くらいにある
netbeans_default_options="-J-Xms32m -J-Xmx128m -J-XX:PermSize=32m
-J-XX:MaxPermSize=160m -J-ea -J-Dapple.laf.useScreenMenuBar=true"
というところを変更すればいいということまでわかりました
PCの物理メモリが2Gですので、ためしに
-J-Xms32m → -J-Xms512m
-J-Xmx128m → -J-Xmx512m
のように変更してみたのですがまったく効果が感じられません
どこかまだ不十分なところがあるのでしょうか?
たびたびすみませんがよろしくお願いします
普段の俺なら釣られていたが今日は流石にスクールデイズが傑作すぎたw
javaコマンドの -Xms -Xmxだよ。あれがjavaヒープサイズの制御。
オブジェクトの割当てだけなら関係ないが、もしJNI使ってたらもしかしたらそっちがネイティブメモリ食ってるかも知れんが、その場合はVMの実装次第だな。
IDEからなら↑の引数をアプリケーションの起動に使うVMに渡す設定をするところがあるはず。
netbeansは知らんが。
>>69 人の話聞いてるか?
配列やめて書き直せ、ヒープサイズでどうこうしても512MBも指定してどうにもならんような糞コード書くな
これだから配列は・・・
ImageIconクラスのオブジェクト、生成時にサイズを指定することはできますか?
若しくは配置するコンポーネントのサイズに合わせて拡大縮小する方法を教えてください。
配列ってヒープなの?
59はコンパイル時の環境のヒープを間違って増やしてるんだろうな
実行時に効果が感じられないのも無理はない
>>73 生成されている元サイズのImageIconからgetImageでImageを取って、
getScaledInstanceでサイズ変更したImageをsetImageで設定したImageIconを使えばいいんじゃないの?
77 :
デフォルトの名無しさん:2007/08/30(木) 07:53:54
JavaでJavaScriptのようなクリッカブルマップを作ることはできますか?
78 :
76:2007/08/30(木) 07:58:26
ImageIcon icon = ...;
icon.setImage(icon.getImage()....
みたく元サイズのImageIconのImageを上書きするイメージでsetImageって言ったけど、
リサイズ後のImageを使ってnew ImageIcon(Image)で新たに生成してもいいと思う。
79 :
73:2007/08/30(木) 08:04:46
上書きの方法で問題なく出来ました。
素早い回答ありがとうございました。
>>57 JSPとかServletとか昔ちょこっとだけしかやってないんで間違ってるかもしれんが、
Cookie じゃなくて session オブジェクトに認証コード登録するんじゃ
だめなのか?
>>77 JFreeChartの中にそういう機能があった希ガス
>>68 釣りだと思うが、OutOfMemoryには本当に意味が無いから。
>>74 では、ヒープとは何ですか?
>>82 SunのJVMとIBMのJVMではそのへんの仕様が違うのはご存知?
クリカッブルマップはHTMLなんだが。
クリスマスカップルに見えた
クリッカブルマップです…clickable (= click + able)
typoです。本当にありがとうございました。
空気の読めない奴だ
船頭が多いなぁ( ´ー`)y−~~
>>82 OutOfMemoryは、ヒープから割り当てを取ろうとして発生する
なので、メモリを積んだだけで解決しないというのは一理ある。
ヒープのサイズが変更されなくては解決しないからだ。
ここであれてる原因は、「何故意味が無いか」を全く語っていない点
-XX:+AggressiveHeapを使っているのであれば、メモリ増設は即ヒープサイズの余裕につながり
こういう状況においてはメモリ増設は意味を持つと言える。
ただしどちらも言葉にしていない前提があってのこと。
質問者はそののち、Netbeansを起動しているJVM内で自プログラムを実行していると
錯誤していることが分かった。
>>69 この場合、Netbeansの起動オプションを変更していなければヒープサイズの最大は変わらない。
なので、
>>69 の対応は他の回答者に比べて至極真っ当。
問題は、Netbeansが実行時に他JVMを起動していること。
NetbeansのJVMのサイズは関係がない。 なので
>>71,75の回答が正解。
プロジェクトのプロパティの実行設定で実行時オプションを与えることができる。
>>72 実際何をしているコードか知りたいのはあるが配列=糞かどうかは何とも言えない。
アプリケーションによってはGB単位のオンメモリテーブルを確保しておいて
効率を上げるということもありうるから。その場合、シンプルな操作が要されるだけなので
多機能なオブジェクトとして管理せず配列で管理するという選択もありではあると思う。
Windows上のSwingで画面を作っています。
チルトホイールマウスを使って、横スクロールに対応させる方法はあるでしょうか?
試してみたところ、SWTは標準で対応しているようですが、Swingは標準では対応
していないようです。
SWTが標準で対応しているんじゃなくて、対応しているシステム上のSWTで使えるというべき。
Macじゃ、MightMouseでのJTable横スクロールはJaveSE6(まだDP版)で動くの確認したよ。
今手元に、TrackPointしかないから、Windows版はどうなるかは分からないなぁ。
>>90 そこまで考えて設計した奴ならば、OutOfMemoryの対策くらいできるだろw
>>95 いや、数学演算だったり、物理演算だったりすると
言語や実行環境には詳しくなくても複雑なロジックを実装したりする人がいるんだな、これが。
大量の多次元配列って聞いてそういう学生を思い出したから。
単に再帰の深さが深すぎるんだろ
んで毎回配列を作る場合とか
>>97 何か二人だけなきがするが・・・・
再帰が深ければOutOfMemoryじゃなくてStackOverfflownが起こってると思うんだ。
というか、OutOfMemoryを知らないで再帰のロジックが書ける人は少ないと思う。
スタックには参照はつむけど実体はヒープにあるんじゃないの?
ヒープに詰まれるかはコードとVM次第だな
そんな事を意識しなくてはならない事が問題だが
eclipseで言えば、自分のプログラムをeclipse経由で実行するときにvmargsを設定できる。
それは、上のほうで言ってた引数が使えるですので、サイズを変更するといいと思う。
この間入ったプロジェクトじゃ対したアプリケーションでもないくせに、ヒープが1Gに設定されていてワロタ
適当に配列とか無駄な参照とか殺したら64MBでもサクサクと動いた。
意外と多いんじゃない、極端ではないにせよこの手の経験。
Javaの配列の実体はHeapだろ?
C#じゃないんだから
105 :
59:2007/08/30(木) 22:52:52
皆さんありがとうございます
>>90の方のとおりにやったところOutOfMemoryErrorは回避できました
Collections.synchronizedListってどういうときに使うんですか?
これを使ってもIteratorでまわすときはsynchronizedでくくる必要があるんですよね?
>>106 丸々答えが書いてあるので、
>>1 としたいところ。
少なくても1.5ではそう書いてあった。
同期が必要な時って書いてあるだろ?
Iteratorはそのリストの返すIterator次第
1.5以降はConcurrentMap使え
>>106 マルチスレッドを勉強したら自ずと分かってくるはず。
synchronizedの意味と、スレッド間で何を、どういう単位で守るかの意味が分かればね。
Collections#synchronizedXxx なんて使わないよ、実質意味ないもん
>>109 勉強したんです。
synchronizedでくくってたらCollections.synchronizedListなんていらないと思いました。
>>111 synchronizedを使うかCollections.synchronizedListを使うかは時と場合によtって使い分ける。
例えば、あまりよくない例だが、Listの参照をオブジェクトの外に出すのであればsynchronizedでくくれとドキュメントに記述して守らせるよりも、synchronizedListとした方がいい。
だが、それよりもListは配列や不変Listにして参照を返すのが定石だが・・・この辺はマルチスレッドを学んでいくと色々と解ると思う
>>110 意味はある。
例えば、
private final List<String> list = Collections.synchronizedList(略);
public void add(String str) {
list.add(str);
}
はスレッドセーフ。
ところが・・・
public void addIfAbsent(String str) {
if(list.contains(str) == false) {
list.add(str);
}
}
はアウト
private final List<String> list = new ArrayList();
public void add(String str) {
synchronized {
list.add(str);
}
}
これでいいんでしょ?
Collections.synchronizedListなんて必要ありませんよね?
よくない
× synchronized {
○ synchronized (list) {
>>115 それはミスっただけです。
でも、この書き方があれば Collections.synchronizedListなんて必要ないですよね?
>>116 誰かが忘れるかもね。
複数人で書いている時とか、
安全性を重視してパフォーマンスは落ちても
スレッドセーフな実装のインスタンスを
返してあげることに意味があることはある。
>>116 Object ock = new Object(); l
synchronized (lock)
コレクションの処理
}
同期については全てこれで事足ります。
異論があったらかかってきなさい。
>>114 うん、必要ない。
だが、それを言うのであれば
private final List<String> list = new ArrayList();
public synchronized void add(String str) {
list.add(str);
}
でもいいし、
private final List<String> list = new ArrayList();
private final Object obj;
public void add(String str) {
synchronized(obj) {
list.add(str);
}
}
でもいいし、
private final List<String> list = new ArrayList();
private final Lock lock;
public void add(String str) {
lock.lock();
try {
list.add(str);
} finally {
lock.unlock();
}
}
でもいい。
実装方法が複数あることに問題ある?
>>119 その中のどれが一番効率いいのかね?
俺なら真ん中かな。
>>118 別のクラスから同期とろうとしたらそのObject型のlockをそこまでもっていくのか?
122 :
119:2007/08/31(金) 00:05:31
add程度じゃ差はでないだろうね
処理が複雑になってくれば来るほど、ロックオブジェクトを使う方が解りやすく柔軟性が高くなる。
waitが絡んでくると、LockとConditionを使う方が楽。
並行処理考える時は原則として効率度外視の可読性重視だよ。
>>121 別のクラスで同期処理をさせるという事が設計ミス。
リストを管理しているクラスが必要な処理を全て同期させて内包する事が重要。
そういう意味ではCollections.synchronizedListは実は設計ミス
セキュリティポリシーファイルに関して質問です。
一般的な解説であればVMの起動引数でポリシーファイルを指定すると思いますが、製品としてリリースするような場合は起動時に自動的に設定するものなのでしょうか?
それとも通常通り(?)VM起動引数に設定?
私は同期ラップ賛成派です。やりたいことが決まってるのに、
実装ミスを犯す可能性を作る必要性が私には見つけられない。
ま、質問相談スレなので、それらしいことをしないと。
いろいろ議論してる人々は、synchronizedList の戻ってくる
Listを実装したラップクラスのソースは見てるのかしら。特に
>>114 さん。
中でやってることは一緒なのですが…
俺はシングルスレッド派w
マルチスレッドを注意深く意識する実装なんて数年に1回程度
最近はマルチコアが流行り出してるからそうも言ってられないかもしれない
という話はよく聞くんだが、フレームワークでも作るのでなければという感じはある
Servletもそうだけど、マルチスレッドで動いているけど作る部分は原則としてシングルスレッドで作るってケースが多い
でも、Servletがマルチスレッドで動いていることを忘れているコードもよく見かける。
しかも、排他処理のコードも微妙に間違ってたりするし。
ぱっと見でおかしいことはわかるし、直すのも簡単なんだが、
どこがどう間違っているのかを説明するのが大変なんだよなぁ。
向上心のある奴でない限りはマルチスレッドと言えば、ThreadとRunnableとsynchronized程度をなんとなく知っている程度だろうからな。
俺が言おうとしたことはすべて
>>90が言ってくれた
>>126は逆にSwingのEDTで凡ミスしそうだな。
SwingのEDTの存在を忘れてるコードをよく見る。
>>132 そういう奴はSwingがシングルスレッドモデルという事すら知らないのでは?
>>133 まあ、ちょっとやそっとじゃ表面的な問題しか浮彫りにならないからね。
それよりかは比較的、重量と軽量のコンポーネント混ぜたときの方が困りやすい。
どっちが危険かは前者だけど、発覚しやすいのは後者だからねぇ。
135 :
デフォルトの名無しさん:2007/08/31(金) 10:54:13
スレッドを使わずに
メッセージダイアログを一定時間表示することはできますか。
スレッドを使わなければ何も出来ません
139 :
デフォルトの名無しさん:2007/08/31(金) 13:20:44
printlnで、文字列リテラル「”」を表示する方法ってありますか?
シングルを2つ表示「’’」意外でお願いします。
>>139 " を表示したいなら println("\"")
141 :
デフォルトの名無しさん:2007/08/31(金) 13:52:50
どなたか助けてください。
今までJava CPadという簡易エディターを使ってたんですが、今日からEclipseに乗り換えました。
そしてサーブレットを作ろうとしたら「javax.servletは存在しません」と言われました。
環境変数の問題だった事にすぐ気がついて環境変数の設定を行ったんですが依然として同じコンパイルエラーが。
おかしいと思いJava Cpadのエディターの方でコンパイルしてみたら、こちらでは問題なくjavax.servletを認識してくれてコンパイルが成功しました。
Eclipseの設定の問題なのか、もしくは別に問題があるのか、どなたか御意見をお聞かせください。
>>141 Eclipseの設定の問題だって自分で言ってるのは何なんだよw
>>141 > google.co.jp eclipse servlet javax.servlet
>>141 パッケージエクスプローラから対象のプロジェクトを選ぶ。
右クリック→プロパティ→Javaのビルドパス→「ライブラリー」のタブを選択
→「JARの追加」もしくは「外部JARの追加」でservlet.jarを追加する。
java3Dはclassファイルとhtmlファイルだけで出来ますか?
146 :
デフォルトの名無しさん:2007/08/31(金) 14:56:06
ソースコードを保存しようとしたとき
クラス名.java で登録しても
クラス名しかメモ帳には指示されない・・・
>>145 実行環境のJREとブラウザ、それとjava3dの実装ライブラリが必要。
というか、ちょっとやりたいことが分からない。
やりたいことを書けば資料へのポインタが出てくる気がするぞ。
>>146 保存時にファイル名に"hogehoge.java"のように"で囲えばhogehoge.javaで保存される。
余計なhogehoge.java..txtのような拡張子も付かない。
って話ではないのか?
149 :
デフォルトの名無しさん:2007/08/31(金) 15:18:59
>>148 返答どうも
やってみましたが さっきのままです・・・
>>146 ファイル名に「クラス名.java」と入れて保存ボタンを押しても
メモ帳(=notepad.exe?)のタイトルに「クラス名」としか表示されない
ってことなのかな?
OSやらアプリやらの環境が違うのかね…
>>149 話が見えないんだが、
エクスプローラの「登録されている拡張子は表示しない」オプションの設定に関わる問題?
なんにしてもJavaについての質問じゃなくて
メモ帳とやらのアプリケーションの使い方に関する質問っぽいな
153 :
デフォルトの名無しさん:2007/08/31(金) 15:43:06
サーブレットで生成した入力フォームに入力した内容を別のサーブレットで受け取ることはできないのでしょうか?
現在、HTMLで作った入力フォームに入力した内容をサーブレットで受け取ることはできています。
受け取ったサーブレットの中で、別のサーブレットのURLに
POSTすればいいんではないかと思います。
155 :
デフォルトの名無しさん:2007/08/31(金) 16:00:58
>>154 empno = Integer.parseInt(request.getParameter("empno"));
のように、情報を取得したいのですが、うまく受け取ることができません。
nullになってしまいます。
156 :
デフォルトの名無しさん:2007/08/31(金) 16:43:58
>>155 解決しました。
formの位置がおかしく、データが渡されていなかったようです。
メモ帳を使うなってお告げじゃね?
158 :
デフォルトの名無しさん:2007/08/31(金) 19:04:43
>>151 登録されている拡張子は表示しないにチェックが入ってましたorz
解決できました。
返答ありでした
お前ら、
>>146から補完して回答出すなんてすごいな。
鍛えてますから。
161 :
デフォルトの名無しさん:2007/09/01(土) 03:06:45
「シンボルが見つかりません」コンパイルエラーがインスタンス生成用の別クラスの名前を指してるんです。
ClassA inst = ClassA();
^
ClassA inst = ClassA();
^
って感じで。でもクラスファイルは同じフォルダに入れてるし、パッケージは設定してないし…… さっぱりです。
一応パッケージに収納してやってみたけどそれも無理でした。ちなみにツールは使ってません。
誰かわかりますか?
new
ClassA inst = 乳 ClassA();
さっぱりな質問だな
>>161 「インスタンス生成用の別クラス」なんて言われても解らんですよ
mainメソッドが存在するクラスをコンパイルしたら大丈夫…
なんてのは無しですよ
166 :
161:2007/09/01(土) 03:59:45
すみません、説明が下手でした……
public class ClassB {
public static void main(String[] args) {
ClassA inst = new ClassA();
inst.ClassA(10);
}
}
public class ClassA {
ClassA(int n) {
(省略)
}
}
ようはこれでClassBの方をコンパイルしようとすると「ClassA シンボルが見つかりません」っていうコンパイルエラーが出るんです。
ClassAは普通にコンパイルできるんですが、ClassBの方はClassAと同じフォルダに入れても同じパッケージに入れても「シンボルが見つかりません」
っていうエラーが出るっていう訳です。
理由がわかる方いますかね……? 説明下手ですみません。
ClassA inst = new ClassA() はコンストラクタの呼び出し。
ClassA には int 1 個を引数とするコンストラクタしか定義されていないから、
呼び出せない。
次の行は一見メソッド呼び出しに見えるかもしれんが、
コンストラクタを呼ぼうとしているため NG。
存在するインスタンスのコンストラクトを実行する・・・という矛盾。
クラスパス?
とりあえずClassAのインスタンスを作ったあとでClassAの状態をn=10で再設定しようとしたのか。
そういう書き方を思いつくようなら、もう一度、インスタンス生成について勉強した方がいいと思う。
エラーの原因は
>>167の言う通りで、インスタンスの生成はClassA inst = new ClassA(10);ですむ。
public ClassA(){
setHoge(DEFAULT_VALUE);
}
public ClassA(int n){
setHoge(n);
}
public void setHoge(int n){
this.n=n;
}
より良くはこうするべきだな。
いい加減なコード書いても後で大変な目に遭うだけ。
>>170 ClassAの詳細や設計方針が分からないからそうすべきとは限らんよ
そうした場合でも
public ClassA(){
setHoge(DEFAULT_VALUE);
}
は
public ClassA(){
this(DEFAULT_VALUE);
}
の方が良くないか?
setHogeするだけならいいがコンストラクタの中身が複雑になってくると記述の重複が気になる
まあ引数なしと引数ありでやることが違う場合もあるだろうから
ClassAの詳細が分からないことには何とも言えんが
private final Object obj1;
private final Object obj2;
private void test1 () {
synchronized(obj1) {
・・・なんらかの処理
test2();
}
}
private void test2 () {
synchronized(obj2) {
・・・
}
}
この場合、test2();を実行中はtest1は同期されているのでしょうか?
test1 () を呼んだ場合の事だよね?
test1 () 内部でtest2 () を呼んでいる間、obj1は同期されているのでは
>>173 そうなんですね。ありがとうございました。
test1()が数十行になってしまうんで、外出しにしたかったんです。
>>172 synchronizedをネストさせるのはタブーだよ
デッドロックを起こさない為にもロックオブジェクトを無闇に作ってはいかん
同じロックオブジェクトに対する同期化のネストはOKだけど、なるべく少なくするのが正しい。
>>175 private void test2 () {
synchronized(obj1) {
・・・
}
}
こう変更すればOKなんですか?
そもそも外出しにしない方がよいのでしょうか?
すみません、質問ばかりで・・・。
177 :
175:2007/09/01(土) 11:39:55
最初から最後まで同期とっているんだし、これで問題がないんじゃない?
private synchronized void test1 () {
・・・なんらかの処理
test2();
}
private synchronized void test2 () {
}
ちなみに
private void hoge() {
synchronized(this) {
}
}
と
private synchronized void hoge() {
}
とは、ほぼ同質。
JBuilderを使ってSwingアプリを作りました。
テキストラベルなどの文字はWindowsマシン上で最適にしたのですが
Linuxで動かすとフォントサイズが大きくなって、表示されない部分が発生しています。
フォントはDialogなのですが物理フォント(MSゴシック等)にしないのダメなのでしょうか?
>>177 private void test1 () {
・・・おっぱいもみもみの処理
synchronized(obj1) {
・・・なんらかの処理
test2();
}
}
実はおっぱいもみもみの処理もあるんです。
その、おっぱいもみもみの処理は同期させなくてよいのです。
180 :
177:2007/09/01(土) 11:51:22
>>179 >>177 private void test1 () {
・・・おっぱいもみもみの処理
同期化する処理();
}
private synchronized void 同期化する処理() {
・・・なんらかの処理
test2();
}
>>180 なるへそ。さんきゅーべりーまいっちんぐ。
>>178 pack() を使えば最適な大きさにしてくれるでしょ
全部固定配置の固定サイズで作っているならば、実行環境とフォントに依存するのは諦めるしかない
>>178 そのテキストラベルのレイアウトをレイアウトマネージャにまかせずに自分でやってないか?
自分の環境だけで動作させるならそれでも構わないけど、
他環境のことも考えているならその表示の最適化とやらなんてやってはだめだ。
本当に各環境に応じて自前で調整したいなら、環境ごとの表示のパラメータを得て、
それに合わせてフォントや配置を選択することをやらないといけないが、やっていないだろ?
まあWindowsで最適な表示になるようにしたんやからLinuxで最適でなくなるんは至極当たり前の結果やね
185 :
178:2007/09/01(土) 12:15:23
皆様。回答ありがとうございました。
コンポーネントのlayoutをnullにして、各部品の座標位置は自分で指定しました。
グリッドバッグレイアウトでやらなきゃいけなかったってことでしょうか?
いまから修正するのは心が折れそうです。
良くない方法かもしれませんが、文字のサイズがPC環境に依存しなければ
今のところ何とかなりそうなのですが、良い方法はありませんか?
ありません。
nullレイアウトは奨励されないという注意書きを読まなかったあなたの責任です。
Windows専用で割り切るのが一番良い方法です。
下のように2つのフレームを作成し、
一度2つのフレームを見えないようにする。(他のソフトの下に隠れさせて見えないようにする)
そして、test1を可視状態にする。
質問:このときtest2も可視状態するにはどうしたらいいですか?
----------------------------------------------------------------------
import javax.swing.*;
public class Test {
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
}
Test() {
JFrame frame = new JFrame();
frame.setVisible(true);
}
}
起動するFrameは1つにすれば?
表示するコンポーネントを切り替えれば済むじゃん。
189 :
178:2007/09/01(土) 12:55:06
そうですか・・・
こういう場合に、フレームのサイズも固定でやったらダメなんでしょうね。。
やり直します。
>>187 フレームのWindowEventを監視してアクティブになったらもうひとつのフレームも前面に移動
>>178 ダメかどうかは要件によるだろ
Windowsで最低解像度を制限する前提ならば固定サイズでもあり
>>185 レイアウトマネージャを使うように変更するのがそんなに大変なレイアウトなんだろうか?
でも、そんな複雑なレイアウトを各部品の位置とサイズの手動設定でやろうとする方が心が折れそうだ。
JBuilderにはビジュアルにレイアウトマネージャを使ったレイアウトをするコードを吐くツールってないのか?
どんなレイアウトか知らないが、GridBagLayoutだけがレイアウトマネージャじゃないし、
異なるマネージャが設定されたコンテナの組み合わせで全体を構成する方法だってある。
まあ、ありがちな話だが全部のコンポーネントが最上位のフレームに配置されてんだろう。
感覚でレイアウトしているからレイアウトマネージャの存在も知らなかったんだろうね
最近のJBuilderはどうかシランが、以前はかなり糞IDEだった記憶がある
>>188 どうしても2つのフレームを使ってやりたいので・・・
>>190 WindowEventを監視することによりアクティブになったかどうかを判定することが出来るようになりました。
ありがとうございます。
あつかましいことだとは思いますがまだ分からない点がありますのでまた質問させてください。
質問:フレームを前面に移動。(アクティブにする)
toFront()、setAlwaysOnTop(true)を試してみたのですが駄目でした。
実現したい事がさっぱり伝わらない
とりあえず、つ JDesktopPane
>>194 Window#toFrontで前面に出せると思うけど。
toFrontを実行する機会をうまく考えないと二つのフレームのアクティブ取り合戦になるので注意。
やりたいことから少し外れるかもしれないが、
一方のフレームをもう一方のフレームを所有者とするモードレスなJDialogにしてやるのはどう?
これなら、特にイベント監視とかしなくても、二つのフレームが一体となってアクティブ、非アクティブになる。
二つの内容を同じにしたいなら、コンテントのクラスに共通のものを使って、
フレームとダイアログにそれを設定すれば無駄なコードは無くて済む。
import java.awt.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test(test1);
Test test3 = new Test(test2);
Test otherTest1 = new Test();
Test otherTest2 = new Test(otherTest1);
Test otherTest3 = new Test(otherTest1);
}
private Frame frame;
private Dialog dialog;
public Test() {
JFrame frame = new JFrame();
this.frame = frame;
frame.setVisible(true);
}
public Test(Test test) {
JDialog dialog = test.frame != null ? new JDialog(test.frame) : new JDialog(test.dialog);
this.dialog = dialog;
dialog.setVisible(true);
}
}
アクティブウィンドウに「Ctrl + Alt + Delete」のようなキーコードを
送信する方法を教えてもらえますか?
WSHのSendkeysを使うみたいな、Javaから外部アプリ起動する
以外の方法が知りたいです。
続きは日本語で
>>198 無理。そもそも Java には IPC が無い。自分以外のアクティブウィンドウを
取得する方法も無い。
>>201 AWT/Swingで可能なレベルはどの程度かは把握してるか?
3Dバリバリは無理だが、円の描画とか簡単にできるし、Swingとアニメーションでぐぐればいくらでもサンプルはある。
もし、その手のをやってないならば、3dに手を出す前に基礎からやるべき
205 :
デフォルトの名無しさん:2007/09/02(日) 12:43:16
class Test {
public static void main(String args[]) {
String str;
int i;
for(str="abcdef",i=str.length(); i<10; i++) {
System.out.println(i);
}
}
}
↑のソースで質問なんですけど、これでコンパイルと実行が通るのですが
for文の最初にカンマが付いてもよい理由が分かりません。本やネットで検索しても
書かれていませんでした。
あと、int i; と外にループ変数を宣言していますが、for文の中に書くとエラーになります。
この理由もどなたか知っていたら教えてくださいm(_ _)m
>>205 理由は「そうういう記述方法が許されている」から。
forの宣言部分で変数を宣言する場合は、同じ型の変数ならば複数宣言も可能。
だけど、そんな書き方したら読みにくいので書かないのが正しい。
String str = "abcdef";
for(int i =0, i=str.length(); i<10; i++) {
System.out.println(i);
}
と書くほうが自然だろ?
自然と思うならば、そんな書き方忘れた方がいい
訂正(本当に読みにくい・・)
String str = "abcdef";
for(int i = str.length(); i<10; i++) {
System.out.println(i);
}
>>205 for ( A; B; C) { }
各A, B, Cには文が入る
式はカンマで区切って並べることで全体がひとつの文になる
カンマで区切られるのは文ではなく式なので宣言文はダメ
209 :
205:2007/09/02(日) 13:00:11
>>204,205,206
レスありがとうございます!
式ならカンマで並べてもいいってことですか。
勉強になりましたm(_ _)m
210 :
205:2007/09/02(日) 13:01:09
すいません
javaでmidiやwavファイルを使って音を鳴らそうとしているのですが、
音量をどうやったら変更できるのかわかりません。
どうやったら音量を変更できるのですか?
・midi → コントロールチェンジのボリューム値をいじくる
・wave → 波形を書き換えて振幅を調節する
あるいは
・ミキサーで各ラインのボリュームをいじる
それか
・OSのコントロールパネルやシステム環境設定でユーザに調節してもらう
midiはシンセサイザーでMidiChannelを取得してfor文で
メインボリュームの値を変えていますが後で取得すると127になってます。
なにがおかしいのでしょうか?
midiはシンセサイザーでMidiChannelを取得してfor文で
メインボリュームの値を変えていますが後で取得すると127になってます。
なにがおかしいのでしょうか?
普通 MIDI ファイルには、各チャンネルのボリュームやらパンやらを設定するためのコントロールチェンジが入ってるから、それを再生したときにボリュームが変更されたんでしょ
送信される MIDI メッセージを見て、コントロールチェンジのボリュームの値を書き換えないとだめ
217 :
デフォルトの名無しさん:2007/09/02(日) 19:00:10
import java.io.*;
class Sample1
{
public static void main(String args[]) throws IOException
{
System.out.println("円周率はいくらですか?");
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String str1 = br.readLine();
float num1 = Integer.parseInt(str1);
System.out.println("円周率の値は" + num1 + "です。");
}
}
↑のソース、どこが間違ってるか教えてください
import java.io.*;
class aaa{
public static void main(String args[])throws IOException{
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("整数を入力してください。");
int num = Integer.parseInt(br.readLine());
char hantei = (num%2 ==0) ? "偶数" :"奇数";
System.out.println(num + "は"+hantei+"です");
}}
をコンパイルすると
aaa.java:11:互換性のない型
検出値 :java.lang.String
期待値 :char
char hantei = (num%2 ==0) ? "偶数" :"奇数";
というエラーが表示されます
初心者でなぜだかわかりません。教えてください
なぜInteger
なぜchar
221 :
デフォルトの名無しさん:2007/09/02(日) 19:07:40
自己解決しました
223 :
218:2007/09/02(日) 19:13:11
218です
ありがとうございます
charをStringに変えたらコンパイルできました
Cやってた人?
Cをやっていた人ならchar hantei[]って書くべきです。
間違うにしてもきっちりと間違ってください。
間違えるなら
char *hantei = (num%2 ==0) ? "偶数" :"奇数";
かね?
ともかく、まともな入門書を1冊購入した方がいい、うん
import java.io.*;
class Sample3
{
public static void main(String args[])
{
System.out.println("整数を2つ入力してください。");
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String str1 = br.readLine();
String str2 = br.readLine();
int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
System.out.println("足し算の結果は" + (num1+num2) + "です。");
}
}
例外 スローするにはキャッチまたは、スロー宣言をしなければなりません
と、でるんですけど どうしたらいいんですか
自分で解決できました
しょうもない質問すいませんでした
何でも聞こうとするなよ。
皆さん、入門書何使ってますか?
以下のようにコマンドラインでプログラムの起動停止を行いたいと考えてます。
java ThreadProgram -run
java ThreadProgram -shutdown
データベースやテキストファイルでステータスを持ってて、その値が変更されたら
プログラムを終了するという処理方法だと実現できるのですが、
ディスク上の値を毎回監視していないといけませんよね。
他の方法で何か上手いやり方ってありますでしょうか?
>>233 異なるVMの間で通信を行うのであれば、RMIとかSocketで繋ぐのが早い
だが、コマンドラインから実行しなくてはならない理由はあるか?
一番手っ取り早いのは、java ThreadProgram で起動したら、起動と停止の2つのボタンがあるGUIを表示してしまう事かと思われ
停止ボタンだけで充分か。
ログなどを標準出力に出さないならば、標準入力で停止を受け付けるのもあり
236 :
233:2007/09/02(日) 23:37:45
ありがとうございます。
Socketを使って起動停止を指示する方法は思いつきませんでした。
Guiは使わない予定でして、
コマンドラインから実行して、
プログラムが終了するまでコマンドプロンプトが起動しっぱなしというのではなく、
バックグラウンドで動いているようなイメージをしてるのです。(ログはファイルに落とす)
そういったプログラムってあんまりないんですかね?
237 :
まきの:2007/09/02(日) 23:40:00
カプセル化に関して。
今回課題で、日付クラスを作成してるんですが、DATEクラスなどを用いないで作成するとの事で、できません。
誰か教えてください。
>>236 Java単体で実現しようとすると難しいんじゃないかな?
exeを用意したほうが簡単に実現できるだろうね
>>237 よく解らんけど、フィールドに、年・月・日をint型かなにかで持てばいいんじゃね?
課題とやらの制限がよく解らんが、丸投げでないならばもう少し意味が解るように説明汁
>>237 カプセル化についての課題なんだから
日付情報を保持するプライベートフィールドとそのパブリックなアクセサを作れば良いだけだろ
>>236 そういったプロフラムは腐るほどあります。
というか世の中でお仕事で皆さんが作っているのはそんな奴です。
Windowsならjavaw.exeで起動してください。
Unix系なら java 〜〜〜 & で。
public static void main(String args[])
ここはスルーですか
>>245 C流儀のString args[]に突っ込みたいんじゃないのかね?
最近は随分減ったけど入門ドキュメントでもこの書き方は結構見かけるね
248 :
デフォルトの名無しさん:2007/09/03(月) 13:50:25
初心者の高校生ですが、GREPプログラム等のフリーソースを作れるように
なるまで何年ぐらいかかりますか?
あと、「これが出来たら凄い」といった、自分の技能の目安になるものは
存在するのでしょうか?
Vスタとかエクリプスとか作っている人たちが、どれだけ凄いのかを
理解したいです。
>>248 まず手を動かす人ならコンピュータに触った事ないところからでも 1年もあればできる。
手を動かさない人は一生かかってもできない。
|-`).。oO(・・・・・・・高校生・・・若いのか・・・近頃だと既に若くもないのか・・・・
GREPを実現するといっても
人によって、いつまでたっても書けない人と、1ヶ月くらいで書けるようになるひとがいます。
ある程度、経験を積んでいれば数10分で書けるかもしれません。
まあ目安はないです。
でもeclipseを一人で作ったとしたらとてつもなく凄いとは思います。
評価とは後から来るものでこれをしたから偉い、という基準はありません。
むしろ今ない何かが「出来る」、「作れる」という事が凄いことになります。
ちなみにVスタというのはVisualStudioではないかと思いますが
Javaで作ったとしたらこれまた凄いことだと思います。
まあ何より大事なのは手を動かしてものを作ると言うことです。
若いウチにやっとかないと年を取ると経験になる「無駄」が出来なくなってしまうので。
grepは正規表現の処理が肝だが、
そこはjava.util.regexパッケージで何とかなるから
あんまりいい例じゃないな。
逆に、ライブラリを使いこなせるという意味で適例かもしれないが。
すごさを理解したいのなら、漠然に「すごい」と理解しておけ。
野球少年が、メジャーリーガーを「スゲー!」と理解するように。
それ以上の理解は、キミには多分無理。
正規表現ライブラリまで含めて自作するって話じゃねーの?
java.util.regex 使うんだったら中高生の腕試しには簡単すぎじゃね?
253 :
デフォルトの名無しさん:2007/09/03(月) 15:56:12
Javaを発音するときアクセントは平坦でしょうか?それともJaにアクセントが来ますか?
255 :
デフォルトの名無しさん:2007/09/03(月) 16:03:02
javaを学び始めて1週間もすれば、そこそこ動くアプリ程度は出来るのが普通
:.,' . : : ; .::i'メ、,_ i.::l ';:.: l '、:.:::! l::! : :'、:i'、: : !, : : : : : :l:.'、: :
'! ,' . : i .;'l;' _,,ニ';、,iソ '; :l ,';.::! i:.! : '、!:';:. :!:. : : : :.; i : :'、:
i:.i、: :。:!.i.:',r'゙,rf"`'iミ,`'' ゙ ';.i `N,_i;i___,,_,'、-';‐l'i'':':':':‐!: i : : '、
i:.!:'、: :.:!l :'゙ i゙:;i{igil};:;l' ヾ! 'i : l',r',テr'‐ミ;‐ミ';i:'i::. : i i i : : :i
:!!゚:i.'、o:'、 ゙、::゙''".::ノ i゙:;:li,__,ノ;:'.、'、 :'i:::. i. !! : : !:
.' :,'. :゙>;::'、⊂‐ニ;;'´ '、';{|llll!: :;ノ ! : !::i. : : : : i :
: :,' /. :iヾ、 ` 、._. ミ;;--‐'´. /.:i;!o: : : :i :
: ; : ,' : : i.: <_ ` ' ' ``'‐⊃./. :,: : : O: i. :見習え!!
: i ,'. . : :', 、,,_ ,.:': ,r'. : , : : !: :パソコン初心者が
:,'/. : : . :;::'、 ゙|llllllllllllF':-.、 ,r';、r': . : :,i. : ;i : :数日でCまで覚えて
i,': : : :.::;.'.:::;`、 |llllH". : : : :`、 ,rシイ...: : ; : :/:i : i:!::i:ゲームをクラックした
;'. : :..:::;':::::;':::::`.、 |ソ/. : : : : : : ;,! ,/'゙. /.:::: :,:': :./',:!: j:;:i;!;長門を見習え!!
i. : .:::;:'i::::;':::::::::i::`:.、;゙、';‐ 、,;__;,/ノ . :,/.:::: :/. : :/.:::i. j:;;;;;;;;
l .:::;:'::;':::;':::::::::::i::::i::`:,`'-二'‐-‐''゙_,、-.':゙/.:::: ;ィ': : :/.:::::i: j、;;;;;;;
.:::;:':::;':::;'::::::::::::::i:::i:::::..`'‐、、、-<゙.::::::::/.::: ://. : /.:::::::i :j::.'、:;;;
>>202 やはり基礎をやらないと駄目ですよね…
プログラミングやったことない、基礎すらやらせずいきなり
「卒研はjavaで3Dやりなさい」という先生ってorz
>>257 いや、4年生なら基礎は出来てるという前提だろうし
それ以前の学年なら十分時間があるだろう
授業寝て、宿題スレで課題作ってたのでなければ。
先生、極めて普通です。
>>257 4年かんサボってりゃ無理だろ
ほら、最近流行の代行に頼めば?
1ステップ10円程度でやってくれるんじゃねwww
dbにclob型で格納されているテキストを取得したいのですが、
getAsciiStreamメソッドでもgetCharacterStreamでも
「あああ」という文字列が「BBB」と文字化けしてしまいます。
文字化けを回避するにはどうすればいいのでしょうか
>>260 charAt(0)とcharAt(1)は、16進でいくつ?
>>260 getAsciiStreamメソッドで得たバイト列 b を
new String(b, "UTF-16")
new String(b, "UTF-16BE")
みたいにしたら表示されたとかいうオチなら笑えるんだが。
そんな程度のオチだろうな
結局解決出来なかった
エスパーじゃないんだから、コード出せよ
動画のRGB比の変化をとってきたいのですがJAVAでできますか?
そんなプログラムのソースとかもしあるようでしたら教えてください。
卒論30万とかwwwwいいバイトになるなwwww
Java Web StartのPersistenceServiceをローカルで実行するには
どうすればいいんでしょう。JUnitとデバッグのためにぜひ
必要です。
なにもせずServiceManager.lookupするとUnavailableServiceExceptionで
コケます。
270 :
デフォルトの名無しさん:2007/09/04(火) 06:38:24
文字列を頭から一字ごとに文字列解析してStringに切り出していくのに適したクラスありますか?
CVSファイル(表)をインポートしたいのですが、ただコンマでsplitしただけでは、
フィールド中でダブルクォーテーションで囲まれたコンマや改行でうまくいかないので。
そのうえダブルクォーテーション自体もそれ自体エスケープしてフィールド中に含め得るようで、
なんか複雑なんで、こつこつ頭から一字一句読んでいって、切りだしていきたいのですが。
String中の1文字って必ずしも1つのインデックスに対応しないんですね。
ならばインデックス単位ではなく1文字単位で、イテレータのようなものをつかって
頭から走査していきたいのですが。
271 :
270:2007/09/04(火) 06:40:45
CVSじゃなくてCSVでした。失礼しました
java csvでググればいいじゃん
273 :
デフォルトの名無しさん:2007/09/04(火) 07:36:01
プロセスが違えばセッション情報は使えないのですか?
例えば、Aというプロセスでセッションに格納した情報をBというプロセスで使いたいのです。
>>273 シリアライズしてRMI通信かソケット通信かHTTP通信かファイルI/Oを介して
データのやり取りをすれば?
>>267 Java Media Framework ってのが Sun から提供されているから、それ使ってみろ。
動画の形式にもよるが、MPEG-1, QT, H.261, H.263が対応って書いてあるから
大丈夫だろ。
1フレームごとにキャプチャして RGB 成分に分解すればあとはできるだろ。
>>269 例外をキャッチしたら、自前で実装したPersistenceServiceを返せば
いいんじゃねぇの?ローカルなんだから適当にフォルダきめうちして
そこに書き込むようにしてさ。
test
279 :
270:2007/09/04(火) 09:19:31
>>272 CSVTokenizerというライブラリがヒットしましたが、
どうやらフィールド中の改行には対応していないようです。
java.utilScannerなんか、いかにもそれっぽい名前なのに
何だか違うみたいです。
>>279 CSVは仕様自体が簡単そうにみえて思ったよりも面倒なんで、標準の文字列解析ライブラリ
だと難しいと思う。
例えば、ダブルクォーテーションやカンマの意味について、現れる場所によって
異なる解釈をしなければならないのが原因。
ただ世間にはCSVのライブラリはあふれているので、検索してそれを使うなり、
参考にするなりしてみれば?
282 :
デフォルトの名無しさん:2007/09/04(火) 11:26:20
某サイトにて、Javaの1.4.2-15が使用されています。
そこでデータ検索し、表示されたデータを印刷する場合は
表示された印刷ボタンを押す仕組みになっているのですが(普通には印刷不可)
その印刷ボタンを押すと、必ずA4縦・余白が25.4ミリになります。
IEでページ設定の初期値を変えても
このサイトの印刷に関しては毎回この数値になっていまい
いちいち変えるのがとても面倒です。
何とか、このサイトでの印刷時も
サイズや向きや余白を、自分の好みで固定できないでしょうか?
このスレにふさわしくない質問の場合は申し訳ありません。
>>279 つ
ttp://opencsv.sourceforge.net/ What features does opencsv support?
opencsv supports all the basic csv-type things you're likely to want to do:
* Handling quoted entries with embedded carriage returns (ie entries that span multiple lines)
jpeg画像を読み込んで表示させるプログラムを作成しています。
ボタンを押して、JFileChooserを呼び出して、そこから表示させるようにしています。
そこで、
1枚目に大きな画像を読み込んで、
2枚目に小さな画像を読み込んだときに、
大きな画像の断片が表示されたままになってしまいます。
現在はpaintメソッドに、
super.paint(g);
g.drawRect(0, 0, this.getWidth(), this.getHeight());
g.drawImage(img, 80, 20, this);
というような手続きを書き、mainからは、repaintで呼び出しているのですが、おかしいのでしょうか?
どなたかご教示をよろしくお願いします。
それだけじゃなんとも言えんが、
drawRect は枠を描くだけで、中は塗りつぶさないんじゃない?
>>285さん
すみません、drawFillの間違いです。
相変わらず、上記の動作になりますが。
drawFill?
JFileChooserを使ったりしてるということは画像を表示しているコンポーネントはJComponentのサブクラス?
だとしたら、paintをオーバーライドするのではなく、paintComponentをオーバーライド汁
同じサイズの不透明なImageにいったん書き込んで上から描画すればよくね?
あとswing使うんならオーバーライドすんのはpaintComponentのほうがよくね?
UnavailableServiceExceptionがUmbilicalCableExceptionに見えた俺はまだ熱が抜けてないw
fillRectする前にsetColorで塗り潰したい色をセット
super.paintもしくはsuper.paintComponentで何が設定されているか分からん
294 :
デフォルトの名無しさん:2007/09/04(火) 14:51:08
ふと思った
大きいイメージを書き込んだimgに小さいイメージを書き足してるんじゃね?
StrutsのActionのインスタンスはWebアプリケーションひとつにつき
ひとつでしょうか?
297 :
284:2007/09/04(火) 14:58:41
paintComponentをオーバーライドしましたが、やはり同じ挙動になってしまいます。
298 :
284:2007/09/04(火) 14:59:11
実際に画像を描くのは、JPanelを継承した俺俺クラスで、
299 :
284:2007/09/04(火) 15:00:45
実際に画像を描くのは、JPanelを継承した俺俺クラスで、
別のクラスから、俺俺クラスのインスタンスを作成して、
そこから、repaint()メソッドを実行しているのですが、この方法がだめなのでしょうか?
何度も書き込んでしまい、すみません。
>>284 もう少し範囲を広げてソースを出したほうがいいかも
長くてすみません。下記のような感じで、ボタンから、d_pnlのメソッドを呼び出して、絵を描くようにしています。
public class Test extends JFrame implements ActionListener{
JButton btn;
Image img = null;
DrawPanel d_pnl;
Test(String title){
btn = new JButton("button");
btn.addActionListener(this);
d_pnl = new DrawPanel();
Container cnt = getContentPane();
cnt.add(btn,BorderLayout.SOUTH);
cnt.add(d_pnl,BorderLayout.CENTER)
;
setSize(400,400);
setTitle(title);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btn){
d_pnl.repaint();
}
}
public static void main(String[] args){
Test app = new Test("test");
}
}
302 :
デフォルトの名無しさん:2007/09/04(火) 15:23:36
imgを作成するところとimgを描画するところが含まれていないようだが
>>258 残念ですが
研究室の配属は学科長が勝手に決め
そういう授業(javaとかCなどの情報系の科目)すら講義にないのです
DrawPanelに、makeImageというメソッドを用意して、そこでImageをつくっています。
actionPerformedのところで、下のように、imgに代入しています。
さっきは削ってしまいました。
何度もすみません。
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btn){
img = d_pnl.makeImage();
d_pnl.repaint();
}
}
>>305 スマートかどうかは別の問題として。
画像本体の読み込み、表示がほぼ問題なく、残像が問題になってるのに、
描画系のソースを公開しないのは、何か理由がおありなのでしょうか
>>304 なんつーか一番の間違いはそんな学校に入ったことか、
自分で何とかしなかったことかな。
プログラミング言語を誰かに教えてもらうって感覚が理解できない・・・
俺の出たとこも情報系だが別に言語を教える授業なんて無かったぞ。
かろうじてあったのはPascalの授業。
最低でもCは書けるか、自力で書けるようになっていることが大前提。
そんなトコまで教えてたら、時間がたりねーよ。
>>305 > makeImageというメソッドを用意して、そこでImageをつくっています
と言いつつ、そのimgを作成するところを見せない
>>303の「imgを作成するところとimgを描画するところ」ってのは
makeImageとpaintComponentの実装を出せってことだと思うぞ
のらりくらりと核心部分を晒さないということはネタ質問ということなのか?
今は専門が要らんほど有り余っててだな・・・。
そこなら基礎からry
jspなら文字化けしないのにhtmlだと文字化けするのはなぜでしょうか?
レスポンスヘッダのContent-Typeとか?
わざわざ自前のコンポーネントを作らなくてもJLabel+ImageIconで十分じゃね?
import java.awt.event.*;
import javax.swing.*;
public class jpeg画像を読み込んで表示させるプログラム extends JFrame {
public jpeg画像を読み込んで表示させるプログラム() {
SwingUtilities.invokeLater(new Runnable() { public void run() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b = new JButton("button");
final JLabel l = new JLabel("");
add(b, java.awt.BorderLayout.SOUTH);
add(l, java.awt.BorderLayout.CENTER);
b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
JFileChooser c = new JFileChooser(); c.showOpenDialog(null); java.io.File f = c.getSelectedFile();
if (f == null) return;
l.setIcon(new ImageIcon(f.getPath())); jpeg画像を読み込んで表示させるプログラム.this.pack();
}});
pack();
setVisible(true);
}});
}
public static void main(String[] args) { new jpeg画像を読み込んで表示させるプログラム(); }
}
間違えたorz
コンストラクタの中でなく外に出さないと・・・
public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() {
new jpeg画像を読み込んで表示させるプログラム();
}});
>>311 ブラウザ(IE)のエンコードを見るとなぜか西ヨーロッパ言語(ISO)となっています。
シフトJISに変えると日本語が表示されました。
なぜこんなことになってしまうのでしょう?
サーバから送られてくる情報の中にエンコードの指定がなかったら、ブラウザはエンコードを推測するしかない。
残念ながら、エンコードの推測なんてものは、あんまり的中率がよくない。
キミはシフトJISのつもりでHTMLを書いたのかもしれないが、ブラウザはそんなことを知りはしない。
エンコードの推測が外れてヨーロッパ言語だと思ってしまったんだろう。
たぶんそのjspにはpageディレクティブかなんかでエンコードが指定してあって、htmlの方には何もないんじゃないか。
Content-Type エンコード とかでぐぐってみるといい。
すみません。HTMLにはmetaタグで指定しています。
1〜13のカードを用意して、合計が5以上になるまで引き続ける。
トランプの残り枚数が3以下になったときは、トランプをシャッフルしてまた上の動作を繰り返す
これを百回行って、合計が8になったときの回数を表示する。
このようなプログラムを作りたいのですがさっぱりわかりません。
コレクションを使うとかなんかそんな話は聞いたのですがちんぷんかんぷんです。
どなたか↑のようなプログラムを書いていただけませんか?
Responseヘッダを確認してみた?
ヘッダに Content-Type: text/html;charset=ISO-8859-1
とかが含まれていると、HTMLのmetaに書いても無視されるよ。
>>317 まずHTMLに書いたmetaタグ内のスペルミスを疑う。
そうじゃなければ、サーバが Content-Type レスポンスヘッダに別なエンコードを送り出してる可能性がある。
>>319,
>>320 ありがとうございます。たぶんそれだと思います。
設定はどこにあるものなのでしょうか?サーバーはWebLogic10です。
というよりIEは判断材料を無視して勝手に判断した揚げ句の馬鹿だからなぁ・・・。
ブラウザのそういう実装だと思っておけば良いよ。
web.xmlのmime-mappingというのが怪しそうです。
>>279 フィールド中に改行ってどんな仕様だよ・・・
そもそもRFCなんてあるんだ・・・
HTTP/1.1 200 OK
Connection: close
Date: Tue, 04 Sep 2007 09:59:58 GMT
Content-Length: 313
Content-Type: text/html; charset=ISO-8859-1
Last-Modified: Tue, 04 Sep 2007 09:14:13 GMT
X-Powered-By: Servlet/2.5 JSP/2.1
ISO-8859-1が返ってきてました。
低レベルな質問で失礼いたします。
ニンジン, 03-1234-5678,
[email protected], F900i,mac,010110
のデータ形式なもので , で区切られて文字列を
各個、配列として代入したいのですが
どのような手順を踏めばよろしいでしょうか?
どうもCSVを読むという宿題が出ていると推理
単純にカンマで区切られてるだけのものなら
String s = "ニンジン, 03-1234-5678,
[email protected], F900i,mac,010110";
String[] array = Collections.list(new StringTokenizer(s, ",")).toArray(new String[0]);
String[] array = s.split(","); でよかったorz
ありがとうございます、早速ためしてみます。
早急なお返事に感謝です。
学生増えたな
Scanner使え
338 :
270:2007/09/04(火) 20:22:52
>>283 >>281 >>280 寝てて遅れレスですが、ありがとうございます。
こういう複雑な文字列解析するとき、みなさんはどうやってるんですかね。
Cだったらただ配列を読めばすむのに、コードポイントとかサロゲートとかよくわかりません。
Javaだって文字列を先頭から読んでいけば同じだろ
>>338 まじめに作るなら、オートマトン設計して1文字ずつ読んでみるとか。
Javaは、文字コードの変換は勝手にやってくれるし(Readerへの文字コード指示)
バッファリングはあまり気を遣わないですむようになってる(BufferedReader)。
だから、楽っちゃあ楽。
コードポイント、サロゲートは、Unicodeの特殊な文字を読むときに出てくる。
まじめに対応するつもりなら、文字はcharではなくintで扱う構造にしなくちゃだめ。
まあ普通に入力文字を扱う分には関係ないでしょう。
342 :
270:2007/09/04(火) 21:11:28
>>339-341 もうすこし勉強してみます。
皆さん付き合って頂きありがとうございました。
JTextFieldでテキストの内容が変更されたことをイベントで受け取りたいのですが
どのようにすればよいのでしょうか?
KeyTypeイベントでキー判定して、判断するのでしょうか?
別にまじめに対応しても普通の用途ならサロゲートぶった切っても良いと思うけどね。
JavaScriptの仕様なんかは文字列から部分文字列取り出す場合サロゲートぶった切る仕様だった筈だし。
多くの場合、そういう実装でも特殊な場合を除いては全く問題無い気がする。
346 :
343:2007/09/04(火) 22:23:13
その方法で、出来そうな感じです。
ありがとうございます。
347 :
270:2007/09/04(火) 22:51:38
>>345 なんかいままで勘違いしていたのですが、
サロゲートに使われるビットパターンというのって決まっているんですね。
つまりある16ビット見ただけで、
それがサロゲートかどうか、上位か下位が判断できるんですね。
いままで、前の16ビットを参照して、上位サロゲートがあるかどうか調べないと、
ある16ビットが下位サロゲートか普通の文字かどうか判断できないのかと思ってました。
たとえばカンマを検出する際に、ただインデックスで走査しただけでは、
ある補助文字の下位サロゲートがカンマと一致していて
誤検出されるかもしれないとか考えていたんで。
つまりカンマやクォーテーションなど
従来の1バイト文字を検出してどうこうするくらいの解析なら、
普通にインデックスで走査すれば問題なかったんですね。
いろいろありがとうございました。
あんまし原始的な部分にかかわらず、ビジネスロジックに専念するべ、Java使うなら
349 :
267:2007/09/05(水) 00:46:14
>>277さん、ありがとうございました。
やってみます。
今日「基礎からはじめるサーブレット/JSP」っていう本を手に入れたんだけど、
PrintWriter out = request.getWriter();
とかもう意味わかんない。
どういう意味ですか?
351 :
デフォルトの名無しさん:2007/09/05(水) 01:20:35
class Base{ void meth1(){ System.out.println("Base meth1メソッド実行を表示しました。");} }
class Derived extends Base{ void meth1(){System.out.println("Derived meth1メソッド実行を表示しました。"); } }
class Super{ Base meth(){ System.out.println("Super methメソッド実行を表示しました。");return new Base(); } }
class Sub extends Super{ Derived meth(){ System.out.println("Sub methメソッド実行を表示しました。"); return new Base(); } }
class Sample{ public static void main(String[] args){ Super s = new Sub();s.meth().meth1(); } }
問題集やっててわからないことがあったので質問です。
このコードはclassSubのreturn new Base()の箇所が間違いで、
エラーになるようなのですが、
どういう理由でエラーになるのかがわかりません。
○ Base meth() ... return new Base
○ Base meth() ... return new Derived
× Derived meth() ... return new Base
○ Derived meth() ... return new Derived
以上4通りの戻り値型と、作成するオブジェクトの型の組み合わせをclassSubで試したところ、
3つ目(つまり前述コードの場合)だけがエラーになってしまいますが、理由がわかりません。
いろいろ検索してもわからなかったので、理由を教えていただければなと思います。
スペースの都合上、読みにくいコードになりました、すいません。
質問不足な感があったら、あとで追記したいと思います。
よろしくお願いします。
>>350 PrintWriterが解らないのか、outが解らないのか、requestが解らないのか、getWriter()が解らないのか、解らない
Derived は Base のサブクラスだから、Derived → Base はできる。
逆向きはできない。
>>351 何のヒッカケもない、継承の基礎。
Derived extends Base なんだから、 Derived is a Base でしょ?
○ Base meth() ... return new Base
戻り値の型とインスタンスが一致
○ Base meth() ... return new Derived
Derived is a Base なのでOK
× Derived meth() ... return new Base
Base is a Derived ではないのでNG
○ Derived meth() ... return new Derived
戻り値の型とインスタンスが一致
355 :
デフォルトの名無しさん:2007/09/05(水) 01:33:29
>>353さん
>>354さん
ありがとうございます。
m(_ _)m
戻り値型や共変戻り値型、
オーバーロードオーバーライドなど、色々見ていたのですが、
参考になる箇所を見つけられなかったもので・・・。
なるほど、継承の項をもう少し読んでみます。
(*^_^*)ありがとうございました。
>>356 悪い事は言わないから、Java言語の入門書からやれ
358 :
デフォルトの名無しさん:2007/09/05(水) 08:49:13
SunJavaしか使ったことないんだけど、MS Javaと何が違うの?
記述方法は違うけどコンパイラと実行環境が違うってだけ?
359 :
デフォルトの名無しさん:2007/09/05(水) 09:13:02
>>357 入門書は1ページ目から眠くなるんで、避けてます。
>>358 MS Javaなんて化石だろ・・・気にする必要ない
基礎Java 野本等の本は価値ありますか?
>>363 化石の知識は気にしないだろ?
知っているが、お前に知識は披露しない
何も知らないアホと知ったかぶりのアホの戦い
366 :
358:2007/09/05(水) 11:16:57
誰でもいいんで知ってる人いたら教えてくれー
.netで動いたりするの?記述自体はSunのやつと変わらない?
>>366 なんで今更 Microsoft Java のことなんて知りたいの?
・MS独自拡張が入っていたので、ふつうのJavaではできないことができた
・.NET は関係ない
俺も詳しくは知らんけど、.netとMS Javaは全く別物じゃない?
.net自体はMS Javaをベースに開発されたらしいけど、その時点で本家Javaとは袂が分かれた、と認識している。
なんで、今の.netのJavaってのは、Java風に書ける.netという言語かと。
つまり、似ているけど別モン、JavaとJavaScriptみたいなもん?
ぶっちゃけMS嫌いだし、どうでもいい。
間違いは指摘してくれ
J#とMicrosoft Java とを混同しているんじゃ?
MSJava : J++
なんとなく分かった気がするかも
MS JavaはSunJavaの拡張版みたいなのだけどセキュリティ的にウダウダだったので開発中止になった
んで、MSは次に.NET環境で動作するJ#やJ++を作った
ってことでいいのかな?
ちなみにMSのJavaは記述方法とかはSunのと比べてapiか豊富っていうこと意外はあんまり変わらない?
J#やJ++は違うのは当たり前として
今更って質問だと思われるだろうが前から気になっていたんで質問させてもらっただけなんだ・・・・
MS Javaの独自拡張は、まだ許容範囲だった。
でも、暴走を始めたモンでSunが切れ、名前を仕方なくJ++に。
そのまま消えていくのかと思いきや、.netとして帰ってきた・・・かな
記述方法は調べた事ないから解らん。
1.2とか1.3とかそんな時代だし、変わらんのじゃないかね。
1.4になる頃にはどうでもいい代物になっていたような記憶ある
>>371 MS JavaはSunに裁判で負けて、更新版を提供できなくなったために
最終的にセキュリティがウダウダになったのではないかな。
もともとはMS独自拡張をSunが嫌っただけと思う。
当時はJavaほとんど使ってなかったので、細かな機能差は知らないけど
COMの操作が簡単にできたりとかDLLのネイティブ関数を直接呼び出したりとか
Windowsで使う分には便利だったような気がした。
J/Directとか・・・
J++でMFCつかってクラスファイル吐く馬鹿とか・・・
そもそも仕様が古すぎ・互換性が薄いせいでIEのMSJVMでしかまともに動かなかったり。(NPE投げるかVMクラッシュか)
javaの機能しか使ってないJ++ソースなのにjavacすると型周りで怒られたり・・・
てかJ++はメインストリーム終わってんだからJ#に移行しろよ。
チャート描画のためにJFreeChartを使っています。
JFreeChartオブジェクト生成後の、凡例のラベル名の変更方法がわからなくて困っています。
例えばXYSeriesオブジェクトを生成するときは、new XYSeries(Compable key)することでラベル名を指定できるのですが
メソッドでラベル名を変更する方法がないようでした。
また、凡例を表すLegendItemクラスのgetLabelメソッドでラベル名は取得できましたが、セッターメソッドが見つかりません。
ラベル名を変更するにはどうすればよいでしょうか?
JFrameのsetBoundsでフレームの大きさを指定するのですが、
メニューバーの部分や外枠も大きさの指定に含まれてしまいます。
含まないようにするには、どうすればいいのでしょうか?
>>375 マニュアル嫁
>>376 含まないようには出来ないので、外枠分を考慮して指定するしか方法はない
>>376 JFrameの中のコンポーネントにsetPreferredSizeを指定してpackする
>>378 コンポーネントが大量にあるんですが・・・・どうやって指定すればいいのでしょう?
コンポーネントをすべてJPanel上に載せればいいんじゃないの?
JFrameに指定はできないんですか?
JFrameは外枠を含めたサイズに意味がある
内側のサイズを設定したいならJPanelかなんかにのせればいいだろ
>>378 その方法でやるとできましたーー。
setBounds使わなくてもいいんですね。
ありがとうございました。
あ、そういえばMSってSunに裁判で負けてたね
まぁなんとなくの流れは分かったよ!
ありがとー!
>>376 Insetプロパティってセットできなかったけ?
例外オブジェクトを文字列あたりでシリアライズ-デシリアライズするのに
良い方法ってありませんでしょうか?
例えば XML にして、Seasar の dicon に書く component と property のように
するのも一つの方法にも思えますが、なるべく労の少ない方法はないでしょうか。
そのシリアライズは何用?
文字列を使うってコトは何か特殊な用途っぽいが・・・
そもそも文字列でシリアライズって意味が解らんのだけど・・・
単にテキストファイルか何かに保存するだけだったりして
xmlうんぬん言ってるし、プリンタブルな文字を使用してシリアライズするってことでは?
それを「文字列あたりで」って言っていいかどうかは別として
よく解らんけど、それってシリアライズって言うの?
XMLに保存するとかならば、永続化とかって言うのかと思っていたが
>>375 JFreeChart#addLegend(LegendTitle legend)
では駄目なのか?
Javaにおけるシリアライズはオブジェクト群をストリームにエンコードすることなので、
Javaの標準的な形式にエンコードせずにXML形式でストリームに吐き出せばXMLでシリアライズしたことになる。
オブジェクトの永続化はそのストリームの出力先を、ファイルなりデータベースなりの、
VMより長生きする領域に結びつけること。
シリアライズの使用法としては永続化以外にRMI等の通信でのオブジェクトのやり取りもある。
んー、なんとなくは解ったけど・・・
一般的に「オブジェクトをXML形式でシリアライズする」と言うんでしょうか?
あと、toStringでも要件さえ満たせばシリアライズと言うって事?
toString じゃ復元できないような。
XML ねぇ・・・
例外オブジェクトをシリアライズするっていうのは、スタックフレームも例外チェインも全部保存するんだよね?
自力でやるのはけっこう面倒そうな気がする
文字列化したい理由は何?
>>394 > 一般的に「オブジェクトをXML形式でシリアライズする」と言うんでしょうか?
さあ?一般的な言い回しは分からないや。
> toStringでも要件さえ満たせばシリアライズと言うって事?
オブジェクトを復元できるなら実装は問わないんじゃないのかな。
toStringでも復元できるクラスもあれば、できないクラスもある。
XMLでも然りなんではないかね?
って、シリアライズの定義ってデシリアライズ可能な事まで含まれるんだろうか?
ちょっと調べたところだと、必須という記述はなかった。
復元できなきゃ使いようがないというのは確かだが・・・
デシリアライズできないシリアライズに意味はあるのでしょうか?
再構築可能性は記述に無くても暗黙の前提だと思うけど。
意味はないんじゃない?
だからといって行間嫁というわけにはならんけど。
完全な復号はできなくとも、シリアライズの過程の行間を読んで復号ってのはないとは言い切れない。
惑わされるな。
>>386はシリアライズを何のためにするのか理解してなくて
単にオブジェクトの状態を外部に保持させたいだけだ。
シリアライズは関係ない。
401 :
デフォルトの名無しさん:2007/09/06(木) 01:44:46
関数の後ろにthrows Exceptionって続いてるのは一体どういう事を意図した文法なんでしょうか?
public Sample05Canvas()
throws Exception
{
}
こんな感じです。
>>401 関数じゃなくてメソッド。
Exception とそのサブクラスを受け取る必要があることを示す。
Exception のみ、というのは単なる手抜きで、人様向けには使ってはいけない。
仕様から発生する例外に合わせ、適切なException のサブクラスを用いること。
>>387-400 申し訳ありません。記述不足が混乱を招く典型的な状況ですね。
くみ取って頂いていた方もいらっしゃいますが、
例外オブジェクトを外部で保持し、必要に応じて復元したいと言う事に尽きます。
それこそ ObjectOutputStream で書き出す方法もあるかとは思うのですが、
JDK やモジュールのバージョン間の制約が思わぬ所で問題となりそうな気がしまして、
できれば何かしらのフォーマットで書き/読み出しするのに良い方法が
あればと思いました。XML などと申し上げましたが、human-readableである必要は全くありません。
しかし、やはり
>>395 でご指摘のあるような点はどう頑張ってもありますよね…
>>403 Throwする必要はないんだったら、
toStringしたのを保存しておけばいいじゃないかな?
もう少し頑張れば、
Throwable.getStackTrace() した結果のリスト項目毎に別ファイルにばらまいておくとか?
何かエラーログを取りたいだけなんじゃないかという気がしてきた。
例外オブジェクトを復元して何に使うつもりなのかだな
406 :
デフォルトの名無しさん:2007/09/06(木) 12:30:45
Stringで文字列として保存してある変数を参照して、
その文字列の変数を取り出すには
どうしたらいいんでしょうか
>>406 意味が分からん。
仮に、
>文字列として保存してある「変数名」を使って、
>その「変数名」の表す変数の「値」を取り出す
のであれば、リフレクションを使う。
>>406 面倒なことを考えたくないなら、 commons-beanutils を使う。
他の面倒なことが起きるかもしれないけど。
プログラム(下のa.class)の中で、
Properties prop = new Properties();
prop.load(new FileInputStream("test.properties"));
こういう呼びだし方をしています。
下記のようなファイル構成で、シェル(a.sh)の中で
java -cp `dirname $0` test.a
という呼び方で実行したいと考えています。
A┬ test
| └― a.class
├ test.properties
└ a.sh
ここでどのようなシェルの実行の仕方をしても
( A/a.sh 、 /***/A/a.sh 、 ./a.sh)
test.propertiesファイルを読み込めるようにしたいのですが、
どのように実装すればよいのでしょうか。
java -cp `dirname $0` test.a
をあきらめる。
>>409 prop.load(getClass().getClassLoader().getResourceAsStream("/test.properties"));
HTMLFormElement.prototype.submit
を自動で何度もfireさせるって出来ないようにされてるのかな
ボタンにあるフォーカスを意図的に解除することはできるのでしょうか?
ボタンがキーボードのスペースで反応しないようにしたいです。
>>413 Component.setFocusable(boolean focusable)
フォーカスを得られないように出来る。
これをボタンに適用する。JButton で確認。
マウスで反応した後にもフォーカスを得ないことを確認。
>>414 できましたー。
ありがとうございました。
416 :
409:2007/09/06(木) 16:32:48
>>410 シェルの呼ぶ場所を固定化できればいいんですけどね
難しいんです・・・
>>411 すみません、mainの中で呼ぶ方法はないでしょうか?
>>416 ClassLoader.getSystemResourceAsStream("/foo")
または
test.class.getClassLoader().getResourceAsStream("/foo")
× "/foo"
○ "foo"
419 :
409:2007/09/06(木) 17:13:10
>>417 ありがとうございます。Buildは通りました。
"/foo" はどこをあらわすのでしょうか?
ぬるぽが発生してしまいます。
どこからみて、 /foo になるのでしょうか?
javadocを見る限りでは、
classpathが通ってるところからの相対パスに見えるのですが・・・
"./foo"カレントディレクトリからの相対パス
"/foo"ルートディレクトリからの相対パス
やっぱり
>>410しかないだろう。
>>417に加えて、起動スクリプトをこう変更したら?
#!/bin/sh
c0=`echo $0 | awk '{print substr($0, 1, 1)}'`
if [ $c0 = "/" ] ; then
abspath=$0
else
if [ $c0 = "." ] ; then
abspath="`pwd`/$0"
else
abspath=`which $0`
fi
fi
java -cp `dirname $abspath` test.a
リソースの取得の場合はclasspathというよりそのクラスファイルがある場所じゃなかったっけ?
>>419 test.properties を読みたいなら引数は "test" ですよ。
424 :
409:2007/09/06(木) 17:49:25
>420
申し訳ないです。うまくいきません。
今はこちらを利用していますが、
ClassLoader.getSystemResourceAsStream("/test.properties")
ルート、実行シェルの場所に test.properties を置きましたが
読み込めませんでした
>421
クラスパスを絶対パスで書くのと相対パスで書くことの違いは
getSystemResourceAsStreamの内容がそこに依存しているから、
という認識で大丈夫ですかね?
425 :
デフォルトの名無しさん:2007/09/06(木) 18:45:45
どなたかご教授下さいませ
下記コンパイルエラーをとりたく努力しております。
一言アドバイス下さい。
よろしくお願いいたします。
app\src\NESCanvas.java:684: シンボルを見つけられません。
シンボル: メソッド drawRGB(int[],int,int,int,int,int,int,boolean)
場所 : javax.microedition.lcdui.Graphics の クラス
g.drawRGB( core.fb, 256*8+8, 256, 80, 1, 240, 224, false
);
^
app\src\NESCanvas.java:745: シンボルを見つけられません。
シンボル: メソッド drawRGB(int[],int,int,int,int,int,int,boolean)
場所 : javax.microedition.lcdui.Graphics の クラス
zoomGra.drawRGB( core.fb, 256*8+8, 256, 20, 1, 240, 224,
false);
^
エラー 2 個
>>425 まだ頑張ってたのかお前。
Graphics.drawRGB(int[],int,int,int,int,int,int,boolean)が追加されたのはMIDP2.0からだよ。
コンフィギュレーションがCLDC1.1で
プロファイルがMIDP2.0か確認しろ。
javacの-bootclasspathと-extdirsを見直せ。
ついでにjavacのバージョン晒せ。
>>425 javax.microedition.lcdui.Graphicsクラスのリファレンスをよく読め
drawRGB(int[],int,int,int,int,int,int,boolean)というメソッドは存在しないと言っている
>>425 教授下さいってのは大学で言え
ここでは配布していない
教授ってプロフェッサーの意味だけじゃないよね
で?
まぁでも教授っていうのはもっとしっかり教え授けることを指すな。
掲示板で軽い質問を返すときは教示だ。
質問です。
http://faces.bascule.co.jp/tutorial/ 上記プログラムを動かそうとしたのですが、以下のようなメッセージが出ます。
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: org/apache/crimso
n/tree/XmlDocument
at jp.faces.RoomInfo.outputAll(RoomInfo.java:307)
at jp.faces.FacesXML.processQR(FacesXML.java:223)
at jp.faces.FacesXML.DocumentAnalysis(FacesXML.java:563)
at jp.faces.FacesXML.readXML(FacesXML.java:52)
at jp.faces.FacesClient.run(FacesClient.java:102)
まさに
>>1に書いてある初心者ミスだとは思うのですが、どうしても対処できません。
検索したところ、CLASSPATHの設定が上手くいってないということなのですが、
どう設定すればよいのでしょう…。
現在は[システムのプロパティ]>[環境変数]>[システム環境変数]
でCLASSPATHの値はC:\Program Files\Java\jdk1.5.0_07\jre\lib\ext;.
PATHの値はC:\Program Files\Java\jdk1.5.0_07\bin;になっています。
初心者はCLASSPATHを設定しない方がいい
よく読んでいないけど、はずしたら動くかもよ
strutsを使用しています。特にロケールの設定などはプログラム内で行っていません。
ブラウザの言語設定を英語でアクセスすると、英語のメッセージリソースファイルが使用されてしまうのです。
strutsは何で判断をしてメッセージリソースファイルをだしわけているのでしょうか?
ブラウザの言語設定
>>435 まさにその通りでした。
version1.4に差し替えたところ、とりあえず正常に動作しました。
的確&迅速なアドバイス本当にありがとうございました!
>>437 そうなんですね。ありがとうございます。
ブラウザの言語設定に関わらずある言語のメッセージリソースファイルを出すには
どうすればよいのでしょうか?
説明が下手ですみません。
データベース内の画像全てを表示し、クリックした画像が拡大される
というのを作りたいのですが、これには必要個数分コンポーネントを作成し
それぞれに対してアクションコマンドの設定が要りますか?
今はループを使って画像を羅列表示させていますが、詰まりました。
>>440 説明が下手杉
・データベースの種類は何だ?
・何をどんな風にクリックするんだ?
・何のコンポーネント?
・アクションコマンドって何の用語?
・今は表示させているとは、何を使ってどのように表示させている?
全く持って意味が通じない。
442 :
440:2007/09/07(金) 01:28:35
WindowsのコマンドプロンプトからJavaのHogeクラスからの復帰値を取得したいのですが、方法がわかりません。
やりたいことは、以下のような感じです。
set VAL = java Hoge
どなたか教えてください。
447 :
デフォルトの名無しさん:2007/09/07(金) 05:13:30
実行環境に依存しない方法で、読み込んだ
ファイルの種類を判定する方法ってありませんか。
せめてテキストベースかバイナリファイルかぐらい判定できるといいのですが。
>>446 System.exit(数値) で値を返せる。
文字列は返せないし、Java から環境変数は設定できないから
そういう時は戻り値をファイルに格納するなりして対処する。
>>447 テキストかバイナリかは文字のエンコードが何になるかで判定方法が
変化する。もっと前提を制限しないとまともな返答は無いと思え。
ところでファイルの種類を判別って、極窓みたいなことがしたいってこと?
449 :
デフォルトの名無しさん:2007/09/07(金) 08:25:36
>>448 回答ありがとうございます。ただ、System.exit()から、値の受取かたが、分からないのです。
Linuxのシェルでは、「$?」で取得できたのですが、Windowsのバッチファイルでの受取かたがわかりません。
>>449 > Linuxのシェルでは、「$?」で取得できた
つまりSystem.exitで値を出す側(Java)の質問でなく、
> Windowsのバッチファイルでの受取かたがわかりません
だから、Windowsの使い方が分からないということで、スレ違い、もしくは、板違い。
「windows 環境変数 返り値」でぐぐって、最初の方のページを$?で検索。
>>448 テキストベースのファイルをJISAutoDetectで読み込んでいるので、
とくにテキストエンコードの指定はありません。
text、html、css、xml、ini、cvs、htaccess、cpp、java、ect...など、
いろいろ読み込もうと思ってます。
極窓まではいきませんが、たとえばワードのファイルなどが
間違って読み込まれたりしないように判定したいのです。
>>451 UNIX由来のfileってコマンドがある
そのソースを読んでみることをお勧めする
Windows実装もある
ところで「テキストベースのファイルをJISAutoDetectで読み込んでいる」らしいが
「せめてテキストベースかバイナリファイルかぐらい判定できるといいのですが」と矛盾していないか?
453 :
デフォルトの名無しさん:2007/09/07(金) 09:49:45
Cとかやったこと無いけどいきなりJAVAから入るのって無謀?
>>453 無謀ではない
何から入ってもできない人間はできない
ただせめてOSなどのプログラミングを取り巻く環境の扱い方くらいは知っておくべき
455 :
デフォルトの名無しさん:2007/09/07(金) 09:56:28
>>454 ありがとう
やる気が出てきた 台風の中本屋行ってくる
台風の中本屋に行くようなやつはプログラマには向いていない
そうか?
人が少なくてゆっくり選べるから、お勧めだな。むしろ合理的だ。
あと、水着で行けばもっと合理的だぞ。
Javaを覚えるとどんなメリットありますか?
>>458 言語を1つ習得できる。
正直、メリットデメリット考えて言語選ぶんだったらVBやったほうが
いい。仕事も多いしな。
すみません、スレ違いなのは承知なのですが、
こちらの方達なら何かご存知かと思い、
質問させて頂きます。
http://www.poitan.net/ こちらのサイト、検索結果が全く画面表示されません。
昨日まではちゃんと使えていたのですが、、、。
『FAQ』欄にあるように、Javaスクリプトは有効に
しているのですが。 何か他に原因がありますでしょうか?
>>452 バイナリファイルは処理の仕様外ですが、選びさえすれば読んでくれてしまうので、
バイナリファイルをはじきたいのです。
>UNIX由来のfile
一応調べたところfileコマンドの概要はなんとなくわかったのですが、
それはJavaのコードから利用できるのでしょうか。
>>462 金持ちになりたきゃアメリカ行って一発当てて来い。
もしくは宗教の教祖になれ。儲かるらしいから。
日本でプログラマは間違っても金持ちにはなれんからVB覚えても無駄。
何覚えてもむだだよ。マ板いきゃわかるだろ。
>>460 Firefox2.0.0.6だがちゃんと使えるぞ?
つーかこんなとこに書かないでポイ探に問い合わせろよ。
それとも宣伝か?
>>463 そうなの?
ビルゲイツのようになりたいんです!!
>>461 普通にファイルを読み込んでいって、文字以外のものが現れたらエラーにする。
くらいでいいんじゃない?
>>466 UTF-8のHTMLファイルを読んだ場合はどうすんだ?それが UTF-8 エンコード
の文字なのかバイナリファイルなのかはどこで区別する?
>>465 ビルゲイツはプログラマだが、奴にあったのは商才
>>467 451はJISAutoDetectで読んでるらしいから、UTF-8とかそもそも無理
>>466>>467>>471 JISAutoDetectなんで確かにUnicodeは関係ないですね。
UTF-8もとりあえず一通り形が出来上がったら追加しようとは思ってるんですけど。
460です。 464さん、普通に使用できるんですね。
ポイ探にはメールにて問い合わせ(一ヶ月くらい前)を
しているのですが、未だにお返事がない状態です。
>>461 ソースを読めばどうやってファイルの種類の判別やってるかそのロジックが分かるだろうに
アルゴリズムは言語とは無関係だから当然Javaのコードでも利用できる
>>474 ああそういうことでしたか。てっきりfileコマンドをjavaから使えば、
といわれているのかと思いました。
そうですね。調べてみます。
ありがとうございました。
>>475 いや、fileが存在する環境なら外部コマンドとしてJavaから実行するのも一つの手かもしれない
個人的にはJavaで閉じてしまえるものはそうしたいが好みやその他いろいろあるだろうから
変数について教えてください。
今、クラス毎にファイルを分け、
同じパッケージに含めててコーディングしています。
異なるクラス同士でリテラルを共有したいなら、
リテラルを含むクラスを抽象クラスにして
各クラスに継承させれば良いと思うのですが、
変数を共有したいときはどうすれば良いでしょう。
ご教授願います。
変数を含むクラスのインスタンスを共有させればいいと思うよ
479 :
477:2007/09/07(金) 14:51:55
>>478 インスタンスの共有とはどういう事でしょうか?
Class1 に変数 n を含んでいるとして、
Class2 と Class3 でそれぞれ
Class1 cs = new Class1();
cs.n として使っても、 Class2 で cs.n が変更されたとき、
Class3 の cs.n は変更されないと思うのですが、違う意味でしょうか。
クラス全体で共有したいって意味ならスーパークラスの抽象クラスにstaticで定義すればいいし、
いくつかのインスタンスで共有したいのなら、抽象クラスに非staticで定義して、
インスタンスが保持するその参照が一致するようにしておけばいいんでは?
>>477 ○○だと思うなら、その通りにやってみればいいのに。
>>479 それのどこが共有してるんだか。
強いて言えば、それはクラスの共有。でも、そんな言い方しないな。
class Class1{
int n;
}
class Class2{
final Class1 cs;
Class2(Class1 cs){
this.cs=cs;
}
}
class Class3{
final Class1 cs;
Class3(Class1 cs){
this.cs=cs;
}
}
public class Hoge {
public static void main(String[] args) {
Class1 cs = new Class1();
Class2 cs2=new Class2(cs);
Class3 cs3=new Class3(cs);
for(int i=0;i<5;++i){
cs2.cs.n=i;
System.out.println("cs.n="+cs.n+" cs2.cs.n="+cs2.cs.n+" cs3.cs.n="+cs3.cs.n);
}
}
}
483 :
477:2007/09/07(金) 15:52:45
>>480,481,482
ありがとうございます。
おかげで理解できました。
リテラルの共有ってどういう意味?
>>484 new String("string") == new String("string") が false になるのに
"string" == "string" が true になる。
>>457 あと、歯ブラシとシャンプーを忘れずにな!
488 :
484:2007/09/07(金) 21:16:57
>>485 知ってます。
同じように自前で作成したクラスのインスタンスをリテラルとする事が可能で共有できるんですか?
489 :
デフォルトの名無しさん:2007/09/08(土) 01:36:06
>>427 コメントありがとうございました。
今から内容について調べてみます。
誠ありがとうございます。
490 :
デフォルトの名無しさん:2007/09/08(土) 01:39:24
>>427 versionは1.5.0_12でした。
491 :
デフォルトの名無しさん:2007/09/08(土) 02:51:10
>>427 解決しました。MEXAのインストール先がC:\Program Filesになっていたからlibが
C:\SOFTBANK_MEXA_EMULATOR12にインストされていなかったからでした。
どうもいろいろとありがとうございました。
ほんと感謝しています。
お前はjavaの基礎からやった方が良い。
悪いことは言わんからSEでアプリ作れるようになってからMEに手を出した方が良いよ。
private void functionA(String xxx) {}
private void functionA(Thread xxx) {}
という二つの関数があった時、
functionA(null)
という呼び出しに応じるのはどちら?
>>493 コンパイルエラーにならないと言語仕様に反する
>>495 そういうところに気がつくのはすごいと思ったが、
自分でサンプル作って試せば一瞬で分かることなのに。ともね….。
>>493の書き込みをするのと同じくらいの時間で確認できるだろうに・・・
>>496 まずJDKのインストールからしないと…
どうせインストールすらできねーんだろw
技術者としての自覚ゼロだな
手元にjdkなけりゃ自分で試すより聞いた方が早いんじゃね?
早いかどうかはともかく、自分で試せるのに試さず他人任せってのが技術者として失格
俺はつまらん技術者じゃないからw
技術者に寄生しておもしろおかしく生きていく真っ当な人間だからjdkなんか入れねえ
こうして502が車輪再発明を行ったのは、502の人生で7回目となった
技術者としての自覚(笑)
>>503 ウンコに寄生してもおもしろくもおかしくもねぇだろ。
あ、スカトロ趣味なのか。それなら納得。
初心者だったら自分より技術ある奴に上手く寄生するのは重要だな
何時までも寄生していたらウンコだが
ウンコがウンコを笑ってる
ゲイツがクソどもに寄生して巻き上げた金で優雅な生活を送ってる時に
その金が野グソの中から出てきたものだろうと気にせんよ
金に綺麗も汚いもない
あるのは搾取するクソと搾取されるクソだ
どっちのクソになりたい?
511 :
デフォルトの名無しさん:2007/09/08(土) 15:13:22
これが本当のクソスレ
まるでそびえ立つクソだな
残念ながらJavaスレなんでゲイツには巻き上げられていないという話
C慣れしているJava初学者です。
カンマ演算子について知りたい事があります。
for ( i = 0, j = 0; i < 10; ++i, ++j )
の様な所は問題ないのに、
i = 1, j = 2;
とするとコンパイル出来ないのは、Cをやっていた自分にとっては
直感に反する違和感があります。
この辺をきちんと学習したいのですが、入門書的な本は網羅的でないのが不満です。
Cで言う所のK&R的な、網羅的に文法が学習できる本のお勧めはありますか?
>>514 理論的に知りたいならば、言語仕様を嫁
書式とかコンパイルが通り、かつJavaのマナーにしたがっているコードが書けるようになりたいならば、コーディング規約を熟読
後、意外と手堅く文法がまとまっているのはSJC-Pの問題集とかテキストだったりするw
個人的には「Javaのメカニズム―エラー処理・例外で困っているあなたに」って本がオススメ。
>>514 これで試してみたけどコンパイルできたし実行時エラーも無かったよ
class ForLoopTest {
public static void main(String[] args){
int i,j;
for (i = 1, j = 2; i < 10; i++, j++) {
System.out.println("i: " + i + ", j: " + j);
}
}
}
コンパイルできなかったときのコードあれば見せてちょ
>>516>>514 int i, j;
i = 1, j = 2;
だとコンパイルが通らないと言ってるんだよ、多分。
Javaは1行で1つのステートメントを記述すのが基本だから、
int i, j; が特別に許されているだけ。
これも、コーディング規約的には、
int i;
int j;
と書く、もしくは初期化だけはJavaでは推奨されないから
int i = 1;
int j = 2;
と書くべき。
Cだと宣言にメモリの確保の意味が強いけど、Javaではあんまり意識しちゃいけない
518 :
516:2007/09/08(土) 18:04:33
>>517 ああそういうことか・・・納得。サンクス
forの最初と最後の部分だけカンマで区切って複数の文が書けるってだけの話じゃないの?
>>514 Java言語仕様が最も詳しい。
ただ、索引が階層化されてて、見づらいし、定義をさがすためにあっちこっちのページに飛ばなきゃいけないからきつい。英語がそこそこ出来るなら、HTML版がお勧め。
for文だと
for ( ForInit; Expresion; ForUpdate ) と言う定義で、
ForInitは StatementExpressionList(式文のリスト)とローカル変数宣言が記述できる
StatementExpressionListの定義はこう
StatementExpression
もしくは
StatementExpressionList, StatementExpression
↑カンマ
つまり、for文の初期化コードで使用するカンマはStatementExpressionListの一要素として定められていて、カンマ演算子というものは存在しない。
書籍やネットでJavaにカンマ演算子がある旨が記載されていたら、厳密には誤り。
StatementExpressionの構成要素の中に、Assignment(代入)も含まれているから、
StatementExpressionListは i=1,j=2 のような書き方ができるわけ。
StatementExpression:
Assignment ←これ
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
一方、j=2; っていうのはExpressionStatementに該当して、
ExpressionStatementは
StatementExpressoin ; という定義になる。※StatementExpressionにセミコロンが付く。
ここで、StatementExpressionはAssignmentが該当するから、
Assignment ; という形に置き換えられる。
つまり、ExpressionStatementの構成要素にカンマは登場しないから、
i = 1, j = 2; という書き方は出来ない。
じゃあ int i=0, j=0; は何でOKなのか、というと、ローカル変数の定義という定義が別にあって・・・
>>519 そうそう
簡単にいうと、Javaは要所要所でそれぞれ記述の定義が異なるから、カンマが使えるところと使えないところが有るってだけの話。
質問です。
栄養ドリンクとポテトチップスの食べ合わせについてなのですが、
これは栄養ドリンクの効果を下げたりすることはないのでしょうか?
健康に害があったりしないのでしょうか?
また、栄養ドリンクとコーヒーの飲み合わせについても同様に教えてください。
Java( coffee )と 栄養ドリンクの組み合わせは、
プロジェクトが佳境にさしかかると有効です。健康に害があるのは言うまでもありません。
>>522 というより、C言語にあるカンマ演算子がJavaには無いってだけの話のような。
>>526 まぁそう言い切っちゃうと、じゃあfor文のカンマは何だよ、っていう話になると思って
>>527 Javaでは forの初期化部分と更新部分だけ特別扱いされてる、って説明で良いんじゃね?
一部のC信者の為に用意されていただけだろう
使わなきゃならない場面なんてほとんどないしな
C信者などと言ってるけど、
JavaがC風の文法でなかったらSmalltalkと同じように普及しなかったよ。
>>528 for文だけじゃない
これ全部列挙するの面倒
なんで全部列挙せにゃならんのだ……
だってそうしないと、for以外のカンマは何よ?とか話がひろがりんぐでしょ
>>533みたいな性格の奴じゃなければ納得するか引き下がるよ。
ふーん
>>531 ちなみに、for以外のカンマってどれ?
変数宣言で同じ型を複数宣言できる部分ぐらいじゃね?
int[] array[];
とかw
それカンマじゃねーし
javaだとカンマは演算子という位置づけじゃないからこういうのは不可。
a = 1, 2, 3; とか while (a++, b < 10) とか。
>>523 スーパーエスパーで答えてみる
栄養ドリンクがうまくオーバライドされて胃の中でポテチと一緒に
取り込まれるので、問題ないよ。
コーヒーはインタフェースなのでUCCとかポッカで実装クラスを用意しないと飲めない。
でも、カルビー・ポテトチップスの今の仕様が分からないので、メーカーのHPで調べれば?
シンタックスシュガーというやつですか。
ソケットって何ですか?
電球を入れる穴だよ
コンセントを差し込むところ
冗談はさておき、自分のPCと他のコンピュータの間でネットワーク通信するときに使うもの
java.net.Socket クラスを調べてみれ
>>545 プロセスとプロセスの間の垣根を越えて通信する
PC間は関係ナッシング
>>546 JMSみたいなものかな?
今度の休みに、調べてみます。
socketはネットワークプログラムの基礎だから、簡単なチャットシステムくらい実装できるようには勉強するといいよ
549 :
デフォルトの名無しさん:2007/09/10(月) 00:34:05
551 :
デフォルトの名無しさん:2007/09/10(月) 10:43:12
Javaの勉強用にデスクトップアプリケーションを作るとすると
どのようなアプリケーションが最適でしょうか?
(GUIアプリケーションは未経験です)
Eclipse
553 :
デフォルトの名無しさん:2007/09/10(月) 10:58:17
551です。
すいません、開発環境ではなくて
どのようなアプリケーションを作ってみるのが
勉強し易いかってことです。
テキストエディタとか電卓とか○×ゲームとか
なるほど、ありがとうございます
ユーザから受け取った文字列によって分岐させたいと考えています。
switchを利用すると1文字でしか判断できないと思うのですが、
ifを用いて、ひたすらstring.equalsをやるってのも微妙な気がします。
何かよい方法はないでしょうか?
HashMap<String, Method> とか
>>556 if ... else if をずらずらやるのが一番わかりやすいと思いますよ。
どうしても嫌なら、hashcodeで何とかするとか、enumに変換して何とか
するとか、HashMap で文字列=>処理内容のインスタンス の対応表を作っ
ておくとか。
ハッシュとか。
hashを利用するか、if〜elseしかやはりないようですね・・・
ありがとうございました。
どう考えてもジャンプテーブルの出番。
ハッシュで実装かな。
.jnlpという拡張子のついているファイルをダウンロードしたのですが、
どう実行すればいいのか分かりません。
検索してみたらどうやらXMLファイルらしいのですが、余計に訳分かりません。
>>560 interface Handler {
void handle();
}
と定義して、処理の内容は匿名クラスにでも記述。
static HashMap<String, Handler> MAP; として、
イニシャライザで登録。
Handler handler = MAP.get(inputString);
handler.handle();
これでif文はなくなる。
おまけに有効文字列以外はhandlerがnullになるので一石二鳥。
俺ならインタプリタパターンとストラテジーパターンで分岐させるかな。
今後の拡張やらがどうせあると踏んで。
正規表現でいければ楽だけど。
>>564 null だと例外が出るから、こんなのも。
Handler handler = new Handler() { void handle() {} }; // NullHandler
if (MAP.contains(inputString))
handler = MAP.get(inputString);
handler.handle();
JUnitを使用したDBに対するテストについての質問です。
現在、課題でJ2EE+Tomcat+MySQL環境でのDB接続Webアプリを
作成しています。
DBに対するInsert、Updateを行った際、意図した挿入、更新が行われた
ことを確認するテストについてご意見をお聞かせください。
Tableは次のようになっています。
id( primary key auto_increment), user_id, user_name, insert_user_id, insert_date, update_user_id, update_date
このテーブルに対するinsert、updateで、insert_date、update_dateをサーバタイムで書き込むのですが
この確認をJUnitでどのように行えばよいのかがわかりません。
確認方法など、ご意見をよろしくお願いします。
568 :
567:2007/09/11(火) 07:28:05
追記です。
insert_dateとupdate_dateはミリ秒まで格納されています。
Webから画像をダウンロードしたいのですが、URLConnection con = url.openConnection();から
InputStream is = (InputStream) con.getContent();しようとすると実行時に
sun.awt.image.URLImageSource cannot be cast to java.io.InputStreamというエラーになります。
どうしたら画像をファイルにダウンロードできるでしょうか。
>>569 URLConnection.getContent メソッドの戻り値は URL が示す情報が何なのか
に依存して変わる。画像の場合は URLImageSource って型になるからキャストに
失敗してる。
単純にバイトストリームがほしいだけなら URLConnection.getInputStream メソッド
を使え。
571 :
569:2007/09/11(火) 10:37:12
自分自身のファイルの場所を知るにはどうしたらいいですか?
たとえばfoo.jarというプログラムがあって
/aaa/bbb/foo.jar へインストールされて実行された場合は「/aaa/bbb/foo.jar」を
/ccc/foo.jar へインストールされて実行された場合は「/ccc/foo.jar」を取得したいのです。
new File(".").getAbsoluteFile()ではjava -jar foo.jarで起動した場合はカレントディレクトリが
拡張子の関連付けから起動した場合はホームディレクトリになってしまいました
573 :
572:2007/09/11(火) 12:13:46
×インストール
○ファイルを置いて
意味は通じるとは思いますが。
クラスローダに訊いてみるとか
public class Test {
public static void main(String[] args) {
for (URL url : ((URLClassLoader) Test.class.getClassLoader()).getURLs()) {
System.out.println(url);
}
}
}
Jakarta Commons-IOのFileUtilsは、
staticメソッドを使ったAPI群だけど、
たとえば、FileUtils#readFileToString()
とかで、巨大なファイルをあるスレッドから読み出している時に、
別のスレッドからこのメソッドにアクセスするのは危険?
マルチスレッド環境でファイル入出力をやるなら、
ファイル入出力処理を各スレッドごとにインスタンス化できるような仕組みを
使うべきでしょうか。
>>574 ありがとうございます。助かりました。
参考までに別な方法で失敗した奴w
System.getProperty("user.dir");
System.getProperty("java.class.path");
とするとjava -jarのときはuser.dir + java.class.pathでいけそうなんですが
関連付けから起動するとjava.class.pathが絶対パスになってしまう。
クラスローダーを使うのが確実ですね
>>575 変なstatic変数を使ってない限りスレッドセーフ。
>>577 レスありがとう。よければもう少し教えてください。
重複する内容ですが、
1.Thread-1からFileUtils#readFileToString()で巨大なファイルを読み込み。
2.Thread-1がまだファイル読み込み中に、Thread-2が同じメソッドを実行開始。
という状態があった場合、Thread-2の読み込み処理は
Thread-1での読み込み処理が終わるまで待たされるってことなんでしょうか?
>>578 readFileToString() は synchrinized ではないので、
2スレッド同時に実行される。
>>578 メソッドにsyncronizedが付いていたり、wait()メソッドを呼んだりしていなければ、
そういった同期化がされることはない。
2つのスレッドが、並行して同じメソッドを実行する。
インスタンス変数やstatic変数などを使用して同一の変数を
変更しようとしない限り、2つのスレッドはスレッドセーフに実行される。
これを機に、スレッドと同期化について学んでおくといいよ。
メソッド内で定義される変数は、スレッドごとの別々のスタックに格納されるからスレッドセーフ
でいいんだっけ
最初に呼ばれるServletでservlet.getServletContext()経由で
WEB-INFのパスを取得しています。
ただ、これは一回取れればいいのですが最初に呼ばれるサーブレットが
呼び出されるたびに実行されてしまい無駄な気がします。
一回だけにできないでしょうか?
>>582 Servlet#init()で取得して、サーブレットのインスタンス変数に入れる。
が、このメソッドの実行で重くなることは殆どあり得ない。
気にスンナ。
584 :
578:2007/09/11(火) 14:09:31
>>579-581 重ねてありがとうございます。
なんとなく理解できました。
staticメソッドをほぼ同時に複数のスレッドから実行しても、
staticメソッド内で定義されるオブジェクトは、
>>581さんの
言うように別々のスタックに入るから、問題なく(干渉無く)
複数スレッドで扱えるということですね。
スレッドと同期化について、ググってきます。
JPEGファイルをBMPに変換するライブラリがあったら教えてください。
誤爆?
誤爆じゃないです
589 :
588:2007/09/11(火) 15:08:42
590 :
デフォルトの名無しさん:2007/09/11(火) 15:10:22
ギャグ?
誤爆じゃないなら
BufferedImage img=ImageIO.read(new File("A.jpg"));
ImageIO.write(img,"bmp",new File("A.bmp"));
SWTって需要ないの?
593 :
デフォルトの名無しさん:2007/09/11(火) 16:38:57
VectorがスレッドセーフでArrayListがスレッドセーフでないというのは、
例えばSwingのTableModelはユーザによる編集などで、
イベントディスパッチスレッドから書き換えられるので、
セルデータを保持するオブジェクトを
デフォルト(DefaultTableModel)のVectorではなくて、
ArrayListに書き換えるとダメだ、というような意味でしょうか。
そもそもSwing全体がスレッドセーフじゃないので、
TableModelだけスレッドセーフになってても実はあんまり意味がない。
Swingは必ずイベントディスパッチスレッドから操作するという決まりになっている
(Swingはスレッドセーフじゃないから、使う人が気をつける)
ので、イベントディスパッチスレッドから操作する分にはいくらやっても構わないし、
その限りにおいては、TableModelがスレッドセーフでもそうじゃなくても問題にならない。
Vectorがスレッドセーフっていうのは、1つのVectorに対して複数のスレッドから同時にaddしたりremoveしたりしても、壊れませんよということ。
当然、複数のスレッドからaddしまくったら、オブジェクトの順番とかは入り乱れてめちゃくちゃになるが、それはVectorの知ったことじゃない。
ArrayListはスレッドセーフじゃないので、同じようなことをやると、addしたはずのオブジェクトが無いとか、
removeしたはずのオブジェクトがまだ残ってるとか、ArrayList自体がおかしなことが起きる可能性がある。
Swingの「スレッドセーフではない」というのはイベントと描画の話で、
別スレッドでデータ操作を行う方が、イベントスレッドを占有せずに済む。
SwingUtilitiesクラスのinvokeLaterメソッドとはお友達になる必要があるけど。
そんな点から見れば、TableModelの実装にVectorが使われていても
おかしくは無い、かな。ま、Collectionsの同期ラップでも良いと思う。
597 :
593:2007/09/11(火) 18:52:04
>>594-596 詳しい回答ありがとうございます。
では、とくに自分ではthreadクラスを使わない場合でも、ユーザーによる編集と、
イベントとは関係ないロジック(例えばmain内のロジック)からの書き換えがあって、
2つが偶然バッティングしたらArrayListだと整合性を保てないということでしょうか。
スレッドなど使った覚えがなくとも、Swing使えば少なくとも2つスレッドができるのですよね。
mainってふつう、フレーム表示したらすぐreturnしてしまわない?
>>596 別スレッドからモデルを操作すると、そのスレッド上でモデルのリスナにイベントが飛んでいって、あちこち掻き回す気がする。
ちゃんとイベントディスパッチスレッド上でイベントを起こすスレッドセーフなモデルクラスを自分で実装するのならいいんだろうけど。
>>598 ふつうは知らん。
やる事がないならば終わるだけ
604 :
593:2007/09/11(火) 21:53:38
メインはやる事ないと、終わってしまうので、無視できるということですか。
さらにディスパッチスレッドは1つだから、いくらテーブルモデルを書き換えるイベントが
ほぼ同時に多数発生しても、まだスレッドセーフは保たれるわけですね。
皆さんありがとうございました。
無視できるっていうか、GUIが表示されてしまえば後はイベントドリブンでプログラムは実行するわけだろ。
GUIが表示された後もメインスレッドが仕事をしなければならない方がどっちかと言えば不自然。
まあ、チャットサーバーのようなアプリケーションであればメインスレッドで通信しているとかというケースはあるけど。
>>604 それは、ただシングルスレッドで動いてるだけであって、スレッドセーフとは言わないな。
まぁシングルスレッドに閉じ込めてるおかげで、安全は保たれている。
いや、流れ読んでるとそもそも、シングルスレッドモデルとスレッドセーフを切り分けてない奴の方が多いぞ。
全体的に話の流れがおかしいんじゃね?
Swingと並行処理が絡むとgdgdになるのは何時もの事。
知ったような書き方をする奴が出たりするが、数行のレスで伝えるのは難しい話題だから仕方なし
ようは、
Swingライブラリ : スレッド危険 混ぜるな
Swingライブラリは、スレッドセーフじゃない。
これは多くの人間が知っている。
だが、どこまでスレッドセーフじゃないのかがわかりにくい。
Swingパッケージ全て?それとも、イベントディスパッチに絡む部分だけ?
なので、TableModelをどうすればいいかという話が出てくるわけだな。
TableModelの実装に関していうと、fireなどでイベントを発生させている部分があるわけで
イベントディスパッチすれっどとは別スレッドで扱われることを想定した作り。
なので、スレッドセーフに作っておかないとおかしなコトになるはず。
イベントを処理する部分じゃなくて、イベントの発生元なんだよね。
って知ったように書いてみました。
ホントはよく知らない。
そもそも完全スレッド対応のGUIコンポーネントなんて現実的に不可能だ
実装は可能だけど、それ作ったところでユーザがついてこれない
ってビルジョイが言ってんだっけ
本当も何も、EDT 以外で UI コンポーネントを作る奴は
GUI の最初の一歩で踏み間違えているだろ
>>611 そうかSwingWorker使ってもテーブルモデルの更新のタイミングは
気をつけないと駄目なのね
フレームの作成もダメとははじめて知ったぜ
>>612 入門書が、全然違う方向に誘導してる気がするwwww
SUNのdocにSwingは全部EDT上でやれって書いてあるのにサンプルコードは軒並みGUIの構築がメインスレッドで行われてるからなぁ。
それどころかEDT無視したサンプルコードもたくさんあるんだけど。
JSR-296で少しはマシになるかな?
617 :
デフォルトの名無しさん:2007/09/12(水) 03:49:54
Javaアプレットが以前は使えてたのに、いつの間にか使えなくなっていた。
『有効』になっていない可能性があるんだが、これはどうしたら有効に出来るの?
618 :
デフォルトの名無しさん:2007/09/12(水) 04:42:26
ImageやBufferedImageから入力ストリームを生成する手順を教えて頂けませんか。
画像ファイルのパスを指定してFileInputStreamにするのはいろいろ見つかったんですが。
>>619 その後にByteArrayInputStreamですね。
ありがとうございます。やってみます。
621 :
593:2007/09/12(水) 09:14:31
>>605-616 私の持っているGUIの参考書もmainでやっていたので、
何の疑問もなくmainでsetVisbleやってました。
某サイトのサンプルコード見て、「何じゃこりゃ」と思ってました。
大変参考になりました。ありがとうございます。
622 :
デフォルトの名無しさん:2007/09/12(水) 11:18:19
すいません、HashMapについて教えて下さい。
public class A
{
int i;
String s;
public A(int i, String s)
{
this.i = i;
this.s = s;
}
}
こういうクラスがあったとして
A a = new A(1, "a");
HashMap hm = new HashMap();
hm.put(a, "a");
A b = new A(1, "a");
String s = (String)hm.get(b);
上記処理をするとsがnullになります。(aとbは値が同じなのに別物とされてgetできない)
別インスタンスだからあたりまえとも思いますが、Integerをキーにした場合は中の値を見てくれるのに…とも思います。
実際の値を比較してくれるうまい方法はないでしょうか?
>>623-624 ハッシュに対する基礎的なことが分かってなかったようでお恥ずかしい。
ありがとうございました。
アホなこと聞くんですが、もし
public static void main(String[] args)throws IOException {
Hoge hg = new Hoge();
hg.perform();
}
-------別のクラス
public void perform()throws IOException{
}
例外をキャッチしないでスルーするとそのメソッドを呼んだそれに例外が押しつけられますよね。
もし上記みたいに終点もスルーしてる場合、特に問題は起きませんが、IOExceptionは
どこに行くんですか?
ってかコンパイルエラーにならんの?
俺のeclipseではならなかった気がします。
例えばサーブレットのdoGet(---)でも同じ事が言えますよね?
自分の経験からですが、コンソールに例外の種類吐いて終わりでしたね。
失礼しました。
java3Dをインストールして
ttp://www.javadrive.jp/java3d/base/index1.htmlの サンプルを実行したのですがエラー続出で困ってます
エラーの種類
パッケージcom.sun.j3d.utils.universeは存在しません。
パッケージjavax.media.j3dは存在しません。
パッケージjavax.vecmath1は存在しません。
シンボルを解決できません。
作業フォルダはjavaで
Pathはc;\java3d-1_5_1\bin
javaのバージョンは1.4.1です。
java3Dのバージョンは1.5.1です。
設定の間違いでしょうか?
JListで、パスワードを忘れたときの設定として、
あなたの母親の旧姓は?
最初のクラスの担任の名前は?
好きなスポーツ選手の名前は?
等
といった選択肢を用意しているのですが、デフォルトで「あなたの母親の旧姓は?」
を選んでいる状態にしたいです。どうすればJListで最初から何かしらを選択している状態にできるのでしょうか?
>>631 「選択」はjavadoc に載ってるぞよ。
public void setSelectedIndex(int index)
単一セルを選択します。
633 :
デフォルトの名無しさん:2007/09/12(水) 14:58:50
何方か継承の考え方教えてください
>>632 気がつきませんでした。ありがとうございます。
パッケージクラスであってもSystem.out.println("hoge");とかやるときはインポートいらないみたいだけど
インポートの有無はどう判断すればいいんでしょうか?
>>635 java.lang パッケージだけは特別に宣言の必要が無い。以上。
java.langは基本的なものが入っているのでimportしなくてもかってにインポートしてくれる
Systemの正式名はjava.lang.System
638 :
635:2007/09/12(水) 16:24:36
そうだったのか・・素早い回答ありがとう。
なんというスルー!かわいそす(´・ω・`)
>630 eclipse使ってるならjarがビルドパスに追加されてないんじゃない?
使ってないなら環境変数に。java3D素人だからかんだけど・・・
とにかくググれば直ぐ答え見つかるよ。キーワードは自分で。
>>630 Java3Dは、インストール先のJDKが1つだけだったような気がするんで
もしかして、実行時のJDKと別になってないか?
自己解決できない段階なら3Dなんてどうせ扱えないだろ
Swingで少しならした方がいいんじゃないか?
SwingよりもGraphics2Dかと・・・。
643 :
デフォルトの名無しさん:2007/09/12(水) 22:55:27
JavaサーブレットとJSPの違いってわかる人いますか?
居ます
645 :
デフォルトの名無しさん:2007/09/12(水) 23:25:06
646 :
デフォルトの名無しさん:2007/09/12(水) 23:26:21
>>643 違いすぎて何を言えばいいのやら・・・。
サーブレット:サーバーで実行
JSP:クライアントで実行
っていうか全然似てないから間違えないと思うけど・・・。
>>646 JSPはクライアントで実行されるわけじゃない
クライアントはブラウザさえあれば、そのWebアプリが使えるってのがいい証拠
最終的にJavaのソースに変換されてコンパイルがかかる
649 :
デフォルトの名無しさん:2007/09/12(水) 23:34:53
>>647さん
サーブレットとの違いって何ですか?
HTMLの中にJAVAを書く→JSP
JAVAの中にHTMLを書く→サーブレット
初回起動時にコンパイル→JSP→二回目から速い
事前コンパイル→サーブレット→初めから速い
652 :
デフォルトの名無しさん:2007/09/12(水) 23:41:24
>>633 簡単に言い過ぎると。
指定したクラスの機能を持ったクラスを作れる。
指定クラスの中にあるメソッドを上書きできる。
指定クラスを拡張したり一部だけ変更したりするのに使ったりする。
ぜんぜんちげーよw
わかってないのにレスすんなよな
誰もわかる人居ないんですか?
JSPはコンパイルするとサーブレットになりますので、同じようなものです
657 :
匿名:2007/09/12(水) 23:48:50
TOK2のホムペ上にある、バナーレスを停止したいんですけど、どうしたらいいですか?
サイト内で聞いてみたのですが、応答なしでした。
>>651 サーブレットの中にHTMLの生成処理なんて書かなくていいだろw
MVCパターンぐらい勉強しとけよw
659 :
デフォルトの名無しさん:2007/09/12(水) 23:54:51
また質問なんですけど、TomcatはJavaサーブレット、JSPを処理できるアプリケーションサーバというのは調べたりしてわかったんですけど、
具体的にTomcatで何ができるのですか?
Javaサーブレット、JSPを処理できる
662 :
デフォルトの名無しさん:2007/09/12(水) 23:56:58
もうJSP=HTMLっぽい書き方ができるservletでいいじゃん
でもこう言っちゃうと暗黙オブジェクトやViewとしての役割とかすっとばしちゃうからだめなんだよな
とりあえず servlet jsp MVC あたりでググって自分でもっと調べたほうがいいんじゃね?
663 :
デフォルトの名無しさん:2007/09/13(木) 00:00:00
>>659 Tomcatはservletコンテナですぅ><
664 :
デフォルトの名無しさん:2007/09/13(木) 00:07:24
javaで正規表現の記述方法を教えてください。
下の10個の文字が1個でもあればはじきたいのですが、
正規表現が苦手なのと、エスケープの仕方がわからないのです。
; \ / : * ? " < > |
下のように記述して、矢印の先の結果になるようにしたいのですが・・・
String hoge;
hoge = "ab?cdefg";
System.out.println(hoge.matches("[; \ / : * ? " < > | ]")); → 結果:true
hoge = "abc:de;fg";
System.out.println(hoge.matches("[; \ / : * ? " < > | ]")); → 結果:true
hoge = "abcdefg";
System.out.println(hoge.matches("[; \ / : * ? " < > | ]")); → 結果:false
おねがいします。
; \ / : * ? " < > | のいずれかの文字が含まれていたらtrueにするって言ってる?
なら、正規表現の指定自体、全然ちがう
IDEはどの段階で取り入れたほうがいいんですか?
始めの入門レベルから使ったほうがいいのか、ある程度Javaがわかってから使ったほうがいいのか。
どっちでも
グラフィックイメージをコピーしたいのですが
コピー元 コピー先 幅 を指定したいのです
C#ではこれで全部指定できるのですが
srcRect.X = x0; srcRect.Y = y0;
srcRect.Width = xx; srcRect.Height = yy;
gr.DrawImage(_bmp1, x1, y1, srcRect, units);
JAVAのこれではコピー元の座標が指定できないようです
gr.drawImage(img,x1,y1,xx,yy,this);
ヒントでいいので使う命令か解説のあるページを教えて下さい
669 :
デフォルトの名無しさん:2007/09/13(木) 00:37:12
>665
レスありがとうございます。
正規表現の指定自体が違うとはどういうことでしょう?
matchesで[]の中の任意の1文字が入っていれば
識別できると思っていたのですが・・・
どう指定すればよいのでしょうか?
>>666 来年から仕事するってんならIDEからでもいいと思う。慣れろ。
勉強をしている段階の学生ならば最初はコンパイラとかに触れた方がいい
"[;\\/:*?\"<>|]"
672 :
デフォルトの名無しさん:2007/09/13(木) 01:17:44
>>671 それでできなくて困っているのです。
どう書けばよいものか?????
String hoge;
hoge = "abcd?efg";
System.out.println(hoge.matches("[;\\/:*?\"<>|]"));
できないってのはどうなるって事?
674 :
デフォルトの名無しさん:2007/09/13(木) 01:36:20
>>673 結果がfalseになるんです。
trueになってほしいのです。
以下のようにStringの中に; \ / : * ? " < > | の
1文字でも入っていたらtrueとなる正規表現です。
(以下のような結果になるのがほしいのです)
hoge = "ab?cdefg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:true
hoge = "abc:de;fg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:true
hoge = "abcdefg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:false
hoge = "abc\\<>defg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:true
hoge = "abcd345ほげ「^¥efg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:false
hoge = "abc\\<>defg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:true
>>672 Javaで正規表現を書く時は
”” の エスケープ表現と
正規表現としての エスケープ表現を2重に掛ける必要があるから注意。
たとえば、
ドット1つをマッチさせるための表現は
String dot_match = "\\.";
>>674 なので、\は、"\\\\"でマッチさせる必要がある
677 :
デフォルトの名無しさん:2007/09/13(木) 01:43:05
既存クラス A があります。(制約により A は変更不可です。)
class A {
void a() { ... sub(); ... }
void b() { ... sub(); ... }
sub() { ... }
}
このクラスを拡張して、a() メソッドが呼ばれた場合だけ sub() の内容をオーバーライドしたいのですが
どのようにするのがもっとも一般的なのでしょうか?
class B extends A {
void sub() {
if (a から呼ばれた)
// ほげ処理
else
super.sub();
}
}
679 :
デフォルトの名無しさん:2007/09/13(木) 02:02:03
回答ありがとうございます。
a から呼ばれたかどうかを判断する方法はどうすればよいでしょう?
メンバー変数でフラグをもって、a() 開始時に設定しようかと思ったのですが
クリア漏れとかありそうなので
>>674 正規表現がどうこうじゃないと思うよ。
System.out.println("abc".matches("a")); // false
System.out.println("abc".matches("abc")); // true
matches() は与えた正規表現が対象文字列の
「全部」にマッチするかしないかをチェックする。
java.util.regex あたりに使えそうなメソッドがないか調べてみては。
682 :
680:2007/09/13(木) 02:20:56
>>677 目的は何?
オーバーライドで実装することが目的なの?
a メソッドが呼ばれたときだけ別処理をすること?
>>677 >a() メソッドが呼ばれた場合だけ sub() の内容をオーバーライドしたい
無理
というか、サブクラスでのa()の振る舞いが変わるんだから、a()をオーバーライドするのが筋
a()が巨大なメソッドとかでコピペが発生して困るとしたら、Aの実装者を恨め。
Javaの勉強を始めたばかりです。
Cで定数を#defineする様な事は、Javaでは不可?
どこかのクラスでfinalな変数を用意すればいいのかもしれないけど、
変数としてメモリ上に置かれるのが、なんか気持ち悪い。
もっとお手軽に、ただ単にマジックナンバに名前を付けたいだけなのに。
こうじゃね?
String regex = "[;\\\\/:\\*?\\"<>|]
hoge = "ab?cdefg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());
hoge = "abc:de;fg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());
hoge = "abcdefg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());
hoge = "abc\\<>defg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());
hoge = "abcd345ほげ「^\\efg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());
hoge = "abc\\<>defg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());
687 :
686:2007/09/13(木) 08:31:46
あ、sはhogeの間違い
688 :
686:2007/09/13(木) 08:33:24
うぉ、String regex = "[;\\\\/:\\*?\\\"<>\]"
689 :
686:2007/09/13(木) 08:34:38
String regex = "[;\\\\/:\\*?\\\"<>|]"
むぅ
690 :
686:2007/09/13(木) 08:40:40
"|"もエスケープしないと駄目な気がする。"\\|"かな?
>>685 そのマジックナンバをクラスファイルにばらまかないことで
デバッグをしやすくしている設計だと思ってくれ。
どうしてもしたければ、純正ではないがいくつかプリプロセッサがあるので
それを使えばいいと思う。
Javaでデータベースを使おうと思うのですが、種類が多くどれを使おうか迷っています。
使い方としては、ソフトウェアで大量のデータを素早く選別してアクセスするために使いたいのです。
求めるものとしてはPC間の可搬性があり、ある程度の速度があるリレーショナル・データベースが望ましいです。
また、複数のスレッドから同時にアクセスするような場合はないです。
まだまだ若輩者ですが、助言よろしくお願いします。
>>692 その条件だけなら、MySQLをISAMで使うのが良いかな。
でも、スレ違いだと思う。
>>692 Java実装のDB?
H2はいかが?
というか迷っているなら全部試すのが一番早い。
自分の思う機能が揃っているか確かめておけ。
>>692 それだけの条件なら、大抵のDBMSは満たすよ。
もうちょっと条件を出して。例えばこんな。
・用途は?商用システム?オープンソース?ホビーユース?
・有料でもいい?無料がいい?
・想定するデータ量は何バイト程度か?
・OSは?Windows? Linux? 何でも?
分からなかったら、PostgreSQLかOracle XEあたりでいいんじゃない?
データ量が少なく軽量でいいのなら、HSQLDBもあり。
DB板行った方がいいような気もするけど。
>>685 プリミティブ型の場合、定数はメモリに置かれず展開されてコンパイルされることもある。
インスタンスの場合はメモリに置かれるのはしょうがない。
プリミティブ型なら気にせず static final していいんじゃね?
だいたいメモリに置かれようが展開されようが、どっちでもいいだろ。そんなに
速度に対してクリティカルなシステムつくるわけじゃねえんだし。
>>685 public final な定数を定義して、new して利用してるとしたら止めたほうが良し。
Java にはマクロはないから、プリミティブ型なら
とある interface に public static final な定数を定義するぐらいか。
static final なら、コンパイル時にその使用箇所に値が展開される。
オブジェクト型なら、Flyweight パターンを使うのかな…
698 :
692:2007/09/13(木) 10:50:16
朝の質問にもかかわらず、即レスありがとうございます。非常に助かりました。
>>693 すいません、Javaで使うためここで質問してしまいました。
ISAMについてはほとんど知らないので少し勉強してきます。
>694
HSQLDBは知っていたのですが、H2は知りませんでした。
いまから試してみようと思います。
>695
すいません、すれ違いでした。誘導ありがとうございます。
HSQLDBは今一番使おうと思っています。
とりあえずDB板をみながら、H2, HSQLDBなどを試してみようと思います。
アドバイスありがとうございました。
>>668 幅、高さの指定じゃないんだが、java.awt.Graphics の
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
ってメソッドを使ってみろ。
>>686 検証してから書き込めば問題なかろうに
private static final String REGEX = "[;\\\\/:*?\"<>|]";
private static final String[] TEXTs = {"abcdefg", // false 以下 true
"abcde;fg", "abc\\defg", "abc/defg", "abc:defg", "abcde*fg",
"ab?cdefg", "abcd\"efg", "abc<defg", "abc>defg", "abcde|fg",;
public static void main(String[] args) {
Pattern p = Pattern.compile(REGEX);
for (String text : TEXTs) {
Matcher m = p.matcher(text);
System.out.printf("\"%s\": %b%n", text, m.find()); }}
Windows+JDK6環境で、
存在するテキストファイル "C:\tmp.txt"
をWindows上のエディタで編集作業中に、
Java側で
File f = new File("C:\\tmp.txt");
boolean rtn = f.canWrite()
とすると、結果のrtnは常にtrueになります。
File#calWrite()メソッドが判定できる書き込み可否条件は、
同じJVM内とかで、ホストOS?側で対象ファイルが
どう扱われているかについては関知しないんでしょうか?
>>701 そのWindows上のエディタってやつ、本当にテキストファイルをロックしてる?
排他制御してないなら、それはtrueであってるだろうよ。
>>702 ありがとうございます。
まさにそれだったようです。orz
言われて、数種類のテキストエディタで編集状態にして
確認したところ、どれもこれも排他制御はしていない模様。。。
ブラウザのIEで開いた状態でcanWrite()を試したら、
ようやく例外を投げてくれました。。。
704 :
703:2007/09/13(木) 12:15:47
すみません、全然違いました。。。
自らの手で、C:\tmp.txtの読み取り専用属性をONにしてたじゃないか。。。
バカバカ。俺のバカ。。。orz
Win側から何やってもcanWriteはtrueのまま。。。
開いたファイルを排他制御してくれるアプリを探すのが先ですね。。。
一応、俺の使ってる TeraPad だとオプションから排他制御の有無を指定できるが
TeraPadですね。ありがとうございます。
さっそくダウンロードして試してみます。
>>705 TeraPadを使って、確認取れました。
重ね重ねありがとうございます。
JavaでカラーのBMPをモノクロのBMPに変換することはできますか?
できます
>>708 そういうプログラムをつくりゃあ、どんな言語でもできるだろうよ。
手軽にしたけりゃツール使うか、imagemagickでも使えば?
711 :
707:2007/09/13(木) 14:25:23
あれっ、なんかまたFile#canWriteで
TeraPadで排他かけて開いたのに、
結果がtrueになってる。。。
わけわからなくなってきますた。。。
徹夜3日目は、さすがにアタマがまわらない。。。orz
>>711 書き込めなかったらそのとき考える
ぶっちゃけ例外使え
canWrite はパーミッションを調べるだけだと思ふ。
だいたい、canWrite で書き込み可能を確認した次の瞬間に
他のプロセスによって書き込み不可にされる場合もありうるわけだし、
実際に書き込んでみて失敗を捕まえる方がいいと思うよ?
携帯アプリを作ってて
その上でのjava質問なんですが、
ここでいいですか?
よくないんですか?
質問の内容によるかもしれないんで、
質問投げてみます。もし違う板・スレで聞いたほうがよければ誘導お願いします。
Windows JDK6 J2SE1.6 の環境で
eclipse3.2 使ってS!アプリ(MIDP1.1)を作ってます。
import java.util.Calendar;でカレンダークラス?を読みこんで
カレンダーを作っているんですが、
firstMonth = Calendar.getInstance();
firstMonth.setTime(dateToDisplay.getTime());
firstMonth.set(Calendar.DAY_OF_MONTH, 1);
こんな感じで月の最初の日にちを取得することはできるのですが、
月の最後の日にちを取得するのにgetActualMaximum()を使おうとすると
エラー(定義されていません?)がでます。
roll()やadd()でやろうとしたのですが、それも同じようにエラーがでてしまいます。
こういった原因はどこを探せばいいのでしょうか?
>>718 吐かれたエラーを元に
Javaのソース見たり
googleで検索したり
JSP : MSX BASIC インタプリタ
サーブレット: MSXべーしっ君
>>721 ありがとうございます。
そっちを見なきゃいけなかったんですね・・
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Calendar.html こっち見てましたorz
>>722 基本関数が使えないとこんなベタなやり方でやるんですね・・
そのスレの
>>122みたいなやり方はいまいち僕には理解しにくいんで、
public static int getDayID(int Y,int M) {
int I[][]=new int[][]{{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};
int S = (Y % 4 == 0 && (Y % 100 != 0 || Y % 400 == 0)) ? 0 : 1;
return I[S][M];
}
こんな感じにしましたらできました。
皆さんありがとうございます。
>>723 カレンダのインスタンスに対して
set(Calendar.DATE, 0)
すれば前月の末日とれるんじゃね?
725 :
デフォルトの名無しさん:2007/09/13(木) 20:53:33
>686
ありがとうございます。
890でできました。
\に対してエスケープするのに\\\\となるとは
まったく予想していなかったのと|に\\でエスケープ
できることも知りませんでした・・・
726 :
デフォルトの名無しさん:2007/09/13(木) 21:35:01
質問なのですが、
ApacheはHTTPサーバの中で一番有名なサーバである。
情報の送信を行うコンピュータのことである。
HTML文書や画像等の情報が蓄積されており、ブラウザからの要求に応じて、情報を送信するものである。
であっているでしょうか?
>>726 情報の送信 情報の送受信
ブラウザからの要求 クライアントからの要求
・・・でその質問はJavaなのか?
Apacheはコンピュータじゃないな、コンピュータソフトウェアだよ。
・・・でJavaなのか?
まだょぅι゙ょなんだから大目に見てやれ
前の質問は解消したんですが
グラフィックで点を打つ命令がありません
ラインで同じドットを結んでもダメでした
点を打つ方法はありますか?
>ApacheはHTTPサーバの中で一番有名なサーバである。
今の連中がapache httpd以外知らないだけだから間違ってるような。
有名どころといえば3つあるだろ。
・・・で、java関係ないよな?
まあ、一般人も含めて一番有名なHTTPサーバーならApacheじゃね?
・・・で、Javaはどこ?
733 :
デフォルトの名無しさん:2007/09/13(木) 22:23:23
>>730 君の言う点ってのは小さな円の事?
だとしたら小さな円を描けば良いんじゃね?
小さな円で一応点らしきものをかけました
1ピクセルにおさまっているかわかりませんが
1命令で点打つ命令ないんですかね?JAVAは
点ってどんな意味なんだ
まさか、ディスクトップ上の1ドットの事とか言わないよな?
そうです
737 :
デフォルトの名無しさん:2007/09/13(木) 23:20:23
fillRectで1*1の四角を描いてはどうだろうか。
そりゃ無理だわwwwww
2次元
ならば点(Point)と描画の意味を考えてみろ。
点を描画するという事が本来は矛盾する行為という事だ
BufferedImage.getRGB()
BufferedImage.setRGB()
じゃ駄目なのん?
>>741 ん?そういうイデア論的な立場に立てば、本来線も描画できないんだが。
そういやJava2Dにput系メソッドなかったな。
まあ高レベルAPIだから当然だが。
だいたい1ドット打つネイティブコードの差異吸収って思ってるよりめんどくさいぞ。
>>743 だから「R1の円を描くことがドットを打つ事と同じ」でいいだろって意味と推測
そもそもJavaの座標系ってディスプレイの座標系とは違うわけだしなぁ
普通に使うと概ね一致するだけで・・・
BufferedImage.setRGBもよさそうですが 検索してみると
グラフィックを配列に置き換えてそこに書き込む方法もあるみたい
どちらにせよ画像の1ピクセルを塗りつぶす事しかできないというこったな
拡大とか色々な要素も絡むわけで、1ドットと考えるよりも頭をやわらかくして考えるべきだろう
1ドットと1ピクセルの違いが分かってないというオチだったりして
タイル(ピクセルデータの配列)に色突っ込むのは1ドットじゃなくて1ピクセルだぞ。
BufferedImage.setRGBか配列でやってみます
どうもありがとう
ドットに拘っている時点で大きな勘違いしているに違いない
752 :
デフォルトの名無しさん:2007/09/14(金) 03:13:45
なぜジャバにはポインタが無いのでしょうか?
また有った場合、何が出来ると思われますか。
という宿題が出たんだなw
情報処理か?
754 :
752:2007/09/14(金) 04:15:51
いえ宿題ではありません。
たんなる妄想です。
String str = "Hello, World!";
Pointer<String> pstr = Pointer<String>.salvage(str);
みたいな…
ネイティブ弄ったら出来るのかしら?
ポインタ使いたけりゃC#でもやれば
Cとかでもいいよ
Dの方が良いんじゃね。未だ実装に難ありだが。
ポインタっていうか、イテレータはあるだろ。
C系のポインタっていうのは、ようするにイテレータの機能を使ってるわけで、
それ以外の用途は間違いであり危険と思う。
そもそもメモリアドレスを自由に変えれるってアセンブリかよ、やつらは危険すぎる。
javaはプリイティブ以外はポインタだらけでしょ。見えないだけで
>>754 弱レファレンスぽいと思ってしまった
>>754 その、 Pointer<String> を使って、何をしたいつもり?
ポインタって入れ物とその中身を同時に操作できる謎の機能って印象だな
>>752 >なぜジャバにはポインタが無いのでしょうか?
ゴスリンのおっさんが入れなかったから。
>また有った場合、何が出来ると思われますか。
JavaVM をクラッシュさせられる。
普通にやってもクラッシュできるけど、より簡単にってことで。
あとバッファオーバーフローの脆弱性が簡単に追加できる。
Pointerってクラスならあるよ、たしか
直にメモリアドレス指すことがポインタの本質じゃない罠
オブジェクトを間接参照したいだけなら↓でいいじゃん
class Pointer {
Object o;
public void set(Object o) {this.o = o;}
public Object get() {return o;}
}
ポインタの演算の方の機能が欲しいならnioにそれっぽいのあるし
764 :
デフォルトの名無しさん:2007/09/14(金) 15:07:45
765 :
デフォルトの名無しさん:2007/09/14(金) 21:24:31
JTextPane内でタブを入力したときのタブの幅を変えたいのですが
そのようなことはできるでしょうか?
767 :
765:2007/09/14(金) 21:52:13
// タブの設定
FontMetrics fm = getFontMetrics(getFont());
int charWidth = fm.charWidth('m');
int tabLength = charWidth * 8;
TabStop[] tabs = new TabStop[2];
for (int j = 0; j < tabs.length; j++) {
tabs[j] = new TabStop((j + 1) * tabLength);
}
TabSet tabSet = new TabSet(tabs);
SimpleAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setTabSet(attrs, tabSet);
int l = getDocument().getLength();
getStyledDocument().setParagraphAttributes(0, l, attrs, false);
769 :
765:2007/09/14(金) 22:09:16
ありがとうございます!
質問力って大事だよね
人間って処理ステップが多くなるほど嫌気がさす生き物だからさ
771 :
752:2007/09/14(金) 22:43:11
すいません、JUnitで質問させてください
あるクラスをjunitでテストしようとしたんですが、
nullpointerエラーが出てしまい、原因を探していました。
テストするクラスを空クラスにし、junitテストクラス内に
原因らしきメソッドを記述した所、eclipseでエラーが表示されて
コンパイルが通りません・・・。
原因らしきメソッドはBeanUtilsのcopyPropertiesなんですが、
どなたかなぜエラーが出てしまうのかご存知でしたら教えて頂きたいです・・。
次レスにソースを記述します。
以下がテスト対象としている空クラスです。
------------------------------------------------------------------
package test;
import org.apache.commons.beanutils.BeanUtils;
public class Test1 {
}
}
-------------------------------------------------------------------
以下がjunit用のテストクラスです。
------------------------------------------------------------------
package test;
import junit.framework.TestCase;
import org.apache.commons.beanutils.BeanUtils;
public class Test1_test extends TestCase {
public void testTest() {
TestBean tb1 = new TestBean();
TestBean tb2 = new TestBean();
tb1.setName("てすと");
BeanUtils.copyProperties(tb2, tb1);
}
}
とりあえずエスパーなんだが、Commonsのライブラリは色々と依存関係があるぞ。
バージョンも確認して必要な他のライブラリが不足してないか確認汁
あと、JUnitを通さなければ発生しないの?
以下が、エラーの原因となるcopyPropertiesのテストのテストBeanです。
------------------------------------------------------------
package test;
public class TestBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
--------------------------------------------------------------------
宜しくお願い致します。
>>774 早速返信ありがとうございます!
上記のjunitテストクラス内のソース(copyProperties部分)を、
テスト対象のクラス内に記述すると、eclipseのエラー表示がなぜか消えるんです・・。
>>776 ほかの資料を何もみないで悪いが、
BeanUtils.copyProperties の仕様じゃないの?
TestBean class の private メンバーがコピーできなくて null になってるとか…
てか、コンパイル通ってないだけと違うか?
BeansUtilのjarにパスは通してある?
元々は、junitでテストしようとした対象クラスのcopyPropertiesの部分で
どうしてもエクセプションが出てしまい、junit内で単純なソースで試してみようと思ったら
やはりjunitソース内にcopyPropertiesを記述すると怒られてしまいました・・・。
かれこれ3日程グーグル先生や、自力で回避方法を探ったのですが、
どうしても原因がわからずこちらで質問した次第です。
>>777 Bean の Property をコピーするのに、その仕様はないと思われ
>>777 ググってそう感じてはいたのですが、確信がもてませんでした・・。
やっぱりそうなのかも・・orz
>>778 eclipseでパスは通して確かに通してあります。
なのになぜ・・
>>779 Eclipseのメッセージを書け、話はそれからだ
いきなりたくさんの方のレスがあって正直感動してます・・
>>782 eclipseでは、copyPropatiesの行で、
I
この行にマーカーがあります
nvocationTargetException
IllegalAccessException
と表示されています。
>>784のエラーですが、テスト対象となるクラス(class Test1)
に記述するとなぜかエラー表示がなくなります・・。
>>784 それ、例外の未キャッチじゃね?
マーカークリックして、とりあえずtry-catchで囲んでみろ
んで、実行してスタックとレースを張るべし
>>786 eclipseでのエラー表示が消えました!!
eclipseでjunitを実行してみたのですが、
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.beanutils.ConvertUtilsBean.<init>(ConvertUtilsBean.java:130)
at org.apache.commons.beanutils.BeanUtilsBean.<init>(BeanUtilsBean.java:110)
at org.apache.commons.beanutils.BeanUtilsBean$1.initialValue(BeanUtilsBean.java:68)
at org.apache.commons.beanutils.ContextClassLoaderLocal.get(ContextClassLoaderLocal.java:80)
at org.apache.commons.beanutils.BeanUtilsBean.getInstance(BeanUtilsBean.java:78)
at org.apache.commons.beanutils.BeanUtils.copyProperties(BeanUtils.java:114)
at test.Test1_test.testTest(Test1_test.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
org.apache.commons.beanutils Class BeanUtils
public static void copyProperties(java.lang.Object dest, java.lang.Object orig) throws
java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
>>787 ちょ…張る前に良く見たほうが
>>787 ライブラリが足らない
Commons-loggingを内部で使っている
790 :
787:2007/09/15(土) 00:06:29
連投規制に引っかかった為携帯で…
>>788,789
ありがとうございます!!
NoClassなんちゃらは、バス通しているライブラリからも見つからない事だったんですね…
皆様本当に有難うございました!
これで日、月の休出はなくなりそうです(ノ_・。)
この程度で休日出勤かよw
bean-utilsは、bean-utils.jar以外にもextで別jarが入ってる筈
2,3人の30分を使って20時間前後を空けたんだとしたら、お得…なのか!?
まあなんだ、
>>774のエスパー様がすばらしかった、と… なんだかな…
学生かと思ったら社会人かよw
こんなんで残業代請求しないでくれよ〜〜〜〜
これに三日もかけたってことは、そもそも問題の切り分け方とか、
原因究明アプローチの方法が間違ってるんじゃないかな?
797 :
787:2007/09/15(土) 00:52:37
みなさま、本当に単純な事を気づかずお手数をおかけして申し訳ありませんでした・・。
会社では、これがテスト環境と言われて渡された物を使用していたので、
まさかlibが足りないとは思っていませんでした・・orz
これ以前に、この原因を見つける途中に共通関数のバグを見つけたりして、
どこかソース内で他の原因があるものと・・。
初歩的なな問題で申し訳ありませんでしたが、
eclipseのエラーログ等これで少しはCからjavaの技術者に近づけたようで本当にいい経験になりました。
今後、少しでも早くこちらで質問に答えられるように精進したいと思います!
ちなみに本日は体調不良で会社を休んだんですが、
この問題が頭から離れない為、自宅で検証してました・・・。
伸びてると思ったらライブラリの依存関係も解決できない職グラマか・・・。
linuxでもいじって修業したら?
なんで必須ライブラリの依存性解決が運なんだ。あほかw
>>801 なんかの合性悪くて動かないとか、そういうのばっかじゃん
はっきり言って運だよ
commonsは・・・運というか、バージョン依存性がありまくるからな・・・
どうかと思うわ、あのライブラリ。
使うの躊躇する。
POMちゃんと書いておいてくれればいいんだけど、たまにいい加減な奴があるな
今回の人はJavaの経験が少ないようだし、一式を丸投げされてはまっていたらしいから仕方ない状況だとは思うぞ。
それにJavaやってきた人ならば、1回くらいはライブラリの依存関係で半日くらいのハマリは経験してるだろ?
>>805 String型の長文を書くときに、よく
String str = "〜"
+ "〜"
+ "〜"
);
とかするんですけど、これって全部を一つに囲った場合と比べて遅くなりますか?
807 :
806:2007/09/15(土) 14:26:48
すいません、先頭の”
>>805”は無視してください。
>>806 リテラルor定数だけなら遅くはならないが、
そのサンプルはコンパイルエラーだな。
>>806 コンパイル時に結合されちゃうから問題ない
中に変数が入るとダメだけどな。
とはいえ、パフォーマンスを気にするほど遅くないので気にスンナ
810 :
806:2007/09/15(土) 14:51:37
>>808 即レスありがとうございました。
これで気兼ねなく使えます。
811 :
806:2007/09/15(土) 14:52:56
>>809 ありがとうございます。これまでずっとStringBuilder使ってたので、ずいぶん楽になります。
>>811 StringBuilderのが良いぞ。
Stringの連結は自動フォーマットをかけた時に崩れやすいから。
もしくは、こんな風に書く。
String str = "";
str += "1行目";
str += "2行目";
str += "3行目";
ソースの可読性の為にフォーマッターにも優しい記述で。
>>812 Builder は非同期だからってやつですね。
可読性ってのにも賛成です。未来の自分に優しく!
で、後者なのだが…私の記憶では是は忌むべき記述法(追加毎インスタンス生成)なのだが、
ううむ…最近のコンパイラはこれも最適化してくれるのか
>>813 変数が含まれないケースでは最適化される。
なので、定数として長い文字列を宣言する場合は有効。
しっかりと切り分け出来るPGならいいけど、よく解ってない人に書かせるってならば、Builder/Bufferで統一させた方がいいかも。
swingのTimerについて質問です。
自分で調べ、なんとかクラス内で
ActionListener timerEvent =
new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
//中身
}
};
Timer tim1 =new Timer(delay,timerEvent);
tim1.start();
のように記述してタイマーを利用できるようになったのですが、
ActionListenerの中からタイマーを止めたり、delayを変更したいとき、
どのように記述すればよいでしょうか。
中身の時点では tim1 は宣言されていないし、
timerEvent を宣言する前には tim1 は生成できないし・・と。
>>815 解り辛い表現で申し訳ない。
利用条件は理解して使い分けているつもりです。
>>816 良く解らん。
タイマーとリスナーで何をやりたいんだ?
819 :
816:2007/09/15(土) 16:54:23
>>818 記述不足で失礼。
タイマーの動作をActionListenerの中身で記述しているつもりなのですが、
そのタイマーによって呼び出される動作の中から、
何らかの条件によってタイマー自体を止めたいのです。
もしくはそもそもTimerの使い方が変なのでしょうか・・?
何を言ってるのか良くわからんがメンバに持てば?
Timer timer; // メンバ変数
---
ActionListener timerEvent =
new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
if(条件) {
timer.stop();
}
}
822 :
816:2007/09/15(土) 17:16:49
>>820,821
ありがとうございました、おかげで解決しました。
言われてみれば簡単な事なのに、3時間近く悩んでましたorz
>>822 気にスルナ。俺の知り合いで二年間メソッドはメインからしか呼び出せないと思ってたヤツがいるから。
特定のキー(F5とか)が押されたらプロセスを終了する
ようなプログラムを書きたいんですが、どのクラスを
どう使えばよいのかわかりません。
どなたか教えていただけませんか?
GUIなのかCUI(コンソール)なのか解らんと答えようがない。
あと、プロセスってどういう意味で使っているのかを説明汁
ActionListnerインタフェース
827 :
824:2007/09/15(土) 21:54:15
返信ありがとうございます。
>>825 CUIです。プロセス=プログラムという意味で使いました。
>>826 ActionListnerについて調べましたが、調べた範囲では
ActionListnerは特定のFrameに対してフォーカスが定まるような
状況でないと使えないようでした。
プログラムが動作している状態なら常にキーのタイピングを検知できるよに
したいんですが、ActionListnerで実装できるんでしょうか?
>>827 CUIか
ごめん、これGUIだわ
本当にごめん・・・
それは無理
そもそもコンソール上での打鍵はOS依存だし
>>829 関係ない人間だが、勉強になったわ。ありがとう。
>>827 代替手段はJavaで別のプログラムを起動してSocketかなにかで通信する。
もしくはJava以外のプログラムでプロセスを強制終了する
どちらにせよ強引に割り込まないと無理。
ていうか、なんで強制終了させなきゃいけないの?
jettyとかって、ctrl+cのshutdown hook使ってなかったっけ。ってかキーはctrl+cに縛られるけど。
アプリケーションが自分で終了できる仕組みがない事に問題があるのでは?
さてはキーロガーを作る気だな。
>>834 変な風に煽るのやめろよ。
実行側環境(JRE)に依存するウイルス作る馬鹿がどこにいるんだよ。
>>833 要件によるんじゃね?
そもそも、CUIなのにキーイベントを監視する必要性があるほうがおかしいと思うナー
せめてkillシグナルを受け取って終了するとか、標準入力からコマンドを受け付けて終了するとか、
終了用ファイルの有無を監視するとか、そういうのが普通じゃないの?
シグナルの受け取り方もOS依存でね、これがまあ、winの糞っぷりときたら・・・。
838 :
デフォルトの名無しさん:2007/09/16(日) 14:06:08
Javaからコンソールを立ち上げて殺すってのはどうだ。
>>838判断が出来ないの?
殺すなんて言葉は良くないよ
えっと、killのことですよね?殺すっていいますよね。。。
誰か、こういうときどう突っ込んでいいのか教えてください
>>840 throws UnreadAirResponseException
$ kill -Kill 839
そういえばJavaって他のプロセスにアタッチするときってどうするんだろう
JNIに頼るしかないよね?
Javaで他のJavaにってこと?
RMIだってあるじゃん
プロセスにアタッチっつってんだろおおおお
最初からJavaで書くなよ・・・
「プロセスにアタッチ」って一般的な用語じゃないし。
デバッガでも書きたいのか。
848 :
デフォルトの名無しさん:2007/09/16(日) 18:17:00
socket
プロセスにアタッチってどういうこと?
フォークじゃなくて?
どっちにしてもMS-DOSの糞実装が邪魔する話になって来てるな。
850 :
デフォルトの名無しさん:2007/09/16(日) 20:40:56
Applet を Firefox でみているのですが、Applet のクラスを変更しても、Firefoxの画面が変わりません。
firefoxの更新ボタンやキャッシュを消したりしましたが同じです。
Sample.classのファイル を消しても同じ画面がでます。
どうしたら、いいのでしょうか?
---------------------------
<HTML>
<BODY>
<APPLET CODE = "Sample.class" WIDTH = 500 HEIGHT = 500>
</APPLET>
</BODY>
</HTML>
>>850 IEでも同じ現象が起きるのか?
IEで反映されるのならばブラウザの問題。
火狐のスレに行って聞いたほうが早いだろう
原因の本質ではないかもしれないが、500の部分もダブルコーテーションで囲っとけ。
852 :
850:2007/09/16(日) 21:10:20
IEでも試しましたが同じでした。。。
>>850 クラスがコンパイルされてないんじゃね?
そのHTMLとクラスファイルのある場所の構成を書いてみ
俺も試したけど、同じ事象になった
バージョンは1.6.0_02
Javaコントロールパネルからインターネット一時ファイルを消してもダメ
この状態でFirefoxのキャッシュを全て消して、Firefox自体を再起動すればうまくいきそうだけど、
いまニコ動見てるから、誰か変わりに頼む
855 :
850:2007/09/16(日) 21:32:23
c:\test\sample.class
c:\test\sample.java
c:\test\xxx.html
ですべて同じディレクトリにあります。
>>855 ためしにHTMLを少し変更してリロードしてみれ
857 :
854:2007/09/16(日) 21:37:01
そういえば、Javaコンソールを立ち上げて、キャッシュ消せるんだった
コマンドは忘れた
たしかコンソール立ち上げると、各コマンドの説明が出るはずだからわかるとおもう
Javaコントロールパネルの詳細設定でタスクトレイのアイコンを出すか、コンソールを常に表示するか、設定すればOK
後はVMがClassをロードしてしまい、そのキャッシュというかロードされたクラスがVM(クラスローダー)に残っている可能性が高いな
Firefoxならツール→JavaConsoleで表示できるな
プラグインを入れていればだけど
こっちかな?
コントロールパネルのJavaの設定から、キャッシュをクリアしてみて。
クラスファイルとかはブラウザのキャッシュとかには入らない模様。
Firefox再起動、又はクラスローダキャッシュをクリア(x)後再読込でいけたよ
>>859 そのタグはHTMLのキャッシュ指定だよ、ちなみに無視される事もある。
864 :
850:2007/09/16(日) 21:49:13
>862
できましたありがとうございました。
おまいらこういう簡単なことには食いつきいいなw
って言おうとしたけど、荒れそうだから辞めたいんだけど、
でもやっぱり言ってみたいこの葛藤をどう処理すればいいですか?
>>866 自演は飽きたよ
自分で相手をバカにしたくせに、相手にバカにされるとイラっときて、
くだらないレスの応酬するのも疲れるから、我慢してイライラを飲み込むんだけど、それも疲れた
誰か俺にこういうときのうまい対処法をウィービングしてくれまいか
子供の喧嘩をしてこなかったせいで、こんなことでストレスためてる大人が居ます
こういうことを書くと、スレを荒らすな、とか板違いとか、いろいろ言われるんだろうな
気が滅入りながらも、書き込みボタンをポチっとな
>>867 あんたとは、いい酒が飲めそうな気がする
うまくコミュニケーションが可能な場所がありゃいいんだがな
>>867 スレ違いとわかってて書き込むんだからどうしようもないな
ストレスためてまで答えてくれなくていいから、スレを閉じてくれ
マルチコアのCPUをフル活用したいのですが、現在はシングルスレッドのプログラムしか書いていません。
やはり少しでも早くしたければ、マルチスレッドでプログラミングする必要がありますか?
>>871 その質問だと、「あります」で終わるんだけど、いい?
>>871 解らない。
マルチスレッドにすれば早くなるかと言えば必ずしもそうとも言えず、シングルスレッドの方が早い場合もある。
なにを並列に処理させるか、が重要。
とはいえ、マルチコア当たり前の時代になってきたので、並列処理に関しては学習しておくといいと思う。
探索をしているので、並列処理は可能なのですが、プログラムが複雑になるので迷ってるんです。
計算時間が膨大なので、少しでも短くなると助かるのですが。
追記。
スレッドセーフに設計すると、どうしてもパフォーマンスはトレードオフの関係になる。
スレッドセーフにする事によるパフォーマンス低下よりも並行処理させる効果が高くなると判断できるならばマルチスレッドにする方がいいが、逆もあるということ。
>>874 探索にIOが絡んでくるならば、確実に効果は出るはず。
ただ、現在シングルスレッドで作られているプログラムを後からマルチスレッドに対応させるのだけは自重するべき。
IOの書き込み自体の処理を並列化したところで、結局IO待ちが発生するから意味は無いしね
つかいどころは、例えば、エンドユーザがファイル保存を指示して、すぐにレスポンスを返すために、
ファイル保存処理をスレッド化しておく、とか
あとはダウンローダーのダウンロード処理なんかもスレッド化の対象だね。
ダウンロードが完了するまでアプリケーションが固まってたら、誰も使いたいと思わないし
>>874 探索処理をしている間、先に処理できるものがあるかどうか、っていうのを考えてみて
あるいは、探索処理を細かくわけて、並列に実行できるところがあるのか、どうか
たとえば、探索対象A,B,Cがあって、
AとBは同時に探索できて、AとBの処理が終わればCの処理が実行できるっていうんなら、
AとBをスレッド化させれば早くなる
>>877 それは逆だ。
IOが発生すると処理は多少なりともブロックされるわけで、その間はCPUは遊んでいる。
従って別のスレッドにCPUを使う仕事をさせられる為、効率があがる。
なので、grepのように大量のファイルへのIOがある場合、並行処理は効果が高い。
>>878 マルチコアであれば、という前提条件が抜けているぞ。
シングルだと遅くなるので注意。
>>879 あーちがぅぅ
やっぱり誤解させてしまった
書き込み処理そのものを並列化しても意味が無い っていうこと
ディスクに書き込む部分の処理をスレッド多重でやる
たとえば、複数ファイルに書き込む処理とか
スレッドA→ ファイルA書き込み
スレッドB→ ファイルB書き込み ⇒ ディスクが1つしかないなら、結局 → A →B →C (順不同)
スレッドC→ ファイルC書き込み
Texみたいなことが2chで出来ればTexが普及すると思うんだよね
もしくはTexエンジンをブラウザ実装するとか
>>883 理工系の学生以外は喜ばないだろ
せいぜいがWikiフォーマット止まり
数学板とかローカルには実装したらいいかもしれんがその他では無駄だろ
886 :
871:2007/09/17(月) 00:17:57
>>875-882 ええっと、一気にアドバイスをいただいて少し混乱してるんですが、
マルチコアなら同時に二つのスレッドが実行できるっていうのはあってます?
だとすれば、なんのIOも含まない処理なら、
同じ量をシングルスレッドでするのとマルチスレッドでするのとを比べると、マルチスレッドの方が早いと思うんですが、あってますよね?
マルチスレッドは同期のロスが必ず入るから、単純に倍にはならない
デュアルコアなら丁度2つのスレッドが走る状態だと最も効率がいいが、
それ以上だとスレッドの切り替えにかかるロスがあるので効率は下がる
結論
デュアルコアならスレッド2つを大体同じくらい使うように設計すると最も効率が良い
が、実装も複雑になるので素人はシングルスレッドで書いたほうが早い
>>886 マルチコアなら同時にスレッドを2つ以上実行する時の効率があがるだけ。
(シングルでも当然マルチスレッドはできる)
マルチスレッドにすれば早くなるかは設計次第。
理想的に並列処理が実現できるならば最大で倍の速度は出るかもしれない。
でも、現実問題としてそこまで理想的な並行処理ができる事は少ない。
マルチスレッドにすればそれだけ実装の手間がかかるし、テストしにくい。
おまけに一番難しいのはどのように分割するかに正解がない。
バグがあっても早ければいいというわけじゃないだろ?
889 :
871:2007/09/17(月) 00:32:34
うーん、やってる探索が簡単なので、マルチスレッドのほうが早いと思ったんですが、
話を聞いてるとリスクが多そうですね。
時間的にも総余裕があるわけではないので、今回は見送ろうと思います。
マルチスレッドについては、また日を改めて勉強することにしました。
アドバイスをくださった皆さん、本当にありがとうございました。
最後の最後でマルチスレッド化は秘密のバグを埋蔵するのと同じだから、それが賢明
箱○は1コアで2スレッド扱えて3コアあるんだよな。
そう考えると3万は安いw
すっごく当たり前なのかもしれないんですが、
一つのsocketで入力、出力Streamって一つだけですよね?_?
動的にStream数増減させたいんだけど、そのつどnew socketするしかないのかなと思いまして。
inputStream.readInt()で読み込まれたら、Streamを別スレッドに渡してやって
また次のinputStream.readInt()で待つみたいな方法ないですかね
>>892 当然ながらその通り。
相手が複数であるならばその都度ソケットを開くしかない。
相手が単一ならば複数開かない方が結果的に早いと思う。
あと、よほどのことがない限りはObjectをシリアライズして渡す方が楽だよ
もっと楽なのはRMIだけど
894 :
デフォルトの名無しさん:2007/09/17(月) 02:59:34
下記の問題なのですが、どなたか分かりますか?
お願いします。
以下のような Example クラスがあります。
increment メソッドを使用して count の値を +1 しています。
実行するとコンソールには加算前、加算後共に "0" と出力されます。なぜでしょう?
public class Example {
public static void main(String[] args) {
int count = 0;
System.out.println("加算前 = " + count);
increment(count);
System.out.println("加算後 = " + count);
}
private static void increment(int count) {
// 加算
count++;
}
}
値渡しだからです
896 :
デフォルトの名無しさん:2007/09/17(月) 03:06:43
はい。そうだとは思っていたのですが、
この問題に対しての値渡しの説明を詳しく書くとしたら
どういう風に解答していいか、分からなかったので。
どうなんでしょうか?
OOPなら普通カウンタを隠ぺいしてインクリメントした値を返すメソッドを持たせるんだけどな。
詳しく書くも何もjavaにはcall by valueしかないから。
899 :
デフォルトの名無しさん:2007/09/17(月) 03:21:14
mainとincrementのcountは同じものでない(値渡し)
staticなcountを作って使えば良い(回答違い?)
incrementってprivateなのか
>>893 ありがとうございます。
相手(接続マシン)は単一なのですが、複数スレッド使って通信します。
複数のスレッドで同一のStreamを共有するのは処理がややこしくなるので、
別Streamを用意しなくてはと思ってました。
やはりStreamを増やすには新しくsocketを作るしかないのですね。
StreamにStreamを渡すことって出来るのかな?なんて思ったのですが、
シリアライズできません!って例外投げられました。
ちなみにStreamにStreamを渡すこと
って出来るのでしょうか(汗)
そんなマルチプレクサみたいな機能はない
自分でそういった仕組みを作ってもそんなに難しくないと思うけど、
イヤならおとなしく複数のソケットを作っとく方がいいと思う
Java上でツリー構造を使いたいのですが、組み込みのクラスなどありますか?
SwingのほうのライブラリにJtreeというツリー構造を表示するクラスがあるみたいなんですが、
純粋なツリー構造のクラスが見つかりません。
またないとすれば、自分で作るべきでしょうか?
903 :
デフォルトの名無しさん:2007/09/17(月) 10:12:27
Hoge hogehoge(){
return new Hoge();
}
piyo(){
Hoge hoge = hogehoge();
//ここでhogeに対する処理
}
こう書いた場合、hogehogeで作ったインスタンスをpiyoで使うことに問題はありませんよね?
スコープの理解が曖昧なので、hogehogeの中で作ったインスタンスを外で使うのはまずいのかな?と不安になっています。
>>904 Javaのインスタンスはすべてヒープに作られるから大丈夫
>>902 JTree は純粋に表示をするだけで、ツリー構造のデータ自体は DefaultTreeModel で管理されてる
DefaultTreeModel の方は、お望みの、表示を伴わない純粋なツリー構造のクラスだが・・・
表示する目的がないなら、用途に合わせて自分で作った方がいいんじゃね
907 :
902:2007/09/17(月) 11:58:20
>>906 そうですか。いかにもGenericsで作られてそうだったので、
車輪の再発明になるかと思い、躊躇していました。
アドバイスに従って一から作ってみようと思います。レスありがとうございました。
昆虫の脚の数って(一部例外除き)6本固定じゃん
この6って数字もfinalで定数にするべき?
「昆虫クラスだからわかりそうし、定数にすると打つのも読むのも面倒だし、いいかな」
と思ってるんだけど、やっぱり避けたほうがいい?
>>905 安心しました。
ありがとうございます。
した方がいいと思う
ソースコードに突然 6 とか書いてあっても、何の意味の 6 なのかわかりにくくない?
>>907 車輪の再発明にはならんよ。
Tree構造作るのはパターンだけど、作るたびに要件が違うから簡単なユーティリティクラスにするのが難しい。
だから、作りたい構造にあわせて作って問題がない。
中でArrayListとか使えば作るのは簡単なわけだから。
>>908 いくつかの解法はあるけど、脚の数は定数にはしないべきかな。
private final としておいて、コンストラクタで定数のデフォルト値(=6)を設定する.
こうすれば原則としては6本になるが、サブクラス化などをして6本以外の昆虫に拡張できるようになる。
自分は、昆虫クラスに例外があるってならばそうする。
6本以外の昆虫っているの?
>>908 それは分類学上の定義なので、6本脚が昆虫で4本脚はそれ以外と定義するとすれば、
当然constになるね。何をもってクラスの唯一性を識別するかによる。
たとえば昆虫クラスと人間クラスはどうちがうの?という話になる。
俺は使えるところはすべてstatic, finalにしてるよ。
ソースコードが読みにくくなるけど、それがついてるだけで安心できる。
初心者は配列のfinalには気をつけるべきだろうけどね。
配列の中身をfinalにすることってできないの?
できるよ
幼虫の足は何本にすればよいですか?
>>918 ラッパーを使えばよかった気がするけど忘れた。
確かEffective Javaの最初のほうで読んだ気がする。
超初心者です。現在、Eclipseでi-appliを作ろうと思っているのですが
いざ実行してみようとすると、
Reason check the details
詳細
com.nttdocomo.eclipse.DoJaBuildException: Failed create jarC:\Users\user_name\workspace\MyProject\bin\Project_name.jar
というエラーが出てしまいます。JARファイルの作成に失敗している事はわかるのですが
どう対処すればいいのか良く解りません。ご教示お願いします。
Eclipseは3.*、DoJaは5.0です。
配列へのアサインをfinalにしたいんだったら
専用クラス作った方が早い。
ワザワザ、割り当て出来るかどうか考える操作に効率がいいとは思えない。
専用クラスでセットは1回のみ、という要件は簡単に実装できるでしょ。
>>921 超初心者が携帯からJavaに入ろうとすることが間違い
せめて簡単な入門書程度を終わらせてからにするべき
配列の中身はfinalにできないけど、外部クラスに公開しなければOK。
getterで取得させたい場合は、
return new Arrays.copyOf(array, array.length);
でコピーを返す。
ただし、コピーであると知らずに操作して問題が起きても俺は知らん、って方法。
>>923 解りました。些細な問題という事ですね。もう一度調べなおしてみます。
926 :
924:2007/09/17(月) 13:57:58
new いらね
>>925 違うっての。
問題が何か切り分ける事もできなければ、質問しようにも相手に何が解っていないのかが伝わってないんだよ。
つっこみをいれるならば、
実行しようとしてみるってなんだ?
コンパイルは通ったのか?
それはプラグインの問題じゃないのか?
Javaのバージョンは?
Eclipseは3.1 3.2 3.3 でかなり違うが?
928 :
デフォルトの名無しさん:2007/09/17(月) 15:49:08
JTableに行、列の挿入削減機能を実装して、
メニューから機能を実行できるようにしています。
JMenuItem(Action)にCtrl+Aなどのキーボードアクセラレーションを設定したのですが、
セルを選択した状態だと、アクセラレーションのコマンドの入力により
JTableのセルが編集状態に遷移してしまい、うまく機能を実行できません。
うまい解決方法があれば、お知恵を拝借したいのですが。
コード見なきゃわかんねーよ
930 :
928:2007/09/17(月) 16:10:29
関係ないコーディングのミスでした。
質問する前の確認不足で申し訳ないです。
>>931 それでも、結局はクラス内部での変更は防止できないんだけどね。
外から見て定数なだけ。
>>932 たしかにな。
結局のところ、Javaでは根本的にオブジェクトの変更は不可避だってことだろう。
>>933 どうしてもってならば、配列では実現できないから不可変なListに保持して使う時に配列を生成するしかないだろう。
とはいえ、生成した配列自体は可変。
防御的コピーと定数化はまた目的が別だろ
配列を定数化したいができない。
仕方ないので防御的コピーで外部からの変更からはガードする。
だから、まったく別の話ではない
>>936 Javaではそうかもしらんが一般論では違うだろ
防御的コピーで返す値は定数とは限らんわけで
java.util.concurrent.locks.ReentrantReadWriteLock に関して質問です。
いわゆる読込み/書き込みロックを実現するクラスかと思いますが、次のような理解で間違いはないでしょうか?
・書き込みロックを取得しようとすると読込みロックが存在しないタイミングまでブロックされた後でロックがかかる。この時、他の読込み/書き込みはブロックされる
・読み込みロックを取得しようとすると書き込みロックが取得されていなければ処理が実行され、他のスレッドが読み込みロックを取得していても並列に処理される
940 :
デフォルトの名無しさん:2007/09/17(月) 18:10:35
>>939 レスあり。
リファレンスを読んでみたんだけど、いまいちピンとこなくて。
941 :
デフォルトの名無しさん:2007/09/17(月) 20:29:11
扱う画像は同じだと仮定すると
BufferedImageとImageIconはどちらが多くのメモリーを消費するのでしょうか。
942 :
デフォルトの名無しさん:2007/09/17(月) 20:37:49
943 :
デフォルトの名無しさん:2007/09/17(月) 21:01:13
>>942 ・BufferedImageに画像Aを描画したもの(幅、高さは画像Aと同じ)
・画像AのURL情報を元に生成したImageIcon
この2つのオブジェクトが使用するメモリーを比較したいのですが・・・
>>943 差があったとしても、その差がアプリケーションの挙動に影響を及ぼすほどのサイズだと考えられるか?
きっと何千枚とオンメモリで保持するんでしょ
946 :
デフォルトの名無しさん:2007/09/17(月) 22:05:16
自己解決しました。
eclipseからJARファイルをどうやって作るのでしょうか?
File -> export -> Java -> JAR file で作れんじゃない
>>948 作れました。
神さま、ありがとうございます
948を伊勢神宮にまつっても問題ないと思うな。
コマンドプロンプト使ってるんだけどJavaは正式なパッチ名として認識されませんとか出てくる
なんでかな
パス切れよ
ああ、すまん
ありがとう。
サーブレットの勉強中なのですが、フォームを使って値の受け渡しをするところでわからないことがあるので質問させてください。
フォームのサブミットボタンを押したとき、テキストボックスなどに入力されたものとは別に変数を作って値を持たせるにはどうすればよいでしょうか?
その値や変数は利用者が設定するのではなく、ブラウザ側で自動的に設定されるようにしたいと考えています
957 :
デフォルトの名無しさん:2007/09/18(火) 13:31:30
>>956 hidden使う。
でも、java関係ないね。
958 :
デフォルトの名無しさん:2007/09/18(火) 15:10:48
>>272さん
お返事ありがとうございます。返事をしたつもりでいて遅くなって申し訳ありません。
ところでJMFひらけましたが、1フレームごとにキャプチャってどうすればよろしいでしょうか?
JMFサンプルとかが英語ばっかりでかなり大変なので・・・
sage忘れ
strutsで作ったシステムのWARファイルを作ったら、
プログラムはWARファイルの中のファイルを実行するんですか?
WARを解凍して、解凍したファイルを実行するんですか?
それがどうした?
socketについて質問です。
以下のように送信側で1を送信し通信終了、
受信側で1を受信して通信終了とコーディングしたのですが、エラーになってしまいました。
送信側
out.write(1);
out.flush();
socket.close();
-----------------
受信側
int i = in.read();
socket.close();
実行すると、
送信側で SocketException socket closed
受信側で EOFException
って出ます。
送信完了後に切断したいのですが、どうしたらいいのでしょうか。
>>963 通信の基本を勉強した方がいいんじゃね?
てか、電話だってどっちかが「切る」んだろ
話すだけ話して聞いたか確認せずに勝手に切られたら相手困るじゃねーかww
かなりくだらない質問でちょっと気が引けるのですが・・・
最近System.out.printと書くのがめんどくさくなってきたんで、こんなクラスを作ってみました。
public class S {
public static final S o = new S();
public void p(Object o){
System.out.print(o);
}
public void p(int i){
System.out.print(i);
}
・
・
・
}
使用例
S.o.p("test");
作ったのはいいんですが、どうも納得いきません。
System.out.printの略だとわかりやすいように作ったんですが、これはこれで打ちづらいです。
もう少しスマートで使いやすくならないでしょうか?
アホってよく言われないか?
>>965 public class S {
private static java.io.PrintStream out = System.out;
public static void p(Object o){
System.out.print(o);
}
public static void p(int i){
System.out.print(i);
}
:
:
}
使用例
S.p("test");
ヒント1: static import
ヒント2: java.util.logging または log4j
ヒント3: sysout + [Ctrl + O]
>>967 private static java.io.PrintStream out = System.out; は要らねえ
全てのSystem.out.printを使うクラスにpublic void p(Object o)等々をこぴぺで入れておく。
staticコンテクストから呼ばれる可能性があるならpublic static void p(Object o)にしておく。
使用するときはp("test")だけで呼べる。
967のS.pをstatic importすれば完璧
ぶっちゃけめんどくなるほどsysoutばっか使うプログラムってあるかぁ?
コード補完で十分だろ
notepad.exeでも使って書いてるんじゃまいか?
>>967>>969 少しだけ短くなりますね。
"."が少なくなるのはいいですね。
>>968 ヒント1
import static java.lang.System.out;
public class Test{
public static void main(Strin[] args){
out.println("");
}
}
目んたま飛び出るかと思いました。
こんな便利機能があるとは。
1.6でコンパイルしていたんですが、Eclipseに警告されて1.5でコンパイルしました。
ヒント2
コーディングが少し長いですが、気軽にログに残せるのはいいですね。
勉強になります。
ヒント3
[Ctrl + O]というのがよくわかりませんが、Eclipseを使用しているのでCtrl+Spaceを押してみたら勝手に変換してくれました。
第三者にもわかりやすく、自分も楽ちんでとても良いですね。
短時間で多くの事を学べました。感謝の極みです。
>>970 使用頻度の高いSystem.out.printを毎回ちょこちょこ書くのがめんどうだったんで
最初は
>>965みたいなものを継承して作ってました。
private void sop(Object o){
System.out.print(o);
}