- 1 名前:デフォルトの名無しさん mailto:sage [04/08/06 22:21]
- J2ME CLDC+MIDPベースの携帯電話用Java(主にEZアプリ、Vアプリ)に関するスレッドです。
質問でも議論でも何でもこい、と。 前スレ: CLDC+MIDP+携帯電話用Javaスレッド part 2 pc5.2ch.net/test/read.cgi/tech/1070858996/ 過去スレ 携帯JAVAのスレッド pc2.2ch.net/test/read.cgi/tech/1011977260/(DAT落ち) -- Java一般に関しては: 【初心者】Java質問・相談スレ51【大歓迎】 pc5.2ch.net/test/read.cgi/tech/1091770298/ NTT DoCoMoのiモード携帯電話用Java(iアプリ)については: iモード携帯電話用Java(iアプリ) Part 6 pc5.2ch.net/test/read.cgi/tech/1091286071/ >>2-5あたりにリンク集
- 357 名前:デフォルトの名無しさん [04/09/27 14:57:21]
- 354です。
ttp://java.cocolog-nifty.com/blog/2004/03/ を読んで、JSCLのインストールを 試してみたところ、次のようなエラーが出てしまいました。 ---------------------- ERROR: native methods should not appear Error preverifying class com.jblend.graphics.j3d.ActionTable com.sun.kvem.ktools.ExecutionException: Preverifier returned 1 Build failed ---------------------- 意味がよく分からないのですが、ネイティブメソッドを使ってはいけない。 と出ているようです。ネイティブメソッドは使用していないのですが、 何故こうなるのでしょうか?
- 358 名前:デフォルトの名無しさん mailto:sage [04/09/27 15:27:17]
- >>346
自分じゃアプリ作れないけど改造だけなら出来そうとか思ってるんだろうな・・。 そもそも逆コンパイル自体グレー的(おそらく他人のアプリだとして)な行為なのに、 コンパイル等の仕組みを良くわからないまま手を出して「腐ってる」は無いだろ。 「シンボルを〜」とか「〜で宣言しなければ」なんて超基本的なことで、 少し自分でソースチェックすれば解決できそうなもんだけどな・・。 たぶんそのアプリの作者がサイズ削減かコード閲覧回避のためオブファスケータ使ってて、 その時ファイル名と異なるクラス名が付いたから、とかじゃないかとか思うけど。 まぁ逆コンしたものであるかは別にして、ソースがコンパイルできるかどうかの問題だから ソースとBuild設定さえ見れたらアドバイスできるが、他人のなら無理だな。 とりあえずアップできるソースならアップして、他作なら許可もらうか直接聞いたら?
- 359 名前:デフォルトの名無しさん [04/09/27 15:40:19]
- Vアプリで、
JConnector.class を入手したのはいいのですが、 どこに置けば良いのでしょうか? 分かる方いらっしゃいますか?
- 360 名前:デフォルトの名無しさん mailto:sage [04/09/27 16:20:06]
- >>359
JConnector.classってなんだ?
- 361 名前:346 mailto:sage [04/09/27 18:20:41]
- >>358
確かにおっしゃる通りです。 一応eclipseで逆コンパイラしてソースを見てみると たくさんエラーが表示されますね おそらくコード観覧回避目的だと思います。 企業のアプリなんでアップや直接聞くことはできませんが 一からJAVAを勉強し直して自分でコンパイラできるようになり アプリを制作できるようになりましたらまた挑戦してみます。 >>353 甘えもありますが、板をあまり質問で汚したくなかったので そのような書込みをしました。
- 362 名前:デフォルトの名無しさん [04/09/27 21:02:05]
- みなさんに質問させてください。
今、純MIDP2.0 のみ( VやAUのクラスを使用しない )でアプリを作っています。 で、今行き詰まっているのは ランチャーのように『アプリA』 から 『アプリB』や『アプリC』 を呼ぶことは可能か? という事についてです。 別スレッドということではなく、あくまで別アプリを呼ぶという事で。 他のアプリを呼ぶ事自体が非常識なんでしょうか? セキュリティ上ダメかな・・・と、少し諦めてはいるのですが 可能ならば容量制限などを気にせず作れるかな〜と思っています。 『そんなの普通にやってるコトだよ!』とか『できるワケね〜だろ!』といった 内容でもよろしいので、ご意見下さい。
- 363 名前:デフォルトの名無しさん mailto:sage [04/09/27 21:11:44]
- >>362
アプリAに終了命令出して、アプリBとかCに開始命令出せればいけるかも でもレコードストアのデータとかは引き継げないから結構使いにくいかもね。
- 364 名前:デフォルトの名無しさん mailto:sage [04/09/27 21:32:42]
- >>362
MANIFST.MFにMIDlet-1, MIDlet-2とか書いて、 1つのjarの中に複数のMIDlet詰めることはできたと思う。 そういうアプリの場合、起動時に詰め込んである複数のMIDletから(ユーザが)アプリを選んで起動できる。 レコードストアを共有できるかどうかはシラネ。MIDPのドキュメント読んで。たぶんできると思うけど。 でも、今のケータイ向けのアプリでは一般的には使われてないっぽいけど。
- 365 名前:362 [04/09/27 22:06:42]
- 早速のレスありがとうございます!
>>363さん 別アプリって認識できるのかな? でも、やってみますね! >>364さん 大変勉強になります。 1つのjarに複数のアプリが入れられるとは思いませんでした。 レコードストアに関しては、早速、印刷して読み込んでみます。 >でも、今のケータイ向けのアプリでは一般的には使われてないっぽいけど。 通信速度もメモリも拡大している最近では、複数に分けてみようってのは イマイチな考え方なんですかね・・・(泣 やはり別jarパッケージの起動は無理っぽいのかな〜。 やれる事は全部やってみて、引き続きがんがってみます。 みなさん、ありがとうございます。
- 366 名前:なっち(○´ー`○) mailto:sage [04/09/27 23:40:26]
- MIDP2.0ではMIDletスウィートは
廃止されたような気がしたけどどうかな。
- 367 名前:デフォルトの名無しさん mailto:sage [04/09/28 02:14:54]
- MIDP2.0でも MIDlet Suiteはありますよ。
MIDlet Suite内のMIDlet間の連携は無理です。 選択画面を経由した手動の切り替えのみ可能。 ってのが建前。 それからレコードストアは共有できる。はず。
- 368 名前:デフォルトの名無しさん mailto:sage [04/09/28 11:09:46]
- レコードストアは、JARに対応して設けられるので、
MIDlet Suite 中で同じレコードストア名を使用すると、同じデータを参照できます。 アプリケーション間連携がないのは、セキュリティリスクの低減と、 設計モデルの問題ですね。
- 369 名前:デフォルトの名無しさん mailto:sage [04/09/28 13:23:41]
- レコードストア関連であった話しなんだけど、
一つのレコードに複数のデータを設けて、split出区切る方式を 考えて、やってみたんですけども、 メソッド split(char) は型 String で未定義です。 でコンパイルが通らないです。j2sdk1.4.2_02です。 split使えないなんて事はないと思うんだけど、、 ご教授いただけますでしょうか・・ try{ rs = RecordStore.openRecordStore("frends",true); byte[] b=rs.getRecord(1); String rec =new String(b); rs.closeRecordStore(); String nlist[ ]= new String[1]; nlist = rec.split("|"); }catch (RecordStoreException e){ feno =9999; fname = "ERROR;"; }
- 370 名前:369 mailto:sage [04/09/28 14:50:28]
- 今は
メソッド split(String) は型 String で未定義です になってますね。さっきはパラメータに'|'を送ろうとしてたので、 Charだったみたいです。
- 371 名前:デフォルトの名無しさん mailto:sage [04/09/28 14:57:14]
- >>369
そのエラーメッセージの通り。 Stringクラスにsplit()というメソッドはない。
- 372 名前:デフォルトの名無しさん mailto:sage [04/09/28 18:39:19]
- J2ME Wireless Toolkitを使ってビルド→パッケージやってるんですけど
パッケージ化するたびにメモ帳でJAD開いてにMIDlet-Networkを追加するのが面倒です この作業をしないで済む方法ってないですか?
- 373 名前:デフォルトの名無しさん mailto:sage [04/09/28 19:52:09]
- >>372
俺はWireless Toolkit使わずにバッチファイルでパッケージしてる。
- 374 名前:デフォルトの名無しさん mailto:sage [04/09/28 20:13:37]
- オススメ
ttp://www.wakhok.ac.jp/~oota/vappli/
- 375 名前:デフォルトの名無しさん mailto:sage [04/09/28 20:28:58]
- >>372
パッケージ化のたびに項目消える方がヘン。 マニフェストファイルの方に書いてないってオチでは。
- 376 名前:372 mailto:sage [04/09/28 20:32:33]
- 案外マニフェストファイルに書いておけばパッケージ化の時にjadに自動的に書き込まれたりするってことだったりします?
初心なこと聞いちまったぽい。
- 377 名前:デフォルトの名無しさん mailto:sage [04/09/29 01:52:33]
- 質問です
現在、JPG画像を表示させるP5向けのアプリを作っています しかしImage.createImateして、drawImageで表示させても何故か減色されてしまいます。 アプリでは256色までしか扱えないのでしょうか? それともJPGはの表示は特別な方法があるのでしょうか? 教えて下さい よろしくお願いします。
- 378 名前:デフォルトの名無しさん mailto:sage [04/09/29 11:15:01]
- >>377
アプリは何で実行してるの?実機?エミュレータ? 256色の制限なんてあったっけ?
- 379 名前:377 mailto:sage [04/09/29 13:25:50]
- すいません、すこし説明不足でした
P5用のVアプリエミュで実行してます。 256色で制限されてるのかはよく分からないのですが、256色に落として保存した画像みたいに年輪みたいになって表示されてしまいます。
- 380 名前:デフォルトの名無しさん mailto:sage [04/09/29 17:14:22]
- DOJAでも、
そんな感じに表示されるけど、実機では問題なし。
- 381 名前:377 mailto:sage [04/09/29 17:19:18]
- 380
実機で試してみますね。 ありがとうございました。
- 382 名前:377 mailto:sage [04/09/29 21:47:45]
- 実機で試してみると、年輪のような表示にはなりませんでした。
それは解決したのですが、また問題が出たので質問です。 エミュでは展開出来たのですが、実機では40k以上の画像等のファイルはエラーが出て表示が出来ませんでした。 テストには602SHを使っていて、601SHならPNGの展開サイズが最高で512kまでと書いてあったのでいけると思うのですが…。 それと、MIDlet-OCLをJSCL-1.2.2に設定しておくと602SH/601TのP6型以外で起動不可になりますか? 質問ばかりで申し訳ないのですが、よろしくお願いします。
- 383 名前:デフォルトの名無しさん mailto:sage [04/09/29 22:19:33]
- エラーの内容が分からんのでとりあえずその例外を描画してみては?
catch(Exception e){ while(DeviceControl.getDeviceState(DeviceControl.KEY_STATE) > 0) //キー入力があるまで無限ループ
- 384 名前:デフォルトの名無しさん mailto:sage [04/09/29 22:22:33]
- ごめん、途中で書き込んじゃった
catch(Exception e){ Graphics.setColor(0,0,0); Graphics.fillRect(0,0,240,240); Graphics.setColor(255,255,255); Graphics.drawString(""+e.toString()); while(DeviceControl.getDeviceState(DeviceControl.KEY_STATE) > 0) //キー入力があるまで無限ループ }
- 385 名前:デフォルトの名無しさん mailto:sage [04/09/29 22:25:32]
- drawStringの引数Stringだけになってた(汗
x,y,アンカーを脳内で入れといてください。 それと追記 例外とかの文だと長すぎてはみ出す可能性が高いんで 20文字目ぐらいでString#substring()使って文字列を区切って描画したほうがいい。
- 386 名前:デフォルトの名無しさん mailto:sage [04/09/29 22:41:19]
- エラーの内容表示しないでも、それってサイズ制限に引っかかってるだけじゃないか?
確か40KBより大きいファイルは扱えなかったような気がする。
- 387 名前:デフォルトの名無しさん mailto:sage [04/09/29 22:43:35]
- 386追記
40KBより大きい画像とかのファイルをSD経由で読み込んでみ? エラーで表示されない 勘違いだったらスマソ
- 388 名前:デフォルトの名無しさん mailto:sage [04/09/29 23:02:08]
- ttp://appget.com/vf/pc/apview_021014.htm
このアプリで40kb+の着メロ再生できるから開く方法はあるっぽいな。
- 389 名前:382 mailto:sage [04/09/29 23:12:21]
- 皆さんありがとうございます。
>>383-385 コード追加してみましたが、getDeviceState(int)をstaticコンテキストから参照することはできません。 と出てビルド出来ません…。 すんません、自力じゃ分かりませんでした…。 >>386-387 SDカードにアプリで読み込もうとしていたファイルを入れて開こうとしたところ、「40Kを超えるファイルのため再生できません」と出ました。 40K以上の着メロも同様のエラーで無理みたいです。
- 390 名前:デフォルトの名無しさん mailto:sage [04/09/30 03:34:03]
- >>389
どんなAPIで40KB超えのファイルを開こうとしてる? StorageConnection#openInputStream() でなら、40KB制限なんて引っかからないと思う。 FileUtility は使ったことないのでシラネ、 FileUtility#play は、「ネイティブアプリケーションで再生します」とか書いてるから、 ネイティブの制限(SHなら40KB/Tなら64KB)の制限を受けるんじゃないかな。
- 391 名前:デフォルトの名無しさん mailto:sage [04/09/30 15:38:50]
- >>389
ちゃんと調べた訳じゃないけどStorageConnection#openInputStream()の仕様で制限掛かってるならエミュでも開けないと思うし、 何か機種独自の仕様かなにかに引っかかってるんじゃないかな それ以外のAPIは使ったことないし知らん ちなみに漏れの602SHでもStorageConnection#openInputStream()で画像読み込んだら例外出て開けんかった。 もしかしたら ttp://potter.s5.xrea.com/vappli/doc/P5/com/jblend/media/jpeg/JpegData.html もしくはttp://potter.s5.xrea.com/vappli/doc/P5/com/jblend/media/png/PngData.html これ使えば開けるかもピープ限界まで開けるかも 漏れの考えも間違ってるかもしれないから分かる人よろ
- 392 名前:391 mailto:sage [04/09/30 15:42:34]
- 訂正
JpegPlayerとかはttp://potter.s5.xrea.com/vappli/doc/P5/com/jblend/media/MediaImageOperator.html このMediaImageOperatorってので使うぽい 間違ってたらすまそ
- 393 名前:382 mailto:sage [04/09/30 18:54:42]
- 遅くなりました、すいません。
>>390 ファイルの取得はボーダのサンプルを流用してやってます まず、byte[] data=read(ImgURL+".png")で呼び出して (長いので必要そうな所だけ。) conn = (StorageConnection)Connector.open(url); InputStream is = null; ByteArrayOutputStream baos = null; try { baos = new ByteArrayOutputStream(); is = conn.openInputStream(); byte[] buff = new byte[(int)conn.getLength()]; int readed = -1; while ( (readed = is.read( buff )) != -1 ) { baos.write( buff, 0, readed ); return buff; } } …catch/finallyなどが続く 最後のreturnでbuffの中身を呼び出し元に戻して、viewImg=Image.createImage(data,0,data.length)で画像にしてます。 多分これでいけてると思うのですが…ここに問題無ければ他の部分かな…。 >391 棒打のサンプル見てみますね。
- 394 名前:デフォルトの名無しさん mailto:sage [04/09/30 21:01:53]
- 画像サイズがデカイと無理です、多分。
ヒープの問題。
- 395 名前:デフォルトの名無しさん mailto:sage [04/09/30 21:20:02]
- >>382
参考までに聞きたいが、 このソースで実機で40KBより小さいサイズの画像は問題なく読めてるの?
- 396 名前:382 mailto:sage [04/09/30 22:02:46]
- 読めてます。
- 397 名前:デフォルトの名無しさん mailto:sage [04/09/30 23:05:13]
- >>394
ピープは1200kぐらいあるはずだからよほど大きくない限り読めるはずだろ
- 398 名前:デフォルトの名無しさん mailto:sage [04/09/30 23:12:19]
- 480x640程度でダメなはず。
エミュ確認のみ。
- 399 名前:デフォルトの名無しさん mailto:sage [04/09/30 23:20:10]
- 画面カラーが32bitだと、32bitに展開されるとかじゃない?
- 400 名前:デフォルトの名無しさん mailto:sage [04/09/30 23:22:10]
- 32bitビットマップね。
- 401 名前:382 mailto:sage [04/09/30 23:38:43]
- >>398
240x320のPNGファイルで、エミュでは問題無く表示されています。 >>399 画面カラーというのは、携帯実機の?PCの?
- 402 名前:デフォルトの名無しさん mailto:sage [04/10/01 00:25:00]
- Imageの画素の深度は機種依存のハズ。元画像のサイズ・深度はあんま関係ないぽ。
240×320がOKだったとかいわずに、Image作成前と作成後でヒープ残量はかってみ。 long memory = Runtime.getRuntime().freeMemory(); 他キャリアで悪いがPhase3エミュでcreateImage(100,100)で20KB程度、 つまり1画素あたり2B使ってる計算。これでいくとヒープ2MBの機種で100万画素まで、 大体QVGA(320×240≒8万)の10倍程度が限界。もちろん画像のみの話だけど。 そのJPGがそれ(QVGA×10)を超えてないか確認してみそ。深度深けりゃもっと小さいが。
- 403 名前:382 mailto:sage [04/10/01 01:02:06]
- >>402
計算ニガテだけどがんばって計算してみますね…。 ちなみに表示させようとしてるのはPNG形式の画像です
- 404 名前:デフォルトの名無しさん mailto:sage [04/10/01 01:53:02]
- ちょい質問。
byte型のデータをint型に変換するのってどうすりゃいいの? 直接代入しただけじゃあたりまえだが無理だった(´д`;)
- 405 名前:390 mailto:sage [04/10/01 02:11:41]
- 念押しときますが、V601TでStorageConnection#openInputStream()で制限引っかかることはなかったです。
少なくとも500KB超えたファイルもいけてる。 やっぱ、Image作るところかbyte確保するとこ(byte[] buff = new byte[(int)conn.getLength()];)で ヒープ不足で引っかかってる気がするんだが。 いずれにしても、どこでどんな例外が出てるかを確認するのが先決だと思う。 >>404 直接代入できますが。
- 406 名前:デフォルトの名無しさん mailto:sage [04/10/01 02:33:17]
- むむむー
直接代入しようとすると互換性のない型って出てビルド出来ん んで、検出値がbyte[]で期待値がintになってる 解釈違いかなあ
- 407 名前:デフォルトの名無しさん mailto:sage [04/10/01 02:53:44]
- >>406
配列じゃない変数に配列が代入できるわけないだろ どういうことがやりたいんだ?
- 408 名前:デフォルトの名無しさん mailto:sage [04/10/01 03:09:07]
- フェーズプレイヤーで再生するデータを外部メモリから読んで、再生させたい。
393のソース流用したんだけど、int spfdata = read("file:///mc/spf/sound.spf"); ってすると「互換性のない型」ってエラーが出る。 さてどうしたものか…。
- 409 名前:デフォルトの名無しさん mailto:sage [04/10/01 03:25:25]
- >>408
>>393のソースを参考にread()ってメソッド作ったんなら戻り値はbyte[]型でしょ。 (byte[] buff = new byte[〜]; で return buff; なんだから) それをint型で受ければエラーは当たり前。byte[]型の変数で受けなきゃ。
- 410 名前:デフォルトの名無しさん mailto:sage [04/10/01 03:36:03]
- んーむ…
こんなソースになったけど駄目っぽい…。 2箇所エラーがあるみたいです すいません、よろしければおかしい所の修正お願いします。。。 player=PhrasePlayer.getPlayer(); byte[] spfdata; spfdata = read("file:///mc/spf/sound.spf"); int spffile = spfdata; //ここで「互換性のない型」エラー data=new Phrase(spffile); //ここで「シンボルを解決できません」エラー track0=player.getTrack(); track0.setPhrase(data); track0.play();
- 411 名前:デフォルトの名無しさん mailto:sage [04/10/01 05:31:06]
- >>410
>int spffile = spfdata; だから、なんでbyte[]型をint型に代入しようとするのさ。 しかもPhraseのコンストラクタでint型を引数に取るものはない。 無意味な int spffile = spfdata; を書かずにspfdataを引数にすればいい。
- 412 名前:382 mailto:sage [04/10/01 16:03:13]
- 読み込みエラー、なんとか解決しました本当にありがとうございます
- 413 名前:デフォルトの名無しさん mailto:sage [04/10/01 16:45:05]
- >>411
遅くなった。 どっかでint型のデータを引数として渡せとか書いてあったのが頭の端っこにあったからかなり勘違いしてたっぽい。 spfdataを直接渡してやればちゃんと再生できました。 ところで、2種類の音を再生して、片方の音だけループするようにしたいのだけど ループの処理は常に再生されるか確認して停止してたらまた再生させる って処理でいいのかな?
- 414 名前:デフォルトの名無しさん mailto:sage [04/10/01 18:39:34]
- >>412
「なんとか」じゃなく、何が原因だったか知りたいぞ!
- 415 名前:382 mailto:sage [04/10/01 21:40:43]
- ピープオーバーが原因でした。
残量は表示させてたのですが取得する場所が悪かったみたいでちゃんと計れていないのが原因でした。
- 416 名前:デフォルトの名無しさん mailto:sage [04/10/01 22:37:27]
- すごく気になるんだが
「ピープ」って……なに?
- 417 名前:デフォルトの名無しさん mailto:sage [04/10/01 23:13:07]
- ピープ…とも読めるな。
ところで、配列にデータが入ってる場合だけ処理したいんだけどデータが入ってるか調べるのってどうするの? if(str[0] != null) で合ってるのかな?
- 418 名前:デフォルトの名無しさん mailto:sage [04/10/01 23:19:48]
- >417
「配列にデータが入っている」という意味がいまいちよく分からんな。 String[] strについて、そもそもstrがnullなのか、 strの要素が1個以上はあるけどその要素がnullなのか。どっちかいな。 String[] str = null; // この時点では前者 str = new String[3]; // この時点では後者
- 419 名前:417 mailto:sage [04/10/01 23:26:41]
- 分かりにくくてごめん
配列にjar内のテキストを読みこませてるんだけど、中身の無いテキストと中身があるテキストで処理を振り分けたい。 かなり分かりにくいな・・・・
- 420 名前:デフォルトの名無しさん mailto:sage [04/10/02 00:02:50]
- >>418
String[] str = new String[100]; とかしただけなら str[0]〜str[99] == null; そこに byte[] b = 〜 ; str[ 0 ] = new String ( b ); とすると str[ 0 ] != null だわな。 こういう感じならif( str[0] != null ) 〜 とすればいいんじゃない? str[0]=new String( new byte[0] ) の場合も !=null ( str[0].equals("")==true )になるよ。 自分の場合、配列初期化直後 for(i=0;i<str.length;i++)str[i]=""; でそれぞれの要素も初期化して if(str[i].equals("") ) 〜 とかやっちゃう。 結局、未初期化(=null)かそうでないか、空の文字列(="")かそうでないか、 どっちの判定をやりたいのかを明確にした方が吉。 別に if( str[0]!=null && str[0]!="")〜 でもできなくは無いと思うが。
- 421 名前:417 mailto:sage [04/10/02 00:07:13]
- ようするに初期化してない配列は(=null)で
空の文字列とか入れて初期化すると(="")ってことかな… だとすると空の場合実行するってのは if (str[i].equals("") ) { 処理 } でいいの?
- 422 名前:デフォルトの名無しさん mailto:sage [04/10/02 01:37:10]
- >>421
空文字("")とnullは別物だぞ。 String[] str; // この時点ではstrはnull str = new String[10]; // この時点でstrは実体あり、str[0]-str[9]はnull for(int i=9; i>=0; i--){ str[i]=""; // ここでstr[0]-str[9]はnullでなく""(0個の文字からなる文字列)を指す } ""に特別な意味を持たせるのかnullに特別な意味を持たせるのかは、 アンタのアプリの中身次第。
- 423 名前:417 mailto:sage [04/10/02 02:16:02]
- なる。
ちなみに421に書いたやり方で解決できました。 かなりさんきゅうべりーまっち
- 424 名前:デフォルトの名無しさん mailto:sage [04/10/03 16:01:15]
- ezアプリって>>2のツールでしかビルドできんのですか?
- 425 名前:デフォルトの名無しさん mailto:sage [04/10/03 16:31:20]
- >2の公開ツールに入ってるコマンドラインツールは必須だけど
それらをバッチファイルなりMakefileなりbuild.xmlから呼び出して使うことは普通に出来る。 実際、公式のビルドツールにも、ビルド手順をバッチファイルへ書き出すコマンドあるし。
- 426 名前:デフォルトの名無しさん mailto:sage [04/10/03 20:54:06]
- >>424 Sun以外にもコンパイラやライブラリ売っているメーカー
あるから、別にSunのじゃなきゃ駄目というわけでもないよ。
- 427 名前:デフォルトの名無しさん mailto:age [04/10/03 23:27:36]
- 質問です
4M程度のテキストファイルを一行ずつ読み込ませるにはどのようにすればいいのでしょうか? 一旦ファイルを読み込んで配列データにしてからなら一行ずつ表示させることは出来るのですが、ファイルから直接一行ずつ読み込むのが出来ません。 そもそもそのようなことが可能なのでしょうか?
- 428 名前:デフォルトの名無しさん mailto:sage [04/10/04 00:04:35]
- >>427
1バイトずつ読んで改行文字のところで自分で区切る。
- 429 名前:427 [04/10/04 00:13:31]
- すいません、改行文字って \n しか知らないのですが…。
具体的にどのような処理にすればいいのでしょうか? 初歩的なこと聞いてすいません。
- 430 名前:デフォルトの名無しさん mailto:sage [04/10/04 02:10:31]
- >>429
\nならバイト値で10のハズ。 try{ InputStream is=getClass().getResourceAsStream("/data.txt"); ByteArrayOutputStream os=new ByteArrayOutputStream(); String[] str=new String[1000]; int line=0; int data=data = is.read(); while (data != -1){ os.write(data); if(data==10){ str[line++]=new String( os.toByteArray() ); os=new ByteArrayOutputStream(); } data = is.read(); } is.close();os.close(); }catch(Exception e){} でいいと思うけど。String配列を可変長にするにはVectorでもつかえば・・。 厳密にはWindowsの改行は\r\nで13,10だけど\rが残ってもたぶん大丈夫。 というか4Mのテキストってドコに存在できるわけ?そういう意味では不可能だと思う。
- 431 名前:デフォルトの名無しさん mailto:sage [04/10/04 23:11:49]
- 致命的エラー: クラスパスまたはブートクラスパスでパッケージ java.lang を検出できません。
と出るんですけど、何の設定が間違ってるんでしょうか?
- 432 名前:デフォルトの名無しさん mailto:sage [04/10/04 23:14:42]
- >431
書いて有る通り 「クラスパスまたはブートクラスパス」 の指定が間違っとるのと違う?
- 433 名前:デフォルトの名無しさん mailto:sage [04/10/04 23:36:47]
- テキストビューア作ってるオレがアドバイスすると、
4MBのテキスト全部はヒープに収まらない。内部データ構造にもよるが500KBあたりが限度(V601T/V602SH) どうしても読みたいなら、メモリに全展開しない方式を考えた方がいい。 もちろんSDカードか本体のデータフォルダから読み込む。 あと、Javaは内部処理がすべてUnicode(たぶんUTF-16)なので、 文字コードとバイト数の違いに注意。 ちなみに、ケータイのプラットフォームはMS932でなくSJISっぽい。 絵文字はどうなるのか知らん。 >>430 ByteArrayOutputStream使ってないので何ともいえんが、 一文字ずつ処理するとたぶん読み込みが激しく遅くなると思う。 自前バッファでの環境だと、8192byteごとに処理するとエミュ・実機とも一番読み込みが早かった。 実装により多少前後すると思うが、1K-10Kくらいをまとめて処理した方が早くなると思う。 あと、読み込み中(ストリーム開いてる途中)にOutOfMemoryErrorがでると、 StorageConnectionが使い物にならなくなってしまうという現象に悩んでる。 ExceptionでなくErrorなのでどうにかなるもんではないという結論でいいんだろうか。。 つーことで、>427 ガンガレ
- 434 名前:427 mailto:sage [04/10/05 01:04:58]
- >>430
ソースまで書いていただいてありがとうです。 ちなみに4MのテキストファイルはSDカードに入れてます。 >>433 500KB程度で限界ですか…ピープ制限って結構厳しいですね。 全展開せずに開くとゆうことは、 例えば開こうとしてるファイルが100バイトだとすると、 50バイトから100バイトの範囲を読み込む、みたいな処理にすればいいのでしょうか? えと、それで、悪いのですがもう一つ質問です。 外部(SDメモリとか)に保存したJARファイルからリソースが読み込めると聞いたのですが、可能でしょうか? それなら、JARファイルはZIPと同じ圧縮だと聞いたのでZIPで圧縮して拡張子をJARに変えて使えばPCからファイルを送るときに楽な感じなのですが・・・。
- 435 名前:433 mailto:sage [04/10/05 02:50:56]
- >>434
> 50バイトから100バイトの範囲を読み込む 改行で折り返すんだから、たとえば1画面に収まるバイト数は一定でない。 だから、メモリに展開せず必要になったときに常時読み込むような処理を書くのはめんどい。 > 外部(SDメモリとか)に保存したJARファイルからリソースが読み込める 拡張子とかファイルの中身に制限はないので、(厳密にはjpz/pnzとかSD書き出し時.hufの保護されたファイルは読めない) ZIPだろうがjarだろうがlzhで独自解凍処理組み込もうが何でもかまわん。 何がやりたくてどう楽なのかは知らんが。 理論的には、外部ファイルを解釈するインタープリタ作れるかもな。NESエミュもその一種に該当するか。 ところで、質問ばっかでアンタがどこまで理解してどこまでできてて何をやりたいのがよくわからんのだが。 最初の質問 >427 は >430 ですべて解決してるし。 StreamTokenizerみたいなのが欲しいだけ?もちろんそんなものはJ2ME/MIDPにはないけど。
- 436 名前:430 mailto:sage [04/10/05 09:38:51]
- あとでよく見ると\nも残っちゃってるな。まぁその辺は適当に・・。
>>433 なるほど。軽いファイルばかりでしかやってなかったので特に遅さは感じなかったけど 確かにある程度まとめたほうがよさそうですね。 僕は4Mでも全部開くつもりでソース書いてしもたけどやっぱ一部のみしか使えないよね。 じゃあ430のように1バイトずつ読んで\n探すより、例えば100KB分のバイト列読んで その分を一度文字列化してindexOf("\n")、substringとか使って区切ったほうがいいかも。 その場合は行の途中から始まったり今何行目なのか分からなかったりだけど。 小説みたいに読めればいいならそれでもいいと思うが、きっちり行を意識するとすれば 例えば100B読んで途中で切れた行の先頭が95Bなら、つぎは95から100B読むとか。
- 437 名前:デフォルトの名無しさん mailto:sage [04/10/05 15:03:09]
- vアプリってコンパイラはどこですか?
えみゅれーたしか見つかりません。
- 438 名前:デフォルトの名無しさん mailto:sage [04/10/05 17:19:06]
- >437
コンパイラ自体はJ2SEのjavacでよろし。 ただし最新のを使っていけるかどうかわからんから ボダの公式サイトをもう一辺よく読んでらっしゃい。
- 439 名前:417 mailto:sage [04/10/05 21:26:03]
- あ、ごめんちょっと勘違いしてた。
436みたいな感じで100KB文のバイト列読んで〜 って感じでいってみます。 ZIPから読もうとしてたのはリソースファイルが結構な数あるのでカードに転送する時、一つのファイルだけ転送すればいいので楽になるかなと思ったからです ちょいと色々試してみますね。
- 440 名前:デフォルトの名無しさん [04/10/07 12:31:21]
- VappliをDLサーバーにアップロードしたのですが
ダウンロードHTMLの記述の仕方がイマイチよくわかりません いいサンプルとかありましたら教えてください
- 441 名前:デフォルトの名無しさん mailto:sage [04/10/07 16:11:20]
- おめでとうございます。440様あなた天然記念物・珍獣保護種に指定されました。
by Vアプリ普及委員会
- 442 名前:デフォルトの名無しさん mailto:sage [04/10/07 18:02:41]
- pashe3.0の拡張データストレージって"storage:"でアクセスできるのはわかったんだけど
iアプリのpos=みたいにopen位置を指定できないの?
- 443 名前:デフォルトの名無しさん [04/10/07 18:31:29]
- Phraseプレイヤーで複数の音源を同時再生できるのは分かったんだけど、和音数少なくて使い物にならないので他ので試そうと思ったんですけど
他の音源での同時再生は不可能でしょうか?
- 444 名前:デフォルトの名無しさん mailto:sage [04/10/07 18:42:24]
- 携帯java環境でString配列のソートをおこないたいのですが、
Arraysクラスが使えないようで、他の方法を探っています。 みなさんは手作業でソートを行なっているのでしょうか? つかっているクラス、メソッドがあれば教えてください。
- 445 名前:デフォルトの名無しさん mailto:sage [04/10/07 19:13:39]
- >>440
VアプリはコンテンツアグリゲータのサーバでしかDLできませんので、 とりあえずアプリゲットとかその辺に作者登録して指示通りにやるべし。 そのDLサーバがそうだというなら話は別だけど、どうせ自サバかレンタルでしょ? >>442 storageというかInputStream作るんだから InputStream.read(byte[] b, int off, int len) 使ったら? >>443 Phraseはmmfとpcmを合成して音源鳴らすんで、コレも単音源と言える気がする。 合成が必要な分、負担を減らすための和音数削減だと思うし。 解決にはならないでしょうけど、SmafPlayerとHVは同時に鳴らせたよ。 >>444 getBytes()とかでバイト列作って先頭から比較していく。そうすっと文字コード順に並ぶ。 入れ替えは String tmp=str[i]; str[i]=str[j]; str[j]=tmp; って感じの手作業。
- 446 名前:デフォルトの名無しさん [04/10/07 23:54:35]
- あどれす家だって登録してます?
ttp://www.adyada.com/
- 447 名前:デフォルトの名無しさん [04/10/09 01:41:04]
- RecordStoreを使ってゲームの途中データを保存させようとしていて、
セーブする際にレコードIDを指定してい保存したいのですが もし1〜5までのレコードIDを使ったとして、1に保存されてないのに2に保存することは不可能でしょうか?
- 448 名前:デフォルトの名無しさん mailto:sage [04/10/09 02:07:58]
- >>447
setRecordとaddRecordの違いをふまえよ。
- 449 名前:デフォルトの名無しさん mailto:sage [04/10/09 13:57:11]
- >>447
レコードIDが指定出来るのはsetRecordだけだから既にあるIDしか指定出来ない だから1に保存されてないのに2に保存は無理 IDが指定したいのなら、 起動時にレコードIDの5が存在するか調べて存在しない場合は空のデータをaddして5まで作成する でもそうするとデータが存在することにはなってるから読み込んだときに何も保存されてない訳だからエラーになるだろうな こんな感じに処理すれば指定は出来るけどどうやって処理するのかは知らん。 誰か追記してくれ
- 450 名前:デフォルトの名無しさん mailto:sage [04/10/09 14:27:39]
- まず>>447が落ち着いて文章を書け。
どんな仮定で何を聞きたいのか意味不明。
- 451 名前:447 mailto:sage [04/10/09 14:57:50]
- >>450
ユーザーがセーブした順番通りにデータを並べたいのです 言葉だと自分でも何言ってるのか分からないので自分なりに説明してみます [セーブ1空] [セーブ2空]←ここにユーザーがセーブする [セーブ3空] [セーブ4空] これで、読み込む際に [セーブ1空] [セーブ2入] [セーブ3空] [セーブ4空] このように表示させる為に、RecordIDで順番を整列しようと思ってるのです 分かりにくくてすいません。
- 452 名前:450 mailto:sage [04/10/09 15:13:18]
- >>451
こんな処理手順でどうかな。 ・アプリの初回起動時に保存データをnullとしたレコードを4つ生成する(IDの1〜4)。 ・ユーザーの要求に従ってID1〜4の任意のレコードに保存する。 (レコードはすでに4つ存在しているのでどれでも指定できる) ・画面に表示する際は、レコードID1〜4を順番に読み出していき、 nullなら空、nullでないならデータありと判断して表示処理する。
- 453 名前:447 mailto:sage [04/10/09 15:36:51]
- >>452
初回起動時かの判断ってどうすればいいでしょうか? 私が思いつく限りでは毎回、 起動時にRecordStoreを開いてtry文でID4を読み込みエラーをキャッチしたら1〜4にnullを書き込む方法ですが この方法で大丈夫でしょうか
- 454 名前:デフォルトの名無しさん mailto:sage [04/10/09 16:27:53]
- MIDPだけでキーの押されているとき、いないときの
判定をしたいのですがどうすればいいのですか?
- 455 名前:デフォルトの名無しさん mailto:sage [04/10/09 16:44:05]
- >454
KeyPress用フラグとKeyRelease用フラグを用意して、 それぞれのイベントで立てたり倒したりする。 で、判定時にはそのフラグを見て処理。 が定石だと思うのですが如何か。
- 456 名前:447 mailto:sage [04/10/09 19:05:24]
- if(getNumRecords()==0)で
String moziretu = null; byte[] savdata = moziretu.getBytes(); と、してfor文かなにか使ってsavdataをaddRecordで4回書き込めばいいのかな・・・
- 457 名前:447 mailto:sage [04/10/09 19:13:08]
- ごめん、追記です
String moziretu = null; ではなく、 String[] moziretu = null; と言う配列データです。
|

|