[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 07/05 19:48 / Filesize : 320 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

CLDC+MIDP+携帯電話用Javaスレッド part 3



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あたりにリンク集

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でしたか。

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足して表示するとか…。
そんな処理がしたいのですが…






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<320KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef