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 あたりにリンク集
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でしたか。
470 名前:447 [04/10/11 01:14:01] ソース書き換えてみたのですがコンパイラではエラー出ず、エミュで実行するとエラーは出ませんが表示させたい部分が表示されません。 ソースはこんな感じです // *ロード try { RecordStore rs = RecordStore.openRecordStore(rsName, false); for (r = 0; r < 5; r++) { byte[] b = rs.getRecord(r+1); if (b == null) { rsDate1[r] = "ぬるぽ"; } else { rsDate1[r] = new String(b); } } rs.closeRecordStore(); } catch (Exception e) {} for文使って1〜5のIDに入っているデータを読み出して、ifでbがnullの場合は"ぬるぽ"を代入してるのですが drawString(rsDate[0],〜)で表示させても何も表示されません。
471 名前:450 mailto:sage [04/10/11 01:47:36] 配列b自身はnullにならない。ややこしい話は省略するが if (b == null) を if (b.length == 0) として。
472 名前:450 mailto:sage [04/10/11 02:18:47] すまん。混乱した。>>471 は取り消し。
473 名前:447 mailto:sage [04/10/11 02:44:05] >>450 いや、それで今の問題は直ったが。 でもまた次の問題が出てるわけだがな…。 自分で修正してみて手負えなかったら書き込みま
474 名前:450 mailto:sage [04/10/11 03:07:39] 自分が使ってるソースではやっぱ>>471 のようにしてた。 >>472 の書き込みはすみませんでした。
475 名前:デフォルトの名無しさん mailto:sage [04/10/11 04:13:57] >>468 サンクス。 ITMediaあたりでニュースになってなかったから気づかんかった。 まぁ先がないJSCLですが。
476 名前:デフォルトの名無しさん mailto:sage [04/10/11 08:32:08] >>470 その部分におかしな所はないと思う。表示できないなら表示部分を疑ってみて。 例えばrsData[0]がnullとか""の時がありうるのか、その時はdrawするのか、 単に背景色と同色で描画とか、画面外にdrawとか、後に上書きしてないか、とか。 コンストラクタの段階で適当な文字列 rsData[0] = "てきとー"; とかで表示を確認して レコード読み取り後どう変わったのかを確認するといいと思う。 あと、エミュで実行するなら、tryでエラーが出てないかの確認のため }catch(Exception e){ System.out.println( e.toString() ); } とかした方がいい。特にレコード関連はコード以外にもエラー原因があるし。
477 名前:447 mailto:sage [04/10/11 13:14:21] >>476 e.toString()でエラー書き出したらrsDate1[0]に何も入ってないのが原因だった。 byte[] bなんで、if(b==null)じゃelseになってしまい、bに何も入ってないのにrsDate1[0]に代入して表示させてるからぬるぽ ところで、open〜close内でgetRecord();を何度かに分けて使ってるんだけど、 2回目のgetRecord()でデータがちゃんと読み込めてないみたいなのですが open〜closeを3回に分けて書くと正しく動きました。 もしかしてopen〜close内でgetRecord()は一回までって制限ある?
478 名前:476(459) mailto:sage [04/10/11 19:21:32] >>447 だ〜か〜ら〜、e.toString()したらエラーの原因が分かるでしょや。 メッセージの意味が分からんならそれを調べるか聞くかしなっせ。 ソースが470+471のままなら(違うなら言ってね)、r=1の時何が起こってるか、 いっそ一行ごとにprintln使ってどの行まで行けてるか、ifでどちらに飛んでるか、 めんどうでも細かく調べてみることをオススメ。理解への近道。 やはりnullかどうかが面倒になってきそうだからもう一度459を奨めてみるテスト。 なんなら保存したいデータの変数が分かればsaveとroadメソッド書くよ。 あと細かいけど ・getRecord() なんてメソッドは無い。 ・rsDate1て、日(date)は関係無いだろ。 ・所々敬語を混ぜるくらいならいっそ全部普通語のほうがいいと思う。
479 名前:447 mailto:sage [04/10/11 23:13:06] >>478 e.toString()でエラー書き出したらnullPointerExceptionになってたってことを書いたのですが・・・。 原因は空(null)のrsDate1[0]をdrawStringさせようとしたからです これはif(b.length==0){}で空の場合は適当に文字列代入させることで解決出来ました getRecord()はレコードストアの指定IDからバイトデータで読み込むやつ 確か、byte[] getRecord(int recordID) rsDate1[0]はString rsDate1[]って配列データの要素で date=日じゃなくてデータ=dataを間違ってdateにしてた。
480 名前:476 mailto:sage [04/10/12 08:38:39] >>44 nullをdraw、int id、data、そんなことは分かってた。 今回の問題は >getRecord()でデータがちゃんと読み込めてないみたいなの でしょ?じゃあソコでe.toString()使おうとか思わなかったの? 使ってたけど何もメッセージが無いなら、一つだけ読んで終わるようにしてたんだろ。 ソース変わったなら言って、と書いたが何も無いってことはそのままか。 じゃあ470の最後のcatchでメッセージをださせてみて。
481 名前:447 mailto:sage [04/10/12 13:24:01] >>480 すまんちょっと勘違い getRecord()でデータがちゃんと読めてないと思ってたのは、 >>466 のをID10まで作成するようにして使ってたのを途中で20変えたが既にレコードは存在するのでIDが追加されずに読み込もうとしたのがエラーの原因だった。 コンパイラもエラー吐かないしエミュでe.toString()使ってもNullPointerExceptionって出るしでgetRecord()でちゃんと読めてない物だと思ってた けどそれは妄想でIDが追加されてないのが原因だったと・・・。
482 名前:デフォルトの名無しさん mailto:sage [04/10/13 22:20:36] C4型、P4型では問題なく開発出来ていたのだが、 P5型のエミュが「fail prepareApplication」と出て動作せずに困っています。 ただ、サンプルの実行は出来るので実行ファイルを作成する段階でなにかミスを していると思うのですが、C4、P4と手順が違うところってあるのでしょうか?
483 名前:482 [04/10/14 01:50:11] MIDlet-Jar-URL:でスペルミスしてただけだった。 orz
484 名前:デフォルトの名無しさん mailto:sage [04/10/14 15:12:05] byteデータを数値に変換して比較したいのですが、直接intにbyteを入れても互換性のない型と出てコンパイルに出来なくて困ってます 調べてみるとintValueで変換出来ると書いてあったので試してみたのですがシンボルを解決出来ませんと出てしまいます。 byteデータをintに変換するにはどうしたらいいのでしょうか?
485 名前:デフォルトの名無しさん mailto:sage [04/10/14 15:39:24] すいません byteデータではなく、byte[]でした byte[] bytes;ってな感じに書いてますがint number = (int)bytesとしてもコンパイル出来ませんでした。
486 名前:デフォルトの名無しさん mailto:sage [04/10/14 19:49:22] >byte[] bytes;ってな感じに書いてますがint number = (int)bytesとしても >コンパイル出来ませんでした。 あたりまえです。こちらへどうぞ。 【初心者】Java質問・相談スレッド54【大歓迎】 pc5.2ch.net/test/read.cgi/tech/1096548618/
487 名前:デフォルトの名無しさん mailto:sage [04/10/14 22:51:41] 配列だからな w 超初心者の俺でも分かるぜ (エッヘン w
488 名前:デフォルトの名無しさん [04/10/15 12:11:20] 質問なんですが、 Vアプリ開発ガイド[Tips編]によれば、SH系でネイティブ連係機能を使う際はkeyReleasedイベントでやれとのことですが、 ソフトキーによるcommandAction処理の場合はどうすればいいんでしょうか。。 TextBoxで気にせず素直にcommandActionでネイティブ呼び出すような処理を書いたら、 次同じソフトキーを押したときのイベントが起こりませんでした。 おそらくCanvasでkeyReleasedでやれと書いてあるのと同じ理由によるんだと思います。 (Pressedイベントでネイティブに遷移するとReleasedイベントが処理されないから、次ボタンを押した際はPressedが起こらずReleasedのみ起こる) 仕方ないので、commandActionでは処理したいことをやるためのthreadを別に立ち上げ、 ユーザがボタンを放してReleasedイベント処理されたかなと思われるくらいの時間threadにwaitかけてそれから処理するように仕組んだんですが、 なんか回りくどいですし、ユーザがボタン押しっぱなしでwait時間切れしたらそもそもこんな処理入れる意味がないですし。。
489 名前:デフォルトの名無しさん mailto:sage [04/10/16 14:34:55] >>484 >>311
490 名前:デフォルトの名無しさん mailto:sage [04/10/17 01:03:15] ゲームを作っているのですがフレーズ再生で困っています。 フレーズ再生を共通のプログラムでC4型、P4型、P5型問わず 動作させたいのですが、C4型のcom.j_phone.amuse.PhrasePlayerに対し com.jblend.media.smaf.phrase.PhrasePlayer とパッケージ名が異なるためコンパイルさえ通りません。 jar中にcom.j_phone.amuse.PhrasePlayerクラスを掘り込んで 機種判別してクラスを使い分ける方法を考えたのですが、 どなたか実際に動かしたかたおられますか?
491 名前:デフォルトの名無しさん [04/10/18 17:23:48] Vodafoneを使っているのですが、 携帯電話の側面についているボタンやオーディオリモコンのボタンのキーイベントを取得する方法ってあるんでしょうか? 携帯を閉じたまま、イベントを発生させたいんですが、何かいい方法あれば教えてください!!
492 名前:デフォルトの名無しさん [04/10/18 19:02:24] 質問です。 EZアプリ(Java)でカメラ制御を行おうとしているのですが、 エラーが出て困っています。誰かご存知の方がいましたら教えて下さい。 以下、サンプルコードです。 PhotoConnection conn = ( PhotoConnection ) Connector.open("photo:"); conn.setMode(PhotoMode.MOBILE_MODE); PhotoContent photo = ( PhotoContent ) conn.capture(false); byte[] data = photo.getData(); conn.close(); kjxへのコンパイルは正常にいくのですが、エミュレータで起動すると 「ALERT: Cannot load class com/kddi/id/CameraConnection」 と出てしまいます。コンパイルは出来るので、プログラムは間違っていない と思うのですが、何が駄目なのでしょうか? よろしくお願い致します。
493 名前:デフォルトの名無しさん [04/10/18 22:19:20] >>492 自己レスです。 エミュレータが3.0に対応していないためみたいです。 実機では動きました。
494 名前:デフォルトの名無しさん mailto:sage [04/10/20 05:56:13] P5のエミュレータ GraphicsUtil.drawRegion()が遅すぎて使い物にならなくて困っています。 どうにもならないのでしょうか?
495 名前:デフォルトの名無しさん mailto:sage [04/10/20 05:58:41] >>494 homepage1.nifty.com/marukun/java/vapp.html > →GraphicsUtil.drawRegion()の処理がエミュレータでのみ著しく重いという事みたいです。
496 名前:デフォルトの名無しさん mailto:sage [04/10/20 14:22:41] P6のエミュでデバッグ情報がでなくなってるんだけど… コレは以前のエミュのようにデバッグ情報を出すにはどうすればいいでしょうか。
497 名前:デフォルトの名無しさん [04/10/20 23:00:22] テキストボックスを使って数値を入力したいのですが、どこを探してもiアプリのtextBoxしか見つかりませんでした。 前にVアプリでテキストボックスを利用しているアプリを見たような気がするのですが、 Vアプリにはテキストボックスは無いのでしょうか? 参考になるサイトなどご存知の方居ましたら教えてください
498 名前:デフォルトの名無しさん mailto:sage [04/10/20 23:24:06] >>497 参考になるドキュメント→>>2 テキストボックスはプログラマ各々が自作するものなのか、用意されているものなのか。 といった携帯アプリを作るJavaの構成が理解できてないってこったな。
499 名前:デフォルトの名無しさん mailto:sage [04/10/20 23:42:36] >>497 godwood.allnet.ne.jp/vioret/midpapi/javax/microedition/lcdui/TextBox.html
500 名前:名無しさん mailto:sage [04/10/21 05:26:08] JSCLを使って作られていたプログラムをMID-P2.0の機能で 実装し直そうとおもいます。 resフォルダに入れたファイルを読みたいのですが openDataInputStream(ss);あたりでエラーになるのですが どうすればいいのでしょうか? とりあえず画像ファイルはcreateImageで代替えできるのでいいのですが バイナリだとやり方が思いつきません エラー java.lang.ClassNotFoundException: com/sun/midp/io/j2me/resource/Protocol at javax.microedition.io.Connector.openPrim(+99) at javax.microedition.io.Connector.open(+15) at javax.microedition.io.Connector.open(+6 javax.microedition.io.ConnectionNotFoundException: The requested protocol does not exis 環境 j2me_wireless_toolkit-2_1_01-windows.exe JSCLと関係ないとおもうのですがわかりません 解決策をおしえてください よろしくおねがいします。
501 名前:500 mailto:sage [04/10/21 05:27:58] import java.io.*; import java.util.*; import javax.microedition.io.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.io.*; import javax.microedition.rms.*; try{ //byte buf1[] = new byte [0x3000]; //String s = "resource:///"; //String ss; //int buf_p=0; //for( int i = ReadCount; i < 13; i++ ){ //try { //ss = s+i+".png"; //DataInputStream _in = Connector.openDataInputStream(ss); //buf_p = _in.read(buf1); //_in.close(); // //} catch (IOException x) { //game_mode = -2; //break; //} //image_back[i] = Image.createImage(buf1, 0, buf_p); //ReadCount++; //} String str; for( int i = ReadCount; i < 13; i++ ){ str = i + ".png"; image_back[i] = Image.createImage("/" + str); } }catch(Exception e){ }
502 名前:494 mailto:sage [04/10/21 12:58:52] >>495 ありがとうございます。 実機では普通に動くのは知っていました。 エミュレータが遅すぎて困ってるんです。 正直デバックが苦痛です。 エミュレータで普通に動かすにはどのくらいのマシンスペックが必要なのでしょうか? ちなみに私の環境は P4の2.53GHz、メモリ512MB、OSは2000です。
503 名前:名無しさん mailto:sage [04/10/21 20:44:41] 週間ゲーム&アプリLiveでは0x, 30x, 40xと5x, 60x, 80xに分けられていますが どちらでも動作する50Kbyte未満のJAVAアプリ(jadはMIDlet-OCL: JSCL-1.0.1で定義)も 別々に登録される事になるんですか?
504 名前:デフォの名無しさん mailto:sage [04/10/21 21:40:41] イースってゲームでSDに保存したJARファイルからデータを読み出して使ってるみたいなんですけど、 これは url = "jar://mc/test/test.jar/test.png"; connector.open(url, Connector.READ); とすれば開けるのでしょうか? 開発ガイドには jar://ファイル名+リソース名 としか書いてなかったもので・・・ 知ってる方居ましたら宜しくお願いします
505 名前:504 [04/10/22 00:50:52] すいません訂正です url = "jar://mc/test.jar/test/test.png"; でした。 SD内の、test.jarの中のtestフォルダ内のtest.pngを指定しています
506 名前:488=495=499 mailto:sage [04/10/22 02:54:48] >>490 全部で動かそうと思うとC4型用のAPIのみで作る必要がある。C4のAPI使えばP4/P5でも動くと思う。 機種のライブラリを判別して個別処理させるんなら、判別法がTips編の1.12に載ってるね。 >>491 閉じるとVアプリは一時停止する仕様だから閉じたままは無理。 継続型待ち受けアプリならいけるかもしれんが、P6型ではこのタイプのアプリは廃止されたそうな。 開いたままでもかまわんなら、キーコード表示するデバッグ用のアプリを端末に入れて、 押したキーとキーコード対応を自分で解析すれば何とかなるかもしれん。 もし解析した場合はキーコード情報の報告ヨロ >>500-501 jarの中身のファイルをストリームで開くのはClass.getResourceAsStreamを使うのが一般的じゃね? Connector.openとかのURL部分に何が指定できるのかオレは詳しくシラネ。
507 名前:488=495=499 mailto:sage [04/10/22 02:55:12] >>502 普通にっていわれても、アプリでどんなけの処理をしたいかによるから一概にはいえんと思うが。 1回の描画で40*40のImageを使って(使い回して)Canvas#paintのGraphicsに400回ほどdrawRegionを呼んで転送するアプリをオレは書いたけど、 エミュで特に動作速度に不満はなかったなぁ。Time取得して描画前・描画後の差分取ったら0.1秒以下だった、おおむね30-40msecほど。 Pen4 2.4CGHz/1GB/Win2kSP4 あと直接関係ないが、>P4 という表記は紛らわしいのでやめた方がいいと思われ。。 それと、エミュでなく実機でのみの話だと思うが、少数のImageだけ使った方が高速処理できるそうな(新機種手引P6型端末編2.3.3より) >>503 オレはアプリLive使ってないので知らんが、ページ構成見る限りそう取れるよねぇ。 直接アプリLiveサポに聞いてみたらどう? アプリゲットの方は、全部で動くアプリの登録は1回でOK >>504-505 該当箇所(概要編4.6)読んだが、自分でWebからダウソ・RecordStoreに保存したjarファイルにアクセスする場合って前置きがあるが。 SDカードにアクセスするためにはStorageConnection使う方法しかないとオレは理解してるんだが。 で、誰か >488 もおながいします。。
508 名前:488=495=499 mailto:sage [04/10/22 02:58:35] >>507 > Pen4 2.4CGHz/1GB/Win2kSP4 +VアプリエミュP5型 あと、文章が横に長くなってしまってスマソ
509 名前:デフォルトの名無しさん mailto:sage [04/10/22 04:09:16] >>488 は >TextBoxで気にせず素直にcommandActionでネイティブ呼び出すような処理を書いたら、 > 次同じソフトキーを押したときのイベントが起こりませんでした。 ここが問題点の核心なんだが2行目がイミフメでコメントできない ソフトキーでのTextBox呼び出し処理自体は書いたことあって普通に動作してる
510 名前:488=495=499 mailto:sage [04/10/22 05:11:47] >>509 Command登録したTextBoxで、ソフトキー押されたときにネイティブ連係する機能 (具体的にはStorageConnection使ってファイルを保存する操作、 保存時に上書き確認メッセージがネイティブ側で表示される) を用意した場合で、 TextBoxに遷移→ユーザがソフトキー押す→commandActionイベント通知→保存処理を実行 →保存確認メッセージ(ネイティブ)→ユーザがOK→TextBoxに戻る→ユーザがもう一度ソフトキー押す →イベントが通知されない・commandAction呼ばれない となります。さらに続けてもう一回ソフトキーを押すと反応します。 ネイティブ連携しない機能をcommandActionで呼ぶ場合は問題ないです。 TextBoxをCanvasに、ソフトキー(Command)イベントをkeyPressedイベントに 置き換えた場合の説明がTips編(SH53/V601SH箇所)に説明されてますが、 この場合はkeyPressedではなくkeyReleasedでやれと書いてあります。 でもcommandActionイベントはボタンを押したタイミングで起こり、 またボタンを放したタイミングはイベント取得できないので、 同様の回避法は使えません。 で考えたのが >488 後半のThread使った回避法で、 要はユーザがボタンを放すタイミングの時にネイティブ機能が動いているといけないということなので、 ユーザがボタンを押してから離すまでの時間くらいwaitでずらしてから機能を呼ぼうということをしてます。 でも何か根本的解決ではないので、別の回避法やってたり同様の現象で悩んだりしている人がいないかどうかが確認したいんです。
511 名前:500 mailto:sage [04/10/22 05:40:48] >>506 サンクス。試してみマツ
512 名前:509 mailto:sage [04/10/22 08:42:25] >>510 回避策は2つ思い浮かぶ。 1つめ。 keyReleased()で処理すればうまく行くと思うのであればcommandAction()を keyPressed()とkeyReleased()に分解すればいい。 やりたい処理(ファイルアクセス)をcommandAction()ではなくkeyReleased()に書き、 commandAction()からはkeyPressed()とkeyReleased()を呼び出す。 これで見かけ上はソフトキー押下が数字キー同様のkeyPressed()/keyReleased() に反応しているかのようになるのでドキュメントの条件を満たしたことになる。 …なーんて、これじゃ回避策になってないね。スマソ
513 名前:509 mailto:sage [04/10/22 08:43:48] 2つめ。これが本命の回答。 commandAction()内で重い処理をしていることがズバリ原因なので、その点を変更する。 システムからのイベント通知を受け取るcommandAction()/keyPressed()/keyReleased() といったメソッド内では、画面描画、通信、ストレージアクセスといった重い処理を してはいけない。 これらのメソッド内ではフラグ操作や、パラメータをとあるメソッドに送り付けるだけの 処理にとどめる。そしてメインの処理ループでそのフラグなり何なりを監視しておき、 反応があればメイン処理の中で、指定の重い処理を行うようにする。 >ネイティブ連携しない機能をcommandActionで呼ぶ場合は問題ないです。 このことはcommandAction()内で重い処理を行わないからこそと言える。
514 名前:490 mailto:sage [04/10/22 15:21:02] >>506 確かにP4のstubclasses.zipにはcom.j_phone.amuseパッケージが 含まれておりました。 com.j_phone.amuseAPIを使用してみたいと思います。 回答いただきありがとうございました。
515 名前:504 mailto:sage [04/10/22 18:39:44] StorageConnection使って、 Connector.open("jar://mc/test/test.jar/test.png", Connector.READ); とURLの部分のみ変更を加えてみたのですが NullPointerExceptionが出て動かないみたい URL変更前はfile:スキームで正しくファイルが読めていました。 ちなみに読み出そうとしてるtest.pngは空ソースだけのプロジェクトを作って、RESフォルダにtest.pngを入れた状態でjar化したものです。 どなたかSDのjarからリソースを読み込むのに成功した人居ませんでしょうか
516 名前:488=495=499 mailto:sage [04/10/22 22:30:18] >>514 ちなみに、C4のAPIで使えなくなってるやつとして、 ResourceOperator ResourceOperatorManagerのクラスがV601SHから削られてるんでそこだけ注意。 他はたぶん大丈夫と思う。 >>514 StorageConnectionの説明部分ではfileスキームしか記述がないから、一般にはできないんじゃないかな。 公開ドキュメント見ていってるから、実は非公式にできるんですよとかいう話ならこれ以上は何もわからんけど。 なので、イースの場合は自前でjarを解凍してるんじゃないかと推測。 もしくは、jarという拡張子だけど、実は中身はpngなどのリソースを単純にバイナリレベルでつなげただけのものとか。 >>512-513 どもです。 やはりcommandActionの中ではフラグあげるなり別スレッド立てるだけにしてすぐに処理を返し、 やりたいことは、立ち上げたスレッドなりフラグを参照する別スレッドなりでやれという方針しかないですね。
517 名前:デフォルトの名無しさん [04/10/22 23:05:33] Vアプリに関して質問します。 www.itmedia.co.jp/mobile/0203/15/n_jjava2_2.html ITmediaのこのページにある待ち受けアプリのサンプルを、 J2ME Wireless Toolkit 2.1 でパッケージを作り、 V-appli Emulator(P5型) Ver.1.0 で実行させると、 "ALERT: unable to load class com/jblend/net/j2me/http/HttpException" というメッセージが出て実行されません。 何がいけないのでしょうか? stubclasses.zip は V-appli Emulator と同じものを使ってBuildしています。 よろしくお願いします。
518 名前:デフォルトの名無しさん mailto:sage [04/10/23 02:57:47] >もしくは、jarという拡張子だけど、実は中身はpngなどのリソースを単純にバイナリレベルでつなげただけのものとか。 これでしょ。拡張子に制限あるからね。
519 名前:デフォルトの名無しさん mailto:sage [04/10/23 03:16:25] midpで、左のボタン(通話ボタンの上にあるやつ)と右のボタン(電源ボタンの上にあるやつ)の定数コードってどれですか? Canvas.GAME_A〜Canvas.GAME_Dのどれかだと思うんですけど
520 名前:デフォルトの名無しさん mailto:sage [04/10/23 03:17:59] >>517 そのページのソース確認してないんだけど、インナークラスはちゃんとjarに入れたの?あとpreverifyも
521 名前:519 mailto:sage [04/10/23 04:23:59] すいません。自己解決しました。 Commandクラスを使って、個別に登録するんですねf^^;
522 名前:517 mailto:sage [04/10/23 13:56:44] >>520 KToolbar 使ってるので、問題ないです。
523 名前:504 mailto:sage [04/10/23 14:44:05] >>516 >>518 イースで使われているjarを解凍しようとしてみるとエラーが出て無理でした。 どうやらバイナリレベルで繋げて、自前で解凍してるみたいですね urlの部分をjar://file://mcとしてみましたがこれも駄目のようです。 開発ガイド9にdeflate圧縮データの復元とゆうものがあったのですが全体を展開するみたいなので使えない…。 そこで、バイナリレベルで繋げて自前で解凍する方法を使ってみようと思うのですが どのように一つのバイナリにすればいいのやら… 解凍の部分はプログラムにxからyバイトまでが〜.pngとゆうファイルで…と記載されてるのでしょうか
524 名前:デフォルトの名無しさん mailto:sage [04/10/23 18:02:11] >>523 順に読み込むだけなら、 ファイル数 ファイルサイズ1 ファイル1 ファイルサイズ2 ファイル2 ファイルサイズ3 ファイル3 ・・・ でいいんじゃね?
525 名前:デフォルトの名無しさん mailto:sage [04/10/23 19:09:32] >どのように一つのバイナリにすればいいのやら… 「結合」とかで検索!
526 名前:デフォルトの名無しさん mailto:sage [04/10/23 19:28:39] てゆーか…… 画像は適宜結合してなるたけファイル数を減らして、 jarのファイルエントリを縮めるのは定石だと思ってたんだが 世間一般ではそういうことしないのか?orz
527 名前:504 mailto:sage [04/10/23 19:32:04] >>525 VBやら関係無いの多いので時間掛かりそうですが探してみます
528 名前:デフォルトの名無しさん mailto:sage [04/10/23 19:32:15] >>523 各ファイルを読み込んで、それをObjectOutputではき出して、プログラム内で連結して、ファイルに出力して、jそれをar拡張子にしちゃえば? そんな単純な話じゃないか・・・
529 名前:デフォルトの名無しさん mailto:sage [04/10/23 19:36:55] ここにある波紋アプレット hp.vector.co.jp/authors/VA012735/applet/dropcol.htm とてもきれいなんだけど、これを携帯に移植できるかな? 画像のピクセルを編集できないといけないみたいだけど。
530 名前:デフォルトの名無しさん mailto:sage [04/10/23 20:01:37] 携帯で、ピクセル扱うと遅いよー
531 名前:デフォルトの名無しさん [04/10/23 22:33:34] 質問です 文字列比較でequalsIgnoreCaseを使いたいのですがコンパイルしたときにエラーが出て困っています。 ソースはこんな感じになってます String[] str= new String[5]; str[0]= "abc"; if(str[0].equalsIgnoreCase("abC")){}
532 名前:デフォルトの名無しさん mailto:sage [04/10/24 01:06:35] >>529 秒間1フレームとかになるかもしれん。
533 名前:デフォルトの名無しさん mailto:sage [04/10/24 01:31:53] >>531 CLDC+MIDPにString#equalsIgnoreCaseはないけど。 toLowerCase/toUpperCaseはあるからそんなに苦労はしないと思うけど。
534 名前:デフォルトの名無しさん mailto:sage [04/10/24 01:45:46] >>526 日曜プログラマなのでそんな面倒なことはしません。 ユーザのパケ代に響いてもシラネ。 >>523 tarなんかの非圧縮でファイルを固める仕様が参考になるんじゃないかな。 で、こんな話がありますが、関係するのはJBlendの中の人だけってことでいいんですよね? ITmediaモバイル:J2MEに脆弱性。携帯電話のJavaアプリに影響 www.itmedia.co.jp/mobile/articles/0410/23/news013.html
535 名前:デフォルトの名無しさん mailto:sage [04/10/24 01:47:39] >>533 自力でequalsIgnoreCaseクラス作ってしまいました…。
536 名前:デフォルトの名無しさん mailto:sage [04/10/24 02:22:02] 実機だとfillRect()がズレるって聞いたんだがずれてる?
537 名前:デフォルトの名無しさん mailto:sage [04/10/24 03:08:12] >>534 Nokia DCT4はjblendなのか?? secunia.com/advisories/12945/ アプリ起動直前にバイトコード検証が行われるんだけど、そこに脆弱性があって ネイティブのコードが実行される恐れがあるとか
538 名前:デフォルトの名無しさん mailto:sage [04/10/24 04:30:23] >>536 そんなこと言ってるのは大方drawRect()と比べて幅と高さが1ドットずれるー とか、リファレンス読み違えて勘違いしてる人なんじゃない?
539 名前:デフォルトの名無しさん mailto:sage [04/10/24 11:03:26] その脆弱性を突けば、もっと高度なJavaアプリが・・・
540 名前:デフォルトの名無しさん mailto:sage [04/10/24 12:46:06] >>539 可能かも? だが、棒打のアプリは公開する時に解析されるから公開は無理
541 名前:デフォルトの名無しさん mailto:sage [04/10/24 13:14:36] >Nokia DCT4はjblendなのか?? JBlendもSunのリファレンス元に作成されているから同じ脆弱性が発生している。 Nokiaで同じ問題が出ている理由は、元が同じだから。
542 名前:デフォルトの名無しさん mailto:sage [04/10/24 13:21:34] 複数のtxetをres内から配列にして読み込むには、どのように すれば良いのですか? 調べても1つしか読み込む方法が見つからないので、分かる方 ご教授お願いします。
543 名前:デフォルトの名無しさん mailto:sage [04/10/24 21:05:55] >>542 自前でなんとかするしかないんじゃないかな? \n区切りでString配列を返す関数とか作って。
544 名前:デフォルトの名無しさん mailto:sage [04/10/24 21:59:30] > JBlendもSunのリファレンス元に作成されているから同じ脆弱性が発生している。 なるほど。つーかずいぶん詳しいな > Nokiaで同じ問題が出ている理由は、元が同じだから。 って事は、JBlendでは既に知られている脆弱性だったって事か?
545 名前:デフォルトの名無しさん [04/10/24 22:49:17] iアプリにあるホワイトアウト処理みたいなのを使いたいんだけど、 JSCLには無いようなので他の方法で同じ処理をしようと思うのですがどのような処理をすればいいのでしょうか…
546 名前:デフォルトの名無しさん mailto:sage [04/10/25 00:02:31] iアプリの場合、2Dの半透明描画は機種依存 機種によってはホワイトアウトにならないヤカン
547 名前:デフォルトの名無しさん mailto:sage [04/10/25 00:08:42] >>545 com.j_phone.util.ImageUtil#createMaskedImage使えば、 マスクパターンの細かさを段階的に変えていって疑似半透過できるかも。 まぁP6以降だが。 GraphicsUtil#setPixelでピクセル単位でいじればもっと柔軟に対応できるが、 たぶん >530
548 名前:デフォルトの名無しさん mailto:sage [04/10/25 00:23:32] P6以降ですか…。 範囲を指定して色を足していくような処理も重いですか? 例えるとx1,y1からx50,y50までの範囲の色にピクセルごとにr,b,g+100足して表示するとか…。 そんな処理がしたいのですが…
549 名前:デフォルトの名無しさん mailto:sage [04/10/25 01:35:25] >>546 505以降なら、MascotCapsuleを使えば全機種いける。
550 名前:523 mailto:sage [04/10/25 02:19:06] deflate圧縮データの復元ってのがあるみたいなんですけどこれって圧縮データ全てを展開するってことですか? そもそもdeflate圧縮ってzipの圧縮方法であってますよね? これ使って指定したファイルだけ取り出す方法あれば嬉しいのだけど。
551 名前:デフォルトの名無しさん mailto:sage [04/10/25 03:45:23] >>542 Vectorクラスに順次放り込んで最後にString配列へcopyInto()して終わり
552 名前:デフォルトの名無しさん mailto:sage [04/10/25 05:22:46] >範囲を指定して色を足していくような処理も重いですか? 範囲が凄く小さいなら大丈夫 >>549 プリミティブ描画で簡単に出来ますな 加算、減算、平均?の3通りしかないけど、ホワイトアウト程度の単純な処理なら問題なし >>530 機種によっては、drawImageには対応してるけどfillRectには非対応だったり 使い物になりませんw
553 名前:デフォルトの名無しさん mailto:sage [04/10/25 10:00:10] Vアプリで質問です。 Randomクラスを使う羽目になって、ふと疑問に思ったんですが java.util.*; ってimportできるんですね。しかもj2seで使えるAPIとはかなり違うみたいですね。 例えば、Math.Random()メソッドは使えないだの、RamdomクラスのnextFloat()メソッドは使えないだの、他いろいろ。 ここら辺についてはどのAPIリファレンスを参照すればいいんですか? JSCLとCLDCには載ってなかったです。
554 名前:504 [04/10/25 17:45:15] 毎回プログラムにファイルサイズやらを書き換えていくのが面倒なので >>528 さんが言っているObjectOutput使って複数のファイルを一まとめにしてしまおうと思ったのですが これは 1.纏めるファイル名をlist()か何かで配列に収める 2.手動で適当にファイル(txtとか)を作成して拡張子をjarしておく(binarry.jar 3.一つ目のファイルをbyte配列に読み込む 4.ObjectOutputでbyte配列を3のファイルに書き出す てな感じで初めに作った配列分、3〜4を繰り返せばいいと思うのですが ソースはこんな感じでいいのかな。。。 ObjectOutputてのが意味不明なので指摘お願いします…。 String[] files=new String[ファイル数]//ファイル数 for(i=0; i<files.length; i++){ ... ...//目的のファイルを読み込む部分 ... byte[] b;//書き込むデータのbyte配列 conn = (StorageConnection) Connector.open("file://mc/binarry.jar"); os = sc.openOutputStream(); ObjectOutput out = new ObjectOutputStream(new FileOutStream(os));//この辺りから意味不明 out.writeObject(data, b); out.frush(); out.close(); os.close(); conn.close(); }
555 名前:504 mailto:sage [04/10/25 17:52:45] >>554 の続きです。連投すみません 読み込む時は conn = (StorageConnection) Connector.open("file://mc/binarry.jar"); os = sc.openInputStream(); ObjectInputStream in=new ObjectInputStream(new FileInputStream(si)); byte[] b=("filename")in.readObject();//目的のファイルをbinarry.jarから読み込む in.close(); os.close(); conn.close(); あとはgazou = Image.createImage(b, 0, b.length);で適当に使う。 読み込む時に554で作成したファイル中の目的のファイルを指定出来ると思ってるんだけど妄想?それとも出来ます? エミュレータでファイルを一まとめにしたの作って、実機でファイルを取り出して使うような使い方がしたいんだけども…不可能かな
556 名前:デフォルトの名無しさん mailto:sage [04/10/25 18:56:53] >>553 JavaのサブセットはJ2ME。主にCLDC、MIDP1.0のリファレンスを参照のこと。 携帯アプリ向けJavaは浮動小数をサポートしてないとか 例えばStringクラスなどでも使えるメソッドが限られているとか 基本的なところが理解できるはず。
557 名前:デフォルトの名無しさん mailto:sage [04/10/25 19:58:10] >>556 ありがとうございます!CLDCに載ってました! 私が読んでいたのはMIDPの方でした・・・。 なるほど、浮動小数をサポートしていないということですか
558 名前:デフォルトの名無しさん [04/10/25 22:13:09] canvasにしているクラス外からrepaint()を使いたいのだがコンパイラがstaticじゃないと吐く public static int paint(Graphics g)にしたら今度は このstaticメソッドはCanvasからのインスタンス・メソッドを〜 とか出る ようするにcanvasクラス外からrepaint()使うのは無理ってこと?
559 名前:デフォルトの名無しさん mailto:sage [04/10/25 22:26:11] >558 Canvasのサブクラスにrepaint()呼ぶだけのpublicメソッド定義すればいいじゃん。