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 あたりにリンク集
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; と言う配列データです。
458 名前:450 mailto:sage [04/10/09 21:57:45] >>447 レコードストアの有無を気にせずとりあえず読み込みモードでオープンする。 RecordStore rs = RecordStore.openRecordStore(〜, false); rsがnullなら初回、nullでないなら2回目以降、と判断できる。 初回起動だと判断したらレコードストアを新規作成する。 以下は考え方なので、実際にはtry-catchとかやってくれ。 //レコードストアを新規作成モードでオープン RecordStore rs = RecordStore.openRecordStore(〜, true); //内容がnullのレコードを4つ作成する for (int i = 0; i < 4; i++) rs.addRecord(null, 0, 0); //クローズ rs.closeRecordStore(); この時点で空のレコード(保存内容がnullのレコード)が4つできてる。 >>452 や上記の考えではレコードの内容がnullかどうかで"空"か"入"かの区別と しているが、nullの代わりに「"空"を示すデータ」をrs.addRecord()のところで 保存しても構わない。やりやすいように変えてくれ。
459 名前:デフォルトの名無しさん mailto:sage [04/10/09 22:58:55] >>447 ちょっと解決策というわけじゃないんだが、アイデアがあるなら一度やってみてはどう? 456や457を見る感じ、ある程度分かってるみたいだし、書けなくは無いと思うけど・・。 レスが来る前に結果出せると思うし、駄目だったらその時細かく聞けばいいと思うが・・。 個人的な考えかも知れんが「null」を使うのはあまりよくないと思う。 417〜423でも書いてたけど文字列なら「""」の方がいい気がする。 キッチリ if( str[ i ] == null ){ 無い時 } else { 有る時 } と毎回やればいいけど ウッカリすると「ぬるぽ」が発生しかねない希ガス。 たとえば457を例にして mojiretu[ 0 ] = null; → byte[] data = mojiretu[ 0 ].getBytes(); で「ぬるぽ」。 byte[] data = null; → addRecord( data , 0 ,data.length ); でも「ぬるぽ」。 となると if( mojiretu[ i ] == null )rs.addRecord( null , 0 ,0 ); else { byte[] data=mojiretu[i].getBytes(); rs.addRecord(data.0,data.length); みたいにする必要がある。 「""」なら読み書きは変える必要が無く、空入の区別が必要なときだけ if( mojiretu[ i ].equals( "" ) ){ 無い時 }else{ 有る時 } でいい。
460 名前:447 [04/10/09 23:58:40] すいません、自分なりにソース書いてみました コンパイラとVアプリエミュで試してみるとちゃんと動きましたが、実際に保存出来ているのか謎なので 念の為意見お願いできますでしょうか? catch{}はtry{}が実行出来なかった場合に実行するとゆう意味だと私は思っているので問題はないと思うのですが…。 try { RecordStore rs = null; RecordStore.openRecordStore("test",false); if (rs == null) { rs.closeRecordStore(); RecordStore.openRecordStore("test",true); for (int r=0;r<6;r++) { rs.addRecord(null,0,0); } rs.closeRecordStore(); } else { rs.closeRecordStore(); } } catch (Exception e) {} testと言うレコードストアにIDを6まで作っています。
461 名前:450 mailto:sage [04/10/10 00:08:53] 447へのQ&Aとは直接関係ないカキコになるけど、一応フォローというか… >>458 の最後に書いたけど、>>459 が示したようにnullを用いずに 空文("")をもって「データなし」とするやり方も、もちろん普通にありだ。 ただ、 >「null」を使うのはあまりよくないと思う。 からではない。これはアプリによる。 保存するデータがユーザー入力の文字列だったりする場合、もし空文("") で初期化していると、そこが未使用のレコードなのか、ユーザーが何も 入力しなかった文章を保存したレコードなのか、区別が付かない。 そういうアプリではnullで初期化するとよい。 ここでもnullの代わりに適当な文字列をもって”空”の印にすることもできるが ユーザーがその文字列を絶対に入力してこないという保障はないので、 その可能性を心配するくらいなら、やはりnullで初期化するのが妥当だろう。 >>447 はどんなデータを保存するか質問内容からは分からなかったので >>458 の最後はあのような書き方をした。 また、「レコードのデータの初期値としてnullを使う」と自分で分かってて 決めていれば、自然とヌルポを意識したコードを書くから過度に警戒する 必要はない。というか慣れの問題。
462 名前:450 mailto:sage [04/10/10 00:21:49] >RecordStore rs = null; >RecordStore.openRecordStore("test",false); オープンした戻り値をrsで受けなきゃ。 >if (rs == null) { >rs.closeRecordStore(); rsがnullなのにrs.〜();とメソッド書いたら、これがヌルポだ! ここでchatch(〜){〜}へ直行するハメに。
463 名前:447 mailto:sage [04/10/10 01:37:36] 直してみました。 初めに int selectdata = 1;//これにユーザーが選んだ番号が入る String[] data;//これに書き込む(読み込んだ)配列データが入る を宣言してるものとします // *初回に空レコードを作成する try { RecordStore rs = null; rs = RecordStore.openRecordStore("test", false); if (rs == null) { rs.closeRecordStore(); rs = RecordStore.openRecordStore("test", true); for (int r=0;r<6;r++) { rs.addRecord(null, 0, 0); } rs.closeRecordStore(); } else { rs.closeRecordStore(); } } catch (RecordStoreException e) {} // *セーブ data[0] = "1個目のデータ"; data[1] = "2個目のデータ"; data[2] = "3個目のデータ"; try { RecordStore rs = RecordStore.openRecordStore("test", false);//初回で既に作成されているのでfalse byte[] b = data.getBytes();//dataをバイトに変換(合ってる?) rs.setRecord(selectdata, b, 0, b.length); rs.closeRecordStore(); } catch (RecordStoreException e) {}
464 名前:447 mailto:sage [04/10/10 01:43:42] 463続き // *ロード try { RecordStore rs = RecordStore.openRecordStore("test", false); byte[] b = rs.getRecord(selectdata); data = new String(b);//バイトを配列に変換(変換方法分からず) rs.closeRecordStore(); } catch (RecordStoreException e) {} こんな感じで書いてみたのですがコンパイラが byte[] b = data.getBytes();の部分でシンボルを解決出来ません data = new String(b);で互換性のない型。 と言ってきます。 解決出来ませんのエラーは何故か分かりませんgetByte();ってのがあったはずですし…。 互換性のない型はどうやって配列に直すのかが分からないからです。 多分このエラー以外は間違い無しだと思うのですが…
465 名前:450 mailto:sage [04/10/10 02:42:19] >>464 >byte[] b = data.getBytes();の部分でシンボルを解決出来ません 配列の要素を個別に扱わないと。 String[] data; としてるんだから byte[] b = data[0].getBytes(); などとなる。 ところで、ズラーッとソース貼るのもなんなので、テキスト形式のファイルで どっかのアップローダに上げた方がいいかもしれんよ。
466 名前:450 mailto:sage [04/10/10 02:44:30] String rsName = "test"; boolean existed = false; //レコードストアの存在確認 try { RecordStore rs = RecordStore.openRecordStore(rsName, false); if (rs != null){ existed = true; rs.closeRecordStore(); } } catch (Exception e){ existed = false; } //レコードストアが存在しない場合→新規作成 if (!existed){ try { RecordStore rs = RecordStore.openRecordStore(rsName, true); for (int r = 0; r < 6; r++) rs.addRecord(null, 0, 0); rs.closeRecordStore(); } catch (Exception e){}
467 名前:447 mailto:sage [04/10/10 16:55:43] >>450 次から長いの貼るときはアップロード使いますね。 ふむふむ、配列の要素個別に扱わないといけないんですね。 とゆうことは配列に3つの要素があるのでIDは今の3倍必要になりそうですね…。 レコードストアの初期化はこっちのほうが短くて綺麗ですね if(!existed)ってのは初めてみたのですが「trueでなければ」てことですかね? ソース書き直してみます
468 名前:デフォルトの名無しさん mailto:sage [04/10/10 20:54:02] 既出だったら申し訳ないが、Vアプリの開発情報色々増えてる。 P6エミュも出てる。 developers.vodafone.jp/dp/ 2004/10/08 更新情報 Vアプリ開発ツール ・V-appli Emulator(P6型)Ver1.0 ・V-appli Emulatorサンプルアプリ(P6型) ・ユーザーズガイド(P6型) ・Eclipse連携マニュアル を追加しました。 2004/10/01 更新情報 Vアプリ技術資料 ・概要編 Ver.1.0.5 ・開発編 Ver.1.0.3 ・メディア編 Ver.1.0.2 ・シリアル制御編 Ver.1.0.2 ・Tips編 Ver.1.0.12 ・Vアプリ端末情報 Ver.1.0.11 を更新しました。 ・新機能導入の手引き2004 〜P6型端末編〜 Ver.1.0.5 ・APIリファレンスJavadoc版(P6型) を追加しました。
469 名前:デフォルトの名無しさん mailto:sage [04/10/10 23:30:49] 一瞬MIDP2.0かと思ったら256k ver2でしたか。