トップページ⇒tech
1001コメント350KB

【初心者】Java質問・相談スレッド108【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/11/07(水) 22:39:09
プログラミング言語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質問・相談スレッド107【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1192666106/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝のう存じます。

次スレは>>980あたりで。
0232デフォルトの名無しさん2007/11/12(月) 10:05:01
まぁ、まずホームページのオーナーに聞くのが早いんじゃないか?
後はうまく宿題にしたてて宿題スレに投げてみるとかw
0233デフォルトの名無しさん2007/11/12(月) 12:26:08
>226
どういった感じで変わるのでしょうか。

>227
なるほど、納得です。ありがとうございました。
0234デフォルトの名無しさん2007/11/12(月) 12:55:38
>>233
その二つのレスが共存してるのが意味分からん
0235デフォルトの名無しさん2007/11/12(月) 15:02:49
superって書けるのはコンストラクタ内だけで、なおかつ一番最初のみだよな?
0236デフォルトの名無しさん2007/11/12(月) 15:16:57
http://itpro.nikkeibp.co.jp/article/COLUMN/20060927/249181/?P=2&ST=develop
ここ見てJavaを1から勉強してるんですが、
クラスメソッドとインスタンスメソッドの使い分けがいまいちピンとこないです。
誰かうまいこと教えてくださいませ
0237デフォルトの名無しさん2007/11/12(月) 15:44:15
staticメソッドを使う場合は大きく分けてこの3通り。
1.Mathクラスみたいな、オブジェクトを利用しない『ユーティリティクラス』のメソッド(Cなどの関数と同じ役割)
2.そのクラスのオブジェクトの生成に関する操作(Singletonなどのほか、Integer型などのvalueOfとかもこういう系統)
3.main(最初はオブジェクトは存在しないから当たり前)

オブジェクトを作らなくても使える代わりに、適切にオブジェクトを作ったほうが簡潔になることが多いから分かんなかったらインスタンスメソッド。
他にもいくつか使い道はあるけど、きちんと使い分けるにはデザインパターンを勉強すればいいと思う。
0238デフォルトの名無しさん2007/11/12(月) 15:48:49
>>236
237さんが既に説明してるけど、別の観点で。

インスタンスのメンバ変数にアクセスするようなメソッドはインスタン
スメソッドに、メンバ変数をアクセスしないものはクラスメソッドに。
最初はこういう使い分けだけ覚えてればOKだと思う。

0239デフォルトの名無しさん2007/11/12(月) 15:57:50
ときどき迷うんだけど、インスタンス変数を使用しないが自分のクラスの
他のstaticメソッドからは呼ばれることのないprivateメソッドはどっちにする?
0240デフォルトの名無しさん2007/11/12(月) 16:14:11
>>237-238
ありがとうございます。
>>237さんの使い分けの説明ですが、なぜそう使い分ければOKなんですか?
あと関係ないですけど、変数宣言の型でなぜStringは大文字で、intは小文字で始まってるんでしょう?
何か意味があるんですか?
0241デフォルトの名無しさん2007/11/12(月) 16:18:43
言語仕様と慣例
Stringはクラスだけどintはクラスじゃないから
0242デフォルトの名無しさん2007/11/12(月) 16:45:20
ボタンを押すことでPanelとLabelを表示させるようにしているのですが、上手くいきません。
白紙のフレームにボタンを設置し、それを押してボタンを消去してからPanelとLabelを表示させようとしているのですが、
真っ白のままになってしまいます。
さらに、フレームの端…ウィンドウの大きさを変える部分をクリックすると、なぜかPanelとLabelが表示されます。

解決するにはどうすればよいでしょうか?
0243デフォルトの名無しさん2007/11/12(月) 17:11:11
FileChannelを使って、
 1.Fileにバイナリデータを書き込み
 2.同じFileをいったんcloseした後、再度開いて書き込んだデータを読み込み
 3.同じFileを最後に削除
ということを試しているのですが、削除ができません。
2の読み込みの部分を、データのappendみたいなことをしてから、
channelをcloseしてファイルを削除することはできます。
何か足りないのでしょうか?書いてみたコードは下記の通りです。

public void example(){
  byte[] bytes1 = {0x41, 0x42, 0x43};
  File file1 = new File("C:/temp/test.txt");
  RandomAccessFile raf1 = new RandomAccessFile(file1, "rw");
  FileChannel ch1 = raf1.getChannel();
  ByteBuffer buffer1 = ByteBuffer.wrap(bytes1);
  ch1.write(buffer1);
  ch1.close();
  raf1.close();
  
  File file2 = new File("C:/temp/test.txt");
  RandomAccessFile raf2 = new RandomAccessFile(file2, "rw");
  FileChannel ch2 = raf2.getChannel();
  MappedByteBuffer buf = ch2.map(FileChannel.MapMode.READ_ONLY, 0, ch2.size());
  byte[] data = new byte[(int)buf.capacity()];
  buf.get(data);
  buf = null;  
  ch2.close();
  raf2.close();

  file2.delete(); // data[0]〜data[2]に値は入っているが、deleteできない
}
0244デフォルトの名無しさん2007/11/12(月) 17:27:58
>234
226さんの答えが良くわからなく、他にも問題があるのかと思ったからです。
メソッド名に気をつければ問題ない、「super.」を使ってスーパークラスのメソッドを呼び出すようにする。
と言うことでよろしいでしょうか。
0245デフォルトの名無しさん2007/11/12(月) 17:31:35
基本的にstaticにできるところはそうするべきだろ。
0246デフォルトの名無しさん2007/11/12(月) 18:04:27
>>243
MappedByteBufferがガベージコレクトされるまでアンマップできないから閉じられない、んだったと思う
0247デフォルトの名無しさん2007/11/12(月) 20:03:37
>>244
相当、頭悪いな
superがthisがじゃなくて、どのクラスに定義したメソッドを実行したいかなんだよ。
thisはそのクラスが定義したメソッドまたはそのスーパークラスのメソッド
superだとスーパークラスのメソッドが実行されるだけ
ただし、2つ以上オーバーライドされてしまうと、親の親を呼び出す仕組みはない
02482482007/11/12(月) 20:06:15
本に載ってるプログラムを入力したのですが、
コンパイルした時にエラーになります。
どうしてでしょうか。

public class sample17 {
public static void main(String[] args) {
int i=args.length;
if(i==0) System.out.println("引数は0個です。");
else if(i%2==0)
System.out.println("因数の数は偶数です。");
else
System.out.println("引数の数は奇数です。");
}
}



C:\Source>javac sample17.java
sample17.java:9: \65373 は不正な文字です。
}
^
sample17.java:10: \65373 は不正な文字です。
}
^
sample17.java:11: ';' がありません。
^
エラー 3 個
0249デフォルトの名無しさん2007/11/12(月) 20:09:39
ifの後っ{←つけないとだめじゃない?
02502432007/11/12(月) 20:09:43
>>246
レスありがとうございます。
BugParadeに、こんな記述を見つけたんですが、コレですかねぇ。。。
ttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4715154

>State:Closed, will not be fixed

って、あーた。。。('A`)
とりあえずcommentにいくつかworkaroundになりそうなものがあるので
試してみます。。。
02512482007/11/12(月) 20:12:29
>>249
付けてみましたが、ダメでした。
0252デフォルトの名無しさん2007/11/12(月) 20:16:19
}が全角になってる。}と}は違う文字。
0253デフォルトの名無しさん2007/11/12(月) 20:16:33
>>248
コピペしていじんないでやってみたけど、普通に結果でたよ
02542482007/11/12(月) 20:31:08
>>252
もう一度チェックしてみます。
02552482007/11/12(月) 20:33:56
>>252
すべて半角ですが、ダメです。
0256デフォルトの名無しさん2007/11/12(月) 20:35:24
プライベートJREでぐぐっても碌に引っかからないんだけど
最近はJavaが必ず入ってることを前提として大丈夫なのかな?
02572482007/11/12(月) 20:41:37
JDK 5.0 Update 13をインストールしました。
本にそれをダウンロードしろと書いてあったので…。

他のプログラムは普通に動くのですが、原因がわかりません。
超初心者なので、初歩的な部分を見落としてるかも知れません…。
0258デフォルトの名無しさん2007/11/12(月) 20:44:17
>>255
最後の}が全角じゃね?
02592482007/11/12(月) 20:45:47
>>258
いえ、半角です。
02602482007/11/12(月) 20:47:28
>>258
いえ、童貞です。
0261248 ◆z8PaG7o8aU 2007/11/12(月) 20:49:07
荒らしがいるのでトリップを付けました。
0262デフォルトの名無しさん2007/11/12(月) 20:50:35
全角}でコンパイルすると同じエラー(\65373 は不正な文字です)が出るよ。
考えられるのは、
1.確認ミス。
2.テキストエディタの変更が保存されていない。
3.確認しているファイルとコンパイルしているファイルが異なる。
こんなもんかな。
0263デフォルトの名無しさん2007/11/12(月) 21:02:58
fillRectで描画した長方形を移動させた後に
fillOvalで描いた円を二手に移動させるにはどうすれば良いですか?

________○→→→→→→○ 
□→→→→→→□
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄○→→→→→→○
(左の□は右の□の位置になったら消える)
(左の○は右の□が消えてから描画されて右の○まで動く)
こんな感じです
0264デフォルトの名無しさん2007/11/12(月) 21:10:03
何がやりたいのか今一わからないんだけど
それは透明の縦棒に□と○2つがくっついて表示非表示させるだけ
って考えていいなら作りやすいんじゃないかい
0265デフォルトの名無しさん2007/11/12(月) 21:11:54
KeyEvent.VK_UP
KeyEvent.VK_DOWN
KeyEvent.VK_LEFT
KeyEvent.VK_RIGHT
上記の定数の数値って分かりますか?
0266デフォルトの名無しさん2007/11/12(月) 21:14:45
ん?数値や文字列の定数はJavaDocに一覧化されるはずだから、載ってないか?
0267デフォルトの名無しさん2007/11/12(月) 21:19:17
>>265
java初心者の俺が答えてみる

System.out.println("KeyEvent.VK_UP:" + KeyEvent.VK_UP);
System.out.println("KeyEvent.VK_DOWN:" + KeyEvent.VK_DOWN) ;
System.out.println("KeyEvent.VK_LEFT:" + KeyEvent.VK_LEFT) ;
System.out.println("KeyEvent.VK_RIGHT:" + KeyEvent.VK_RIGHT) ;

結果

KeyEvent.VK_UP:38
KeyEvent.VK_DOWN:40
KeyEvent.VK_LEFT:37
KeyEvent.VK_RIGHT:39
0268デフォルトの名無しさん2007/11/12(月) 21:23:48
>>265
数値で比較すんなよな、その定数で比較しとけよ
0269デフォルトの名無しさん2007/11/12(月) 21:28:00
>>264
ttp://gif2.animegif.net/gamc2/pict/20071112-21/2007-11-12_21-26-56-anime.gif
こういうのです><
0270248 ◆z8PaG7o8aU 2007/11/12(月) 21:29:10
>>262
何度もアドバスありがとうございました。

もう一度最初から入力し直した所、うまく行きました。
原因がはっきりしないのですが、ひょっとしたら全角のスペースを
使っていたのかもしれません。
0271デフォルトの名無しさん2007/11/12(月) 21:30:56
>>269
だから透明な横の無限線は低速で上に動いてるんじゃねの?
表示しない点をFPSで管理して、□や○はそれを基準に描画すればいいじゃん。
0272デフォルトの名無しさん2007/11/12(月) 21:37:32
それぞれ2次元の速度ベクトルを持たせたほうが楽だと思うよ
0273デフォルトの名無しさん2007/11/12(月) 21:41:55
>>266-268
調べてみたら思いっきり載ってましたorz
低レベルな質問に答えて頂きありがとうございました
0274デフォルトの名無しさん2007/11/12(月) 21:43:12
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆【一番クリックした国が優勝】参加者求ム!☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 イギリス人天才プログラマが運営する前代未聞の無料ブラウザゲーム、http://clickclickclick.com/
 ただひたすらクリックし、国別の総クリック数を世界中で競い合う!
 究極にバカバカしくそして意味がなく、ひたすら時間の無駄でなんの得にもならない、だがそれが(・∀・)イイ!

 ライバルはハンガリー、そして台湾!! GAME2から参戦し、現在GAME27開催中!
 VIPで発祥し現在2ch全土から結集したクリック兵達で日本チームは戦っている!
 意味のない事に全力を傾ける、それが2ちゃんねるクオリティ!!

 独自のクリックツール開発競争も熱く、各国のプログラマが全力で優秀な兵器開発をしている!!
 日本の技術力の高さを世界に見せつけてやろうぜ!
 プログラマ、Flashゲーム製作者、動画職人、AA職人、絵師、DJ、wiki編集blog編集者、データ分析者etcも募集中!
 ツール放置参加もできるので、PCのスペックに自身のある奴、CPUに空きのある奴、時間が余ってる奴もぜひ参加してくれ!

 本スレッド
 【簡単多重】一番クリックした国が優勝【8砲門】
 http://wwwww.2ch.net/test/read.cgi/news4vip/1194741194/l50
 ※落ちているときはここから1発検索
 http://www.clickjapan.jp/find2ch.php

 日本チームの有志によるまとめサイトポータル
 http://www.clickjapan.jp/ 
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
0275デフォルトの名無しさん2007/11/12(月) 21:57:13
>>231さん、>>232さん、御返事ありがとうございます。>>230です。

>>232さん
> まぁ、まずホームページのオーナーに聞くのが早いんじゃないか?

言われるまで気づきませんでした。よく探してみたらメールアドレスも掲載さ
れていましたので、ダメモトでメールを出してみます。

>>231さん
五万円が大体の相場なのでしょうか? JAVAプログラムを覚えるための労力と
時間を金銭に換算するなら、別に釣り合わない金額ではないです。個人的には。

ただ、上に書かせて頂きましたように、まずは制作者様に連絡を取ってみよう
と思いますので、依頼は制作者様の返事を待ってからで宜しいでしょうか? 
(二股をかけるようで申し訳ない)

メール欄に書かれているアドレスは当分使えるのですよね? 依頼する事にな
った時は、どうかお願い致します。
0276デフォルトの名無しさん2007/11/12(月) 22:18:23
FPSっていうのがイマイチわからないので
速度ベクトルっていうので検索してみます
0277デフォルトの名無しさん2007/11/12(月) 22:31:58
それ、両方セットで使う概念だよw
定期的に位置ベクトルに対して速度ベクトルを加算するの
その間隔を一定に保つことがたぶん>>271の言うFPS
0278デフォルトの名無しさん2007/11/12(月) 22:50:34
速度ベクトル→速さ+方向
0279デフォルトの名無しさん2007/11/12(月) 23:09:42
\65378は不正な文字ですとかでるときは
全角使ってるときだよ。全角スペースとか}の全角とか。
これは特定しやすいエラーだよ。

http://www.mclab.ics.ritsumei.ac.jp/lecture/java/tips004.html
0280デフォルトの名無しさん2007/11/12(月) 23:13:39
JAVAとSQLを勉強しようと思い、JDBC経由でローカルのMYSQLをSELECTする
プログラムを作りました。(コピペです)
DELETEするプログラムを自前で追加したのですが、
DELETE対象のRowが存在しない場合の判断をどう行っていいかわかりません。
存在しない場合、"対象データがありません"とメッセージを出力したいのです。
SELECTの場合はexecuteQueryを実行して、ResultSetのnextメソッド?がfalseだったら、という判断で
で実現できたのですが、DELETEの場合、executeUpdateの戻り値にResultSetを設定できないようなので。
よろしくお願いします。
0281デフォルトの名無しさん2007/11/12(月) 23:17:27
select以外のsqlにResultSetなんて要らないと思うんだが。
executeUpdateは変更のあったレコード件数のはずだから
0が帰ってくれば消しに行ったけどなかったよって意味になる
0282デフォルトの名無しさん2007/11/12(月) 23:25:35
stmt = con.prepareStatement("DELETE FROM MYTABLE WHERE ID=?");
stmt.setInt(1, id);
int count = stmt.executeUpdate();
if(count == 0){
  System.out.println("削除対象が存在しません");
}
0283デフォルトの名無しさん2007/11/12(月) 23:39:03
>>281,282
ありがとうございます。
API仕様のWEBドキュメントを見つけて
executeUpdateの戻り値はINTで行数カウントが
返ってくる事がわかりました。
executeUpdateはおまじない程度にしか思っていなかったのですが
java.sqlパッケージのPreparedStatementインタフェースのexecuteUpdateメソッドだって
理解を深めたらおのずと調べ方もわかりました。
ありがとうございました。



0284デフォルトの名無しさん2007/11/12(月) 23:42:31
SQLを触るたびにヒアドキュメントが欲しくなる。
iBatisとJDBC4に規格的な親和性がないのは悲しすぎる。
0285デフォルトの名無しさん2007/11/13(火) 00:06:04
DB 周りのフレームワークと称して独自言語並の設定ファイル記述させるのはやめてください。
0286デフォルトの名無しさん2007/11/13(火) 00:47:13
アプレットでできることって、Ajaxでもできるんですかね?
工数的にはどのくらい差がありますか?それと技術者ってすぐにあつまりますかね?
0287デフォルトの名無しさん2007/11/13(火) 00:49:02
どちらも技術者は少ない。後者はギークが集まるかもな。保守性無視で。
0288デフォルトの名無しさん2007/11/13(火) 01:30:39
日本語音声認識システムJulianをJavaから利用したくていろいろと調べています.
最初はJulius for SAPIにアクセスできるDLLを自分で作って・・とか考えていたんですが
どうも自分には難しくて挫折していました.

ttp://julius.sourceforge.jp/index.php?q=juliankit.html
で,いろいろと考えた結果↑以下のJulian記述文法音声認識実行キットをJavaから動かして,
その結果をJavaで処理できるのではないかと思い至りました.

が,ProcessBuilderでコマンドラインのプログラムを呼び出せるのは分かったんですが
継続的に処理を待ち続けて,プログラムの出力があるたびにJavaのほうで処理を受ける方法が
分からなくて悩んでおります.

Julian記述文法音声認識実行キットは
C:\>bin\julian.exe -C testmic.jconf
のような形で実行すると,最初数行システム起動処理が標準出力として出力され
その後,マイクでの音声入力を待ち,定義ファイルの内容にしたがって
音声入力があるたびに認識処理を行い,

<s> リンゴ を 3 個 ください </s>

といったような認識結果の出力を行います.

このときに,「リンゴ」と「3個」という認識結果をJavaで取得し,
apple()メソッドに3という引数を渡して呼び出し,その後また音声認識処理を待ち続ける
といったようなことをやりたいのですが
ProcessBuilderを利用してプログラムを実行した後,音声入力が行われるたびごとの
認識結果をJavaのプログラムで取得し続ける方法はありませんでしょうか?
ヒントなりとでも頂ければ幸いです.
よろしくお願いします.
0289デフォルトの名無しさん2007/11/13(火) 01:39:18
ProcessBuilder#start の戻り値の Process から getInputStream で標準出力を取れるんじゃない?
0290デフォルトの名無しさん2007/11/13(火) 01:55:24
>>288
標準入力 System.in からそのプログラムが吐く文字列読み込むプログラム作って

C:\>bin\julian.exe -C testmic.jconf | java YourProgram

でも良いんじゃねーの。そのコマンドが一回ごとに終了してしまうならダメだけど。
0291デフォルトの名無しさん2007/11/13(火) 10:20:28
Formatter で日付を処理する時ってタイムゾーンの指定はできんのかね?
どうやっても JST (JVM のデフォルトタイムゾーン) でしか返って来ないんだが。
DateFormat 使って変換した文字列を %s で埋め込むしかないのかな。
0292デフォルトの名無しさん2007/11/13(火) 10:31:08
Locale指定すればいいだろ
0293デフォルトの名無しさん2007/11/13(火) 10:35:46
それだと JST の時刻が英語圏の表記でフォーマットされるだけですが。
0294デフォルトの名無しさん2007/11/13(火) 10:39:36
だったらタイムゾーン指定しろ
まずはSimpleDateFormatterのドキュメント嫁
0295デフォルトの名無しさん2007/11/13(火) 10:48:09
if(Toolkit.getDefaultToolkit().getSystemEventQueue().peekEvent() != null)
{
while(Toolkit.getDefaultToolkit().getSystemEventQueue().peekEvent() != null)
{
if(Toolkit.getDefaultToolkit().getSystemEventQueue().peekEvent().getID() == InvocationEvent.INVOCATION_DEFAULT)
break;
try{
Toolkit.getDefaultToolkit().getSystemEventQueue().getNextEvent();
}catch(InterruptedException ef){System.out.println(ef);}
}
}
結局上記の様にすることでKeyEventの溜まりすぎを防ぐことができました。
前スレでアドバイス下さった方、ありがとうございました。
0296デフォルトの名無しさん2007/11/13(火) 10:54:47
>>294
SimpleDateFormatter なんてクラスは標準 API にありませんね。java.text.* パッケージの
クラスのどれかと勘違いしてませんか? java.util.Formatter の事ですけど。
0297デフォルトの名無しさん2007/11/13(火) 11:14:40
勘違いは>>296だろたんなるFormatterに何を期待しているんだか。
0298デフォルトの名無しさん2007/11/13(火) 11:18:32
>>291
TimeZone 指定した Calendar 使うんじゃダメなんか?
0299デフォルトの名無しさん2007/11/13(火) 11:28:34
>>296
ああ、勘違いしていたよ。
java.util.Formatterでは不可能。

ていうか使い方がおかしいのでAPIの所為にスンナ、ボケ
0300デフォルトの名無しさん2007/11/13(火) 11:38:59
>>298
( ゚Д゚) おお、Calendar を渡せることをすっかり忘れていました。どうもありがとうございます。

>>297,299
にほんにきてなんねんになりますか?
0301デフォルトの名無しさん2007/11/13(火) 11:43:44
>>280
executeUpdateのintの戻り値が削除された行数
0302デフォルトの名無しさん2007/11/13(火) 11:46:44
第1段落3行目
> byte、BigDecimal、および Calendar などの共通 Java タイプがサポートされます。

その後の概要の一番初めに Calendar を使った解説が…(−人

>>301
>>281-283
0303デフォルトの名無しさん2007/11/13(火) 11:51:25
>>300
敗者の上から目線の一種だね
0304デフォルトの名無しさん2007/11/13(火) 11:59:53
何か勘違い指摘されたのすっげー根に持ってる人が居座ってるみたいなんすけど。
0305デフォルトの名無しさん2007/11/13(火) 12:14:06
>>300
たぶんあなたがJavaをやっている年数よりは長いんじゃないw
0306デフォルトの名無しさん2007/11/13(火) 12:16:42
在日は氏ね
0307デフォルトの名無しさん2007/11/13(火) 12:41:25
JTextFieldのようなものを作っています

getKeyChar()で半角英数は取得できました
しかし全角の日本語を一度に2文字以上打ち込むと
打ち込んだ文字列の最後の文字しか取得できません
文字列全てを取得する方法はないでしょうか
0308デフォルトの名無しさん2007/11/13(火) 12:42:39
>>307
JTextFieldを使う
03092432007/11/13(火) 14:01:36
>>250でもありますが、
delete前にSystem.gc()入れたら、
削除できるようになった。。。

channelをcloseしてからリネームして、
deleteOnExit()しろなんて方法もあるみたいなんですが、
VMを長期間稼働させる環境だとそれも使えないからなぁ。。。

deleteしたいファイルには、MappedByteBuffer使っちゃダメってことなんでしょうかね。
0310デフォルトの名無しさん2007/11/13(火) 17:01:30
http://pc11.2ch.net/test/read.cgi/prog/1097433055/419
この質問頼みます
0311デフォルトの名無しさん2007/11/13(火) 17:59:17
比較的大きなコード (ソースコードでおよそ1.2MB程度) を書いています.
これまで動的変数(メソッド内でint i; などのように宣言した組み込み型の
変数)を多用していたのですが,これらの多くをクラスのメンバ変数に変更
したところ,処理が非常に遅くなってしまいました.
処理速度が落ちる解釈として,
(1)動的変数はレジスタに割り当てられるのに対し,メンバ変数はヒープ領域に取られるから.
(2)メンバ変数へのアクセスは「クラスへの参照→メンバへの参照」のように参照段階が増えるから.
を考えておりますが,実際にはどちらのほうが効いているのでしょうか?
あるいは重要な別の原因が考えられるようでしたら,お教えください.
最適化のための参考にさせていただきたいと考えております.
0312デフォルトの名無しさん2007/11/13(火) 18:07:12
書き直しの際に発生したバグ。
変数をあちこちで使い回した為、ループがおかしくなっているとか。
0313デフォルトの名無しさん2007/11/13(火) 18:10:36
>>312
いえ,処理内容・結果とも変更前と変わらないことは確認済みです.
全く同じ処理を行ったときにパフォーマンスが低下する現象です.
0314デフォルトの名無しさん2007/11/13(火) 18:21:16
>>311
昔の話ですが…(最近の最適化では数値が違うかも)
ローカル変数からインスタンス変数やクラス変数に変えれば、遅くなる。差は2倍強。
ローカル変数でも最初の3個?はレジスタに割り振られるが、差は10%。
というのをどこかで見た気がします。

まあ、動作が変わらないってなら、巨大なベンチマークをしたということで…。
0315デフォルトの名無しさん2007/11/13(火) 18:21:21
>>311
一般には体感するほど遅くなることはないはず。
Profilerで調べてみることをお勧めします。

0316デフォルトの名無しさん2007/11/13(火) 18:50:50
>>313
どうやって変らない事が確認できるんだかしりたいですね

そもそも組み込み型(プライベート変数の事かい?)からメンバ変数に変更した経緯が意味解らん。
その上で
(1) 関係ない。
ヒープ領域を使うか否かは変数がプリミティブ型かオブジェクト型かの話
レジスタというのは意味不明だが、スタックのことを言っているとしても、それがパフォーマンスに体感的に低下する事はない
(2)メンバ変数へのアクセスは〜の影響もない
参照段階がどうこうってのは何を根拠に話しているんだ?
俺が知っているJavaの本では読んだ事もないし、聴いた事もない。
0317デフォルトの名無しさん2007/11/13(火) 18:52:01
>>311
あと、比較的大きなコード(1.2MB)というのは1つのクラスが・・・なのか?
もし、そうだとすれば、根本的に何もかもおかしいと思うが・・・
0318デフォルトの名無しさん2007/11/13(火) 18:58:39
知らないこと、検証してないこと、自分の常識では理解できないことを、…以下略。
(ああ、私は質問主じゃないですよ)
0319デフォルトの名無しさん2007/11/13(火) 18:59:20
jarじゃね
ありえないだろ
0320デフォルトの名無しさん2007/11/13(火) 18:59:57
>>311
結果出るまで数日かかるようなよっぽどの数値解析アルゴリズムを、20 世紀の
化石 PC でも使って走らせてなければ、レジスタ使う使わない程度でそんな体感
分かるほど変わるわけないだろう。ヒープ使いまくりで GC とエクステンション
走りまくりとか、単なるバグとかの方がよっぽど濃厚。

レジスタやらインスタンス変数アクセスだと主張したいなら、せめてそう断定するに至った
プロファイラの結果くらい出せ。生半可が思い込みで始めるパフォーマンス論が一番危ない。
0321デフォルトの名無しさん2007/11/13(火) 19:01:26
ああ
でも線形解析程度でえれえ時間差ある
0322デフォルトの名無しさん2007/11/13(火) 19:02:07
Vecmath使うといいのかな
0323デフォルトの名無しさん2007/11/13(火) 19:02:39
動的変数 = ローカル変数
組み込み型 = プリミティブ型
メンバ変数 = インスタンス変数

で良いのかな。
0324デフォルトの名無しさん2007/11/13(火) 19:03:54
"メンバ変数"や"組み込み型"はJavaでも普通に使うだろ
0325デフォルトの名無しさん2007/11/13(火) 19:05:49
通じるけど使わない。
C++ 上がりが多い職場ならどうか知らんけど
0326デフォルトの名無しさん2007/11/13(火) 19:09:17
通じるのはメンバ変数くらいだな
組み込み型ってなにを何処に組み込むんだ?
動的変数ってのも矛盾してるだろ、動的だから変数じゃねーのか?w
0327デフォルトの名無しさん2007/11/13(火) 19:12:34
多分エンバグじゃね?

スレッド拘束で保ってたスレッドセーフが破られたに500ペリカ

きっとループの終わり頃に、別スレッドがiを0に設定していると予想w
0328デフォルトの名無しさん2007/11/13(火) 19:14:23
>>326
言語組み込み
作ったり消えたり
0329デフォルトの名無しさん2007/11/13(火) 19:16:29
>>326
Cでいうautoの事では?
0330デフォルトの名無しさん2007/11/13(火) 19:18:25
>>313
一応言っておくけど、処理結果が変わらない事とバグが混入してい無い事とはイコールじゃ無いよ。
後はマシン自体が遅くなってるとか。変更前の処理を今動かしてみて遅かったらそれ。

#ところで、最適化はまだ早いんじゃ無い?
03313112007/11/13(火) 19:18:42
多数のご指摘ありがとうございます.
いま手が離せない状況ですので,とりあえず
曖昧な表現だけ訂正させていただきます.

>>317
もちろん複数のクラスの合計のサイズです.

変数の種類の表現については>>323さんのご推察の通りです.
混乱させる表現で申し訳ありません.
■ このスレッドは過去ログ倉庫に格納されています