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

iモード携帯電話用Java(iアプリ) Part10

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/11/10(木) 15:11:53
NTT DoCoMoのiモード携帯電話用Javaに関する話題を扱うスレッドです。

※DoCoMo以外は下記スレへ。

CLDC+MIDP+携帯電話用Javaスレッド part 4
http://pc5.2ch.net/test/read.cgi/tech/1108781476/

■ iアプリ特有ではなくJava一般に関する質問はこちらへ
【初心者】Java質問・相談スレッド68【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1119115837/

■ iモード携帯電話用Java(iアプリ)まとめサイト
http://ton.my-sv.net/

■関連スレ
【日本携帯】Mascot Capsule/Micro3D【標準】
http://pc8.2ch.net/test/read.cgi/tech/1117773530/

過去スレ
Part 1 http://piza2.2ch.net/tech/kako/975/975428633.html
Part 2 http://pc3.2ch.net/tech/kako/1000/10007/1000723476.html
Part 3 http://pc2.2ch.net/test/read.cgi/tech/1040898596/
Part 4 http://pc5.2ch.net/test/read.cgi/tech/1067139509/
Part 5 http://pc5.2ch.net/test/read.cgi/tech/1084246226/
Part 6 http://pc5.2ch.net/test/read.cgi/tech/1091286071/
Part 7 http://pc5.2ch.net/test/read.cgi/tech/1102844217/
Part 8 http://pc8.2ch.net/test/read.cgi/tech/1110946222/
Part 9 http://pc8.2ch.net/test/read.cgi/tech/1120411353/
07927912006/02/13(月) 23:55:00
確認完了。テキストでよろし。
0793デフォルトの名無しさん2006/02/14(火) 00:25:49
public class GameCanvas extends Canvas{
    〜
    public void start(){
        〜
        while(true){
            〜
            keyCheck();
            〜
        }
    }
    private void keyCheck(){
        int key=getKeypadState();
        System.out.println(key);
        if(((1<<Display.KEY_SOFT2)&key)!=0) IApplicatoin.getCurrentApp().terminate();
    }
    〜
}

このgetKeypadState()が返す値がいつも0のようで、
エミュレータで決定キーを押し続けていてもコンソールに0しか出ません。
原因がわからないので、わかるかた教えてください。
0794デフォルトの名無しさん2006/02/14(火) 00:30:23
>>792
ありがとうございます。
うまく出来ました。
0795デフォルトの名無しさん2006/02/14(火) 01:14:40
>>793
スリープ入れてみれ。
ループが早すぎてログ出力が追いついてないだけだろ
0796デフォルトの名無しさん2006/02/14(火) 01:36:28
public class GameCanvas extends Canvas{
    〜
    public void start(){
        〜
        while(true){
            long sleepTime=0L
            〜
            keyCheck();
            while(System.currentTimeMillis()<sleepTime+50L);
            sleepTime=System.currentTimeMillis();


変わらんかったとです
0797デフォルトの名無しさん2006/02/14(火) 02:23:44
違う
Thread.sleep
0798デフォルトの名無しさん2006/02/14(火) 03:06:12
>>793
ソフトキー2のキー押下チェックしてるのに
決定キー押したって反応あるはずないだろ
07997982006/02/14(火) 03:31:41
ああ、質問の意味を取り違えた
0800デフォルトの名無しさん2006/02/14(火) 10:04:47
>>793
>int key=getKeypadState();
>System.out.println(key);

printlnにはStringを渡せよ。
0801デフォルトの名無しさん2006/02/14(火) 11:12:19
>>793
こっちでkeyCheck()を毎フレーム呼び出すのを作ってみたがなんら問題ない。
正常に動く。だとすれば原因として思いつくのは
keyCheck()が実は呼び出されていない。返されてる0が別の場所のかもしれない。
System.out.println("KEY="+key);とかで名前付けとけばわかりやすい。

keyCheck()部分を疑うんじゃなくてそれ以外の全体を疑うべし。
提示されてるソースからはそれくらいしか言えないよ。
0802デフォルトの名無しさん2006/02/14(火) 11:45:18
>>797のいうようにスリープを入れないと、キー状態を取得するスレッドに処理が切り替わらない。
ループの頭に1msスリープするようにすべし。
0803デフォルトの名無しさん2006/02/14(火) 13:38:46
>>802
そんなことはない。

そもそも、1msのスリープを入れたら、ほとんどの機種で10msスリープすることに…
0804デフォルトの名無しさん2006/02/14(火) 13:52:42
いや、毎フレームちょっとでもいいからスリープしないと
正しく動かない端末が昔あったような気がする。
0805sage2006/02/14(火) 14:34:00
質問です。
パッケージ化されたMain Sub Scoreというソースで
Sub画面で使用しているInt関数(変数名nokori)をTextBoxで表示させてて
その変数をScore画面で表示させたいのですが、
そのときのプログラムがよくわからないんですが
getTextで持ってくることはできるのでしょうか??
スクラッチパッドを使用して持ってきたほうがいいのでしょうか。
0806デフォルトの名無しさん2006/02/14(火) 14:38:51
>>805
ゲッターセッター。
はい次
0807デフォルトの名無しさん2006/02/14(火) 14:40:19
getで取得setで表示だった希ガス
08088052006/02/14(火) 14:52:04
書き方がいまいちよく分からないのですが
Scoreで表示させるときのPGは
this.getText().setString(nokori);
って事でしょうか?
0809デフォルトの名無しさん2006/02/14(火) 22:09:43
ハロー(注意報)。

N900iで、標準MIDIファイルではチャンネル1から8までしか使えないとか小耳にしたんですが、
これじゃドラム鳴らせないのと違います? そこんとこどうなってん?

次に、ドコモ携帯の音源はGM規格だと仮定していいんでしょうか。
いくらぐぐっても音源の仕様が出てきません。

それから、ぶっちゃけ900i以降でもおとなしくMFi使ったほうがいいの?

あと、BGMのループは相変わらずMediaListenerで待つしかないんでしょーか。
MFiなりSMFなりに何かループコマンドみたいなの仕込めないの?

以上、暇ならよろしくです。
0810デフォルトの名無しさん2006/02/14(火) 22:31:54
プログラム自体にエラーはなく、ビルドも無事完了したのですが、エミュレーターで実行できません。DOJA4.1を使っています。
誰かわかる方いたら教えてもらえないでしょうか
08117932006/02/14(火) 22:33:39
>>801
仰るとおりSystem.out.println("KEY="+key);としてみても
やっぱりKEY=0の繰り返しですし、他に原因が見つからないので
そこだけ作り直すことにして見ます。
0812デフォルトの名無しさん2006/02/14(火) 22:38:26
>>810
俺らはエスパーか?
0813デフォルトの名無しさん2006/02/14(火) 22:47:31
>>810
どっかで見た
0814デフォルトの名無しさん2006/02/14(火) 23:30:34
>810
マルチ乙。
0815デフォルトの名無しさん2006/02/14(火) 23:34:05
>>810
俺の勘ではテストした端末が壊れてるから
Docomoショップ持っていって見てもらえ。
0816デフォルトの名無しさん2006/02/14(火) 23:41:26
マルチっつーよりコピペだろ
0817デフォルトの名無しさん2006/02/14(火) 23:48:03
>>811
Thread.sleep 入れてもダメだったのね?
ソフトキー2を押しても terminate しないのね?
エミュレータの画面上ではボタンが押された反応(ボタンが白表示)あるのね?
0818デフォルトの名無しさん2006/02/14(火) 23:58:31
>>809
Nはドラムチャンネルを10chにすると鳴らない
MIDIよりMLDを使ったほうがデータサイズ小さいから良い
ループはDoJa3.5でもオプションだったかな?
まあ普通はMLDの中にループポイントを埋め込む
08198182006/02/15(水) 00:00:16
言い忘れた
NはAudioPresenterを複数チャンネルで使ったとき
ドラムが鳴らなくなるということね
0820デフォルトの名無しさん2006/02/15(水) 00:17:59
Thread.sleepで1msだけ寝るので解決するのであれば、
Thread.yieldの方がいいんでない?
08217932006/02/15(水) 00:30:06
>>817
駄目でした
明らかに白くなって押せている状態です
0822デフォルトの名無しさん2006/02/15(水) 00:51:24
>>793
・ビルドしないで実行している
・そもそも実行しているものが違う
この辺疑えw
0823デフォルトの名無しさん2006/02/15(水) 11:21:27
>>811
呼び出されてるのに結果がおかしいのか・・・。
作り直すってのはどこの事指してるのか判らないが
全体の流れを作り直すのが先決かもな。スリープ関連の書き込み多いし、
俺が実験したのもちゃんとループをスリープで制御してある奴に組み込んで実験したし。

提示されたソースの省略されてる部分がどうなってるのか次第だよなぁ後は・・。
0824デフォルトの名無しさん2006/02/15(水) 11:33:28
>>809
悪いことは言わない、おとなしくMFi使っとけ。

ループに関しては、データ側のループ指定を無視する腐れ機種があるので、
MediaListenerで待つしかありません。

>N900iで、標準MIDIファイルではチャンネル1から8までしか使えない

MFiにコンバートするときも同じ制限があるので気をつけろ。
ドラムは、トラック1〜8のどこかに割り付けるんだ。
0825デフォルトの名無しさん2006/02/15(水) 11:36:35
>>793
Display.setCurrent()でカレントに設定してないとか、
そもそもGameCanvasのインスタンスを生成してないとか、


そんなオチじゃないだろうな…?
0826デフォルトの名無しさん2006/02/15(水) 11:50:20
>>824
腐れ機種を教えてください
0827デフォルトの名無しさん2006/02/15(水) 12:23:03
>>826
N900系
0828デフォルトの名無しさん2006/02/15(水) 12:26:28
一応公式にも資料があるから一通り見てみれ
ttp://www.nttdocomo.co.jp/p_s/imode/java/caution.html
0829デフォルトの名無しさん2006/02/15(水) 12:43:41
>>827
ありがとう
0830デフォルトの名無しさん2006/02/15(水) 14:29:22
Dojaでコンパイルした時、エラー位置「^」がエラー箇所を
示してしないのです。
ソースの方が結構ズレて表示されてるような気がします。

最初の頃は平気だったのですが、
フォントの設定か何かのでしょうか?

DoJaをインストールしなおしても駄目でした。
0831デフォルトの名無しさん2006/02/15(水) 14:36:11
>>830
それ仕様
0832デフォルトの名無しさん2006/02/15(水) 15:52:27
>「SMF 制作ガイドライン for iアプリ」(N505i/N505iS/N900i 版)

(゚Д゚≡゚Д゚) ドコ? コレドコドコ?
0833デフォルトの名無しさん2006/02/15(水) 15:56:32
>>830
JVM、SDKが1.4までならきれいに並ぶ
08348302006/02/15(水) 16:32:18
ありがとうございます。

そうでしたか…
どうしようもないのですね…
0835デフォルトの名無しさん2006/02/15(水) 23:30:00
>>793
プロジェクトを開きなおしてみたら?
0836デフォルトの名無しさん2006/02/16(木) 01:57:03
毎秒30フレームでシンクをしたくて、こんなんしてるんだけど↓

if ( ( t = tgtTime - System.currentTimeMillis() ) > 0 )
Thread.sleep( t );

なぜか、秒20コマくらいで動く。困ってます。
sleep() の精度がおかしいのかな??


while ( tgtTime > System.currentTimeMillis() )
;

とするとキッチリ動く。

でも長時間 sleep() を一切呼ばないため、端末への負荷が気になってます。
これでも問題ないでしょうか。
0837デフォルトの名無しさん2006/02/16(木) 02:13:17
描画性能を特に重視した端末(大体900以降の一部の端末)でないなら
30fpsなんて速さは出せない。505とかだとせいぜい15〜20fps。
0838デフォルトの名無しさん2006/02/16(木) 02:16:29
時間の分解能ってのがあって、sleepも1ms単位でかけられるわけじゃない。
>>836とは関係ないけどちょうど>>803で言われてる。
0839デフォルトの名無しさん2006/02/16(木) 09:49:05
まったくプログラムとかした事ないんですけど
ぐぐってたらノベリオンというフリーソフト見つけました
誰か使ってる人いますか?
0840デフォルトの名無しさん2006/02/16(木) 10:39:42
>>836
>でも長時間 sleep() を一切呼ばないため、端末への負荷が気になってます。
>これでも問題ないでしょうか。

問題ない。
電池の持ちなど、知るか!
0841デフォルトの名無しさん2006/02/16(木) 10:52:41
>>839
新手の宣伝乙。
0842デフォルトの名無しさん2006/02/16(木) 11:05:45
>>836
>でも長時間 sleep() を一切呼ばないため、端末への負荷が気になってます。
>これでも問題ないでしょうか。

>>840の答えとまったく逆だが問題あるよ。
一部の機種に置いてその手の超高速回転部分でif文などの条件判断を実行すると
CPUへの負荷かメモリへの負荷かわからないが、内部でgc()呼ばれた時に
ものすごく遅くなる事があったり、単純にキーレスポンスが遅くなったりもした。

俺は最初下の方法でアプリ作っててアプリが重くなってくると症状が酷くなってきて
上の方法に切り替えたらかなり改善された経験がある。当然エミュ上では問題なかった。
実機で遅くなる。作るアプリしだいだとは思うけど参考までに。
08438392006/02/16(木) 11:17:15
>>841
違いますってwこれを使ってみようとヘルプ見たんですけど
作ったアプリをダウンロード後、初回起動時にネットワークを有効にする事を
忘れないでくださいという怪しい言葉が載っていたので・・・
勝手にどっかにアクセスするってことですよねコレ

やっぱ自分で作ったほうがいいですか?
0844デフォルトの名無しさん2006/02/16(木) 11:24:53
>>843
アプリはダウンロードしたサイト以外アクセスできない。

それは、作成したデータをネット経由でダウンロードするから
設定をONにしてくれと言ってるだけ。

本体アプリは変更が無く、
作成したデータをDLして動く形式だと思われる。

ツクールアプリとかがその形式だったりする。
08458392006/02/16(木) 11:36:44
>>844
詳しくありがとうございます。

作る物の中に全部入れておけば(データをダウンロードする必要がないように)
特に問題ないってことですね。

頑張って作ってみたいと思います。
スレ汚しみたいな感じになってしまいすいませんでした。

0846デフォルトの名無しさん2006/02/16(木) 11:53:00
DoJa-4.Xを使用して、DoJa-3.X系のアプリは作成できますか?
0847デフォルトの名無しさん2006/02/16(木) 12:33:51
>>842
SH900iで、processEvent()内で何かする作りだとそうなるかもね。
08488362006/02/16(木) 12:49:42
>>838
やっぱり sleep() は精度いまいちなんですね。

最近のゲームアプリは15フレームくらいは普通に出したい感じ。
それだとイロイロ困りますね。

>>842
丁寧なレスありがとう。

じつは最近のSH系で長時間動かしていると不意にフリーズして困ってました。
それが原因だといいな。
早速試してみます。
0849デフォルトの名無しさん2006/02/16(木) 14:22:39
精度の問題もあるけどさ
if ( ( tgtTime - System.currentTimeMillis() ) > 0 )
Thread.sleep(1);

のがよくないかなーと。
それとスキップした分メインフレーム複数回すようにすりゃ問題なかろ
0850デフォルトの名無しさん2006/02/17(金) 01:10:48
Sleepなんぞいらん。
空文をwhileで回しまくれ。昔の端末にはSleepするとちゃんとCPUを休ませる端末があったが、最近のはまったく影響がない。
0851デフォルトの名無しさん2006/02/17(金) 04:38:45
携帯ゆたんぽを作りたい方はどうぞ。
0852デフォルトの名無しさん2006/02/17(金) 10:19:52
>>851
ホッカイロにしとけ。
ゆたんぽは若いのはしらないのでは?
0853デフォルトの名無しさん2006/02/17(金) 10:45:50
誰が一番携帯の温度を上げられるか競争するかw
0854デフォルトの名無しさん2006/02/17(金) 11:48:31
最終的にどんなアプリを作ろうとしてるかで変わってくるが
個人的には空回りは推奨しないよ。
時間を均一にする事が絶対条件のアプリじゃなきゃだけどね。
processEventやMediaListenerなどいつ割り込みが入るか
判らない物を実装してる場合は極端に性能が落ちる機種がある。
0855デフォルトの名無しさん2006/02/17(金) 12:23:33
>>854
>時間を均一にする事が絶対条件のアプリじゃなきゃだけどね。

ここが難しいとこなんだよなー。
アクションゲームで、毎秒33フレームとか50フレームとかで回したい場合、
現状空回しせざるを得ないし、sleepを入れると毎秒10フレームとかに
ならざるを得ない。

とっととタイマ分解能が1msで統一されて欲しいもんだ。
0856デフォルトの名無しさん2006/02/17(金) 13:44:02
タイマの分解能は
while ( tgtTime > System.currentTimeMillis() )
 ;
できちんと動くなら 1ms でよろしかろう

sleep() すると裏で動いているメール受信とかを まってましたとばかり見に行く
そのせいで最低 100ms くらいはかかるのでは
0857デフォルトの名無しさん2006/02/17(金) 15:42:52
いくらなんでも100msもかかんないよ
0858デフォルトの名無しさん2006/02/17(金) 15:49:24
  ∧_∧
⊂(#・ω・)
 /   ノ∪
 し―-J |l| |
         人ペシッ!!
       白 ←N504
0859デフォルトの名無しさん2006/02/17(金) 18:49:23
いまだにタイマ解像度10msの端末だらけなのはいかんな。
ゲーム屋は1ms単位で勝負してるんだから、そのあたり理解していただきたいものだ。

タイマ解像度さえ高ければ、wait()入りのメインループにタイマイベントで定期的にnotify()を送って
タイマ割り込み代わりにする技があるのだが。Javaアプレット時代に使ってたんだけどな。
速度一定だし、「処理落ち」もできるし、CPU明け渡すからバッテリーにも優しいぞ。
0860デフォルトの名無しさん2006/02/17(金) 20:33:58
>>859
3GHzオーバーのPC(Win)でもSleepの精度はせいぜい10msだから、
携帯環境が改善される見込みは薄いね
0861デフォルトの名無しさん2006/02/18(土) 00:52:30
Win と比較するのが間違いだと思うが
最近汎用OSに切り替え進んでるから
同じ道はたどるだろうね。
0862デフォルトの名無しさん2006/02/18(土) 01:25:50
ボタンを押すと画像が変わるアプリを作りたいんですけど早速つまづきました
0863デフォルトの名無しさん2006/02/18(土) 01:30:15
そうか。がんがれ。
0864デフォルトの名無しさん2006/02/18(土) 01:32:49
がんばります
0865デフォルトの名無しさん2006/02/18(土) 09:10:24
>>862
プログラム作るの初めてなら無茶。君の次の選択肢は
�@・画像を扱わないプログラムが組めるようになってからもう一度チャレンジ
�A・やりたいことの類似のサンプルをネットで探して、見つかったら真似しながら覚える
0866デフォルトの名無しさん2006/02/18(土) 09:37:21
(3) http://www.saturn.dti.ne.jp/~npaka/apptsuku/index.html
 この辺を買ってみる。
0867デフォルトの名無しさん2006/02/18(土) 10:29:32
どうしたら上手くいくのか気になってあまり寝れなかった

>>865,866
ありがとう
本ってやっぱ手元にあったほうがいいんですかね
ネットで調べながらやってるので

諦めないでサンプル探しながら学んでいきます
0868デフォルトの名無しさん2006/02/18(土) 10:30:45
�Cたまには外に出る
0869デフォルトの名無しさん2006/02/18(土) 12:02:49
たまにしか外に出ないような人間ならもう達人になってるよ
0870デフォルトの名無しさん2006/02/18(土) 20:27:28
iアプリはダウンロードサイト以外にネットワーク接続できないってことみたい
ですが、2chブラウザなんかの場合はどういう仕組みなんですか?
0871デフォルトの名無しさん2006/02/18(土) 21:55:35
そのDLサイトで中継する。だからcgiとかが必須。
0872デフォルトの名無しさん2006/02/19(日) 00:12:26
ProGuard 3.3.2 でサイズを縮めてるんだが
こんなコードを書くと、キー待ちせずに終了するのに気が付いた(ProG 1.7 では無問題)

for( isKeyPressed = false; !isKeyPressed; )
 ;

(※ハンドラでキー押し時に isKeyPressed を立てる)


で、 ↓こうすると直った
for( isKeyPressed = false; !isKeyPressed; Thread.sleep( 100 ) )
 ;

ひさしぶりにサイト見に言ったら、修正項目がたくさん書かれていて
ソレ読まなかった俺の不注意

まあ みんなも注意しながら使うのが吉でしょう と そういいたかった


ところで java バイトコードの仕様を調べたいんだけど
いいサイト知りませんか
0873デフォルトの名無しさん2006/02/19(日) 00:49:18
>>872
つhttp://java.sun.com/docs/books/vmspec/
08748722006/02/19(日) 02:01:03
>>873
ありがとう。感謝です。
08758622006/02/19(日) 09:37:41
やっと出来た・・・これだけなのに偉い大変だった
これでタイトル画面から移れる



まだまだ先は長い

0876デフォルトの名無しさん2006/02/19(日) 19:29:29
>>871
どうもありがとう!
CGIのこと調べていろいろ試してみたらアプリにしなくても携帯のブラウザで
十分になりました。
せっかくクラス作ったのに意味ねーって感じですが、ともあれ感謝です。
0877デフォルトの名無しさん2006/02/20(月) 03:58:30
com.nttdocomo.ui.Panel.add(Component c)
でaddすることのできるコンポーネントは自作することはできるのでしょうか?
extends Component implements Interactable
すれば、できるのかな?とか考えたのですが、
public void setEnabled(boolean arg0)
public void requestFocus()
で、何を行えばいいかわからず頓挫してしまいました。

Canvasを使えばいいだけなのですが、ただわからないのも悔しいので、
もしよければご教授ください。
0878デフォルトの名無しさん2006/02/20(月) 07:52:42
>>877 できない。
08798772006/02/20(月) 12:31:21
やっぱりですか・・・
878さんありがとうございました。
0880デフォルトの名無しさん2006/02/20(月) 20:30:32
imgに一度getImage()してある状態で、

try {
  MediaImage m;
  m = MediaManager.getImage(buff);
  m.use();
  img.dispose();
  img = m.getImage();
} catch (Exception e) {
}

を何回も繰り返すとリソースが足りなくなって「com.nttdocomo.ui.UIException」のエラーが出てしまうのですが対処法はありますか?
0881デフォルトの名無しさん2006/02/20(月) 20:38:07
>>880
つ gc()。

それとメモリ管理についていちから勉強しなおせ
08828802006/02/20(月) 20:40:29
ありがとう。
勉強します。
0883デフォルトの名無しさん2006/02/21(火) 00:16:07
これって効果あるのかな?
マジレス求ム。
http://page6.auctions.yahoo.co.jp/jp/auction/f42760915
0884デフォルトの名無しさん2006/02/21(火) 00:42:30
iアプリでメーラー作ろうとしているのですが、携帯側からxlsファイルやtxtファイル等をメールに添付して送信することは可能ですか?
0885デフォルトの名無しさん2006/02/21(火) 03:31:50
中間鯖をかませれば可能
直接は無理
0886デフォルトの名無しさん2006/02/21(火) 12:18:19
>>880
MediaImage.dispose()
0887デフォルトの名無しさん2006/02/21(火) 14:43:24
disposeってメモリ開放してくれてたの?
0888デフォルトの名無しさん2006/02/21(火) 14:54:02
disposeしないとヒープ解放しないんじゃなかったっけ?
0889デフォルトの名無しさん2006/02/21(火) 15:16:31
少なくとも880の書き方なら参照切れてるから
disposeしなくてもgcで開放される。
0890デフォルトの名無しさん2006/02/21(火) 15:29:42
>>889
MediaResourceのリファレンス読んだ方がいいよ
0891デフォルトの名無しさん2006/02/21(火) 15:34:47
(゚∀゚)つ[破棄されていないメディアリソースが GC によって回収されようとしている場合の動作は機種依存です。]

JavaじゃなくてJawaとかJavoとか別の名前付けようぜ('A`)
0892デフォルトの名無しさん2006/02/21(火) 16:20:31
皆作るときってここ見てpanel,canvasサイズ一杯に使ってる?
ttp://www.nttdocomo.co.jp/p_s/imode/spec/info.html

Doja4.0〜機種依存ないみたいだから240x240で画像作ったほうがいいのかな
■ このスレッドは過去ログ倉庫に格納されています