iモード携帯電話用Java(iアプリ) Part 5
1 :
デフォルトの名無しさん :
04/05/11 12:30
>>1 乙です。
ところでP900iでパレットチェンジ(Palette#setEntry)が
やたら遅いんですけど。
(setEntry使う/使わないで2倍ぐらい速度差がある)
手元にはSHとPしかないんですがSHは問題ない速度です。
他にパレットチェンジが遅い機種ってありますか?
色変えはバイナリでGIFパレット部を書き換えて読み込ませるのがよい。
>>6 4は表示させたままパカパカ色変えする
みたいな使い方じゃないのか?
それは厳しいですな。 つーか携帯アプリ、画面モード256色にできれば色々おもしろのにねー。
>>4 動的にパレットを変えるような使い方は想定外臭い
なんだそりゃって感じだが
>>5-9 ありがとうございます。
ドラクエは海動かしたりタイトルとか町移動とか
結構使ってるんで大丈夫なのかなと思ったのですが
フレームレートも低いし1パレット変更してるだけっぽいので
あのぐらいがギリギリなんですかね。。
自分はFFの補助魔法掛かった時みたいなこととか
背景動かしたりとか同時にいろいろやりたかったので残念です。
海動かしてるのは、パレット変更じゃないだろ(;´Д`) おそらくタイトルも、ただたんにアニメパターンをImageとして持ってるだけ。
12 :
デフォルトの名無しさん :04/05/13 13:18
ビルドする時に public void keyPressed(Panel p,int key) の内容?{ -- listing -- $170: 41:iload 2 ・ ・ ・ 164:invokevirtual void setText(java.lang.String) $189: 39:return } が表示されて最後に java.lang.ArrayIndexOutOfBoundsException って出てビルドに失敗しました って出るんですけど keyPressedで良くある失敗って何かありますか? 何処が悪いかよく分からないんで・・・ keyPressedの処理内容が多すぎるのかな・・・とかちょっと思うんですけど制限ってありますか?
>>12 >java.lang.ArrayIndexOutOfBoundsException
配列を範囲外のインデックスでアクセスしてるって意味。
keyPressed()ではなく配列のサイズやインデックスを疑ってみて。
>>13 ありがとうございます。
配列ってのはよく分かってないんですが、使って無いと思うんですが・・・
一番最初にnullpoもでてました。ひょっとしてめっちゃあほな事してるんですかねorz
とはいえ、やはり全文見ない事にははっきりわかんないですよね。
もっかい自分で見直します。
自分で書くってのは凄い難しいですね(;^_^A
間違いが分かればなるほど〜って思うんですけど、見つかるまでが辛いっす。
図書館で4,5冊借りてきたんですけどあまり良い本ないですね。
記述方法とか、制限が詳しく書かれてないから発展させにくくて困ります。orz
ちょっといじるとすぐにERRORでるもん(T.T)
まあずぶの素人だからそう思うのかもしれませんけど・・・
皆様お薦めの本とかってありますか?
>>12 これって、このエラーが出てコンパイルできなかったってことだよね。
これはバイトコードのダンプのように見えるのだけど、
なんか、コンパイラが想定外の入力を受け取ったがために混乱して落ちてるような気がする
ビルド環境が正しく構築されてるか確認してみた方がいいよ。
コードが間違ってるのなら、すくなくとも意味が理解できるコンパイルエラーが出力されるはずだから。
アプリからメールメニューはLAUNCH_MAILMENUで表示できますが 新規送信メール画面を表示することってできませんか?
変数はどれぐらい宣言するとメモリ不足になるんでしょうか? ビルドして実行するとERR出るんでメモリ不足の様な気がするので・・・
ERRだけじゃわからん。 何エラーなのか。 メモリーが足りない場合のエラーはOutOfMemoryだ
iアプリ関連の資料はほぼ揃えました。 自分のやりたいことを実現するにはこのAPI(ドコモ提供)だな、 と大体のイメージができて、よしこれで作れるぞと思ったら for文やif文、int型だのstring型だののルールやら 配列、ポインタなどなど、JAVAの根本的な部分をわかってなかった。 一般のJAVAの資料だと、どこまでがiアプリで使えてここからはiアプリで使えない とは明記されてないと思うのですが、 ドコモAPI以外の、iアプリでも使えるJAVAの基本資料だけを ウマくピックアップしてくるコツがあれば教えてください
Java1.3準拠だ。
503用アプリ作ってるんだけど 浮動小数点演算できないのにはビビッタ
>19 >for文やif文、int型だのstring型だののルールやら >配列、ポインタなどなど、JAVAの根本的な部分をわかってなかった。 このあたりはそれほど食い違っているわけでもないから、 普通の Java のサイトで勉強したほうがわかりやすいよ。
Java┳J2SE … PCのJava ┃ ----┃---(越えられない壁)--------------- ┃ ┗J2ME━CLDC━DoJa … iアプリのJava こんな感じ。ドコモのドキュメントと一緒に、J2MEとCLDC押さえとくよろし。
レスをくださった皆様、ありがとうございます。 早速 Java1.3、J2ME、CLDC1.0、KVMをキーワードに サイトや書店で資料を集めてきます。 for文if文あたりの文法なら誰かの書いたソースを読めば何とかなるか とも思ったのですが、やっぱり一応ちゃんとした資料を読んでおかないと 何かと不便ですもんね。ありがとうございました。
今、RPGの作成に挑戦しているんですが、巨大なマップを表示するいい方法が思いつきません。 ・マップ作成 int[][]image = { {1,1,…,1}, ・ ・ {0,0,…,0} }; ・マップ呼び出し for (int i = 0; i < 48 ;i++){ for (int j = 0; j < 48; j++) { if (image[j][i] == 0) { g.drawImage(img1,i*20,j*20); } if (image[j][i] == 1) { g.drawImage(img2,i*20,j*20); } } } …って感じで作ったら、描画処理が多すぎるせいか、恐ろしく動作が鈍くなってしまいました。 なんとか処理を早くする方法はないでしょうか?
書き忘れたので一応。 Doja3.0で作っています。
>>27 描かなくてもいいものは描画しなくていい
1チップ20ドットなら12x12枚でしょ
48枚も要らない
>>29 返信ありがとうございます。
確かに描画しすぎだったので、13×13枚だけ描画するようにしました。
for (int i = 0; i < 13 ;i++){
for (int j = 0; j < 13 ;j++){
if (image[j][i] == 0) {
g.drawImage(img1,i*20,j*20);
}
if (image[j][i] == 1) {
g.drawImage(img2,i*20,j*20);
}
}
}
※実際のとは少し違います。
それでさらにrepaint()の回数も減らして実機(N505i)で実行してみたんですが、
最初のうちはなかなかスムーズなんですが、だんだん動きが鈍くなってきて、
最終的には強制終了になってしまいました。
これでも描画しすぎなんでしょうか?
それとも他の部分に問題があるんでしょうか…orz
dispose()し忘れてんじゃない?
>>30 をちょっと訂正。
最終的には強制終了って書きましたが、それは勘違いでした。
image[i][j]のiまたはjが負数になることがあるせいでした…orz
>>31 dispose()…してませんね;
もしかしたらそれが原因かも知れません。
ちょっと勉強してきます。
描画画面大の裏Imageをつくり、そこにチップを並べてる。 移動していない時はこれをdrawImageするだけなので軽い。 動くときは、進行方向とは逆の方向へ裏Imageを全体的にをずらし、 新しく見えるようになる部分を描き足す。 OK?
dispose()はあまり関係ありませんでした;
それと、一度にする処理を減らしてみたら、動きがスムーズになりました。
>>33 その方法良さそうですね。
ただ、「裏Imageにチップを並べる」というのがよくわかりません。
描画画面大の画像を用意しておいて、そこにチップを上書きするんでしょうか?
それとも、チップを並べたのをImageにすることができるのでしょうか?
質問ばかりで申し訳ありません…orz
>描画画面大の画像を用意しておいて、そこにチップを上書きするんでしょうか? これが正解。 なぜなら、同じ面積の描画を行うなら、チップのような小さいものを大量に描画するより、 まとめて描画したほうが圧倒的に速いから。 8*8のチップを毎回描くなら64回の描画が必要。 だが、上記方法だと1マス右に動いた時、 7*8の大きな領域+新たに見える8個のチップ+その裏Imageをディスプレイに転送 で、計10回の描画で済む。 チップ数が多くなるほど速さの違いは顕著になっていく。
>>35 丁寧な説明ありがとうございます。
やり方がわからなかったので少し時間がかかりましたが、無事作ることができました。
今までは13*13のチップを毎回描いていたので、一回に169回描画、
今は12*13の領域+13+表に転送で、一回に15回描画…。
こうして比べてみると速くなるのは当たり前ですね;
遅くなりましたが、返信してくださった皆様、ありがとうございました。
そういや、900iではImage#createImageのサイズ制限どうなってる? N505iが320×320まで、D505iが画面サイズまでだったと思うけど。
>37 P900iは320x320の模様
39 :
デフォルトの名無しさん :04/05/16 01:13
___ ,.r<弌ヾヾヾヾヾヾ`ト`、-、__ /-ニニヘヾヾヾヾヾヾヾヾヾヾ`ー-、 ./ー二e `゙ `゙ ゙`ヾヾヾヾヾヾヾヾ、シナヘ 仁一彡 ゙、ヾ、ヾヾ ゙ヘイ〃メ入 f‐ニ=ツ ,.' - 、 __ チ彡ニ┤ !彡ニヽ ` ー -- 二 _ー_-- 三ニ-} V;〃ラ /〃ニー  ̄ メ二ーヲ ハテj ,. ニ、 、 、tヘヾi、 ヾミニソ .l. レ < (・) > .; .;:' ,.= 、 lミ,‐ヲ ! l 、  ̄ ,! .i < (・) > レ' ノ l ト 、 ` '"´ ,! l 、  ̄ , : ,j `1゙ヽ ,! l ` ´ ,.イ ,/ l '; ,.:' (´,、 ,. ヽヾ ,.:' /` .| ; ,:' ` ´ ′ヽ ,.' / ! ; ,.' _,,,_ __ ; ;' / ', ゙、"ー-ニニニ=ヽ ,.' / ヽヾ `ー--'''ー-一''′ / `ヽ、 、 _ノ/ ` ー--一''''"´ わしの妹のところに無言電話をかける奴は許さん 電話会社に盗聴させるぞ
>>38 つーことはN900iも? というか、Nの制限がPに伝染したんかいな?
せめて4画面ぶんくらい確保できないとやりにくいんだけどなあ。
イメージマップでは128個までしかイメージを設定できないという制限がある ってどういう意味なのでしょう?チップの種類を0から7fまでしか割り当てられない という解釈で正しいですか?セルが128個までだと一画面で12x12=144すら表示できない ことになってしまう。チップを8x8にしてせめて30x30は表示したいのですが。
フル画面別チップならイメージマップする意味無し夫
イメージマップって使ってる? どの機種でも速いなら使ってみたいが…
>>41 制限というか、byte[]には-128から127しか指定できないからねえ。
別のメソッドでも用意しない限り、どんなにがんばっても128個以上は無理っす。
45 :
デフォルトの名無しさん :04/05/16 15:12
ブラウザから起動で渡せるパラメータ(IApplication.getParameterでとれるもの) をエミュレータのiDKDoJa3.5で渡すことはできますでしょうか? eclipseから起動して使っています。 あとブラウザから起動のテストをブラウザからエミュレータ起動して 行うことはできますでしょうか? 教えてくださいませ。
DoJa-3.5(FOMA)使って開発しているんですが、携帯エミュの ヒープメモリー容量って調整できないんでしょうか?
× DoJa-3.5(FOMA) ○ iαppliTool for DoJa-3.5(FOMA) でした
>>45 HTML書いて、どっかに置いとくんじゃなかったっけ。
>>46 doja.exeの起動オプションに
-mx [ヒープサイズ]
じゃなかったかな?
付属のドキュメントに書いてあったと思う。
>>49 う、圧縮ファイルを解凍したほうにドキュメントがあったんですね。
ずっとインストール先探してましたorz。
「-mx 2800k -i jamへのフルパス」でいけました。
-mxオプションだけでiAppliTool立ち上げてもヒープサイズは変わってくれませんでした。
>>49 それはiαppliTool for DoJa-3.5を開発ツールとして使用してるときには使えない罠
iαppliTool for DoJa-3.5をあくまでエミュレーターとして使う分には使える
要するに-mxと一緒に-iでjamのパス渡してやらないと-mxは機能しない
(こうして起動すると開発ツールとしてではなくあくまでエミュとして起動しちゃう)
っていうかコレはバグだよなと俺は思った。仕様だというにはお粗末過ぎる
ちなみにデフォルト値は1Mbyteとかなり小さいので(Doja-3.0は2Mだったのに…)
かなり辛い……eclipseとか使わないでiαppliToolのみで開発するなら
3.5専用の機能を使うんじゃなければ3.0で開発したほうがいいよ
ってもう返事でてるし…(´−`)
>>51 タッチの差でしたね。
>3.5専用の機能を使うんじゃなければ3.0で開発したほうがいいよ
ついでなのでコンパイルなどもエディタ経由からコマンドラインでやってしまうことにしました。
この方がエラー行にタグジャンプ出来ていい感じです。
900iの中ではどれがオススメよ?
このスレ的には、NPはダメだな。
sage
ごめ 間違えた 外部ライブラリをDojaのプロジェクト から 使うにはどこにjarを置くのでしょうか
>48 どうも、探したらありました。エミュにブラウザがあるんですね。 いつもeclipseから立ち上げてるのでわかりませんでした。 ただUserAgentがJava/1.4.1_07 になってしまい、webアプリ側ではUserAgentを識別してiアプリリンクの on/offをしてるので変えたいのですが、方法ありますでしょうか?
敬語を二つ重ねるのを聞くと虫唾が走るぜ
え〜 SHダセェよ。
それは忘れてEclipse使おう。
64 :
デフォルトの名無しさん :04/05/18 00:49
>>62 NetBeansでも可。
でもプラグインは使わない。
開発ディレクトリのsrcと$DOJA_HOME\doja_classes.zipをマウント
ビルド自体はDoJa環境でやる。
単なるエディタ用だね。
なるほど、ネットとか本の情報ってもう古いみたい。 i-JADEとかJ-Builderがどうとか本に書かれてるけど廃れたのかな? とりあえずDOJAとeclipseがあれば良い感じだね。 今おとしてまつ・・・
503i の頃に少し触れたきりで大分経つけど、 i-JADE のサイトの フリー版の放置ぶりを見たときはワロタ。 あれはいつからああなったのかな。
もっと儲かるかと思ったけど、 実は全然儲からないと分かったからとかだったりして
インスコ完了、eclipseぱっとさわったが噂通り速そうだ。 続きは明日・・・おやすみ。
>>67 あっさりDoCoMoが公式エミュレータ−だしたからじゃない?
あんなん出してくるとは思わなかったよ。
504iで機能もふえて、機種別エミュレートもむずかしくなったし。
i-JADEはクラス覗けばわかるけど、J2SEをDoJaに見せかけるラッパーにすぎなかったからね。 504i以降のフィーチャーに対応できず沈没ってとこか。
最初は2機種(F,P)くらいだったから、機種別エミュレートもできたんだよね。 504iから5機種になって、しかも赤外線通信とかいいだして、イベントのタイミングも違ったりして、エミュレーションできなくなったし。
なるほどねー。 最初は i-JADE のほうが使いやすいと思ったり、サイトもバンバン情報だしていて 追っかけること自体が楽しかったけど、もう最近は停滞しちゃってるみたいだね。
すいません一つ質問なのですが、 DoJa3.0エミュと実機では動くものの、 手元にあるSO505iでのみ初回起動時の画像DLの時に 「hc=(HttpConnection)Connector.open("ここに画像URLが入る",Connector.READ,true);」 のところで 「java.lang.SecurityException: Illegal host」 というエラーが発生するのです。 対処の仕方をご存知の方居られませんでしょうか? ちなみに端末は全て505iで、SH以外(友達中探しても SHユーザーだけ見つからなかった)で確認しました。
>>73 Illegal hostってことは、ダウンロード元とは違うホストに繋ごうとしてるからだと思われ。
ちなみに、同じかどうかは、ホスト名を単純に文字列比較して同じかどうかを判定してるので
IPアドレスが同じで違うホスト名とかはダメよ。
>>74 レスサンクスです。
ダウンロード元と違うホストですか…;
サイトでの今の置き方はjarとjamとimageフォルダ(下にgifが入っている)が
同じディレクトリなのですが、
gifをjar&jamと同じディレクトリに置いた方が良いのかな?
手元の以外の実機以外では動いているから確信が持てないのがつらいなぁ。
なんにせよ今日はもう目がショボショボしてキツイので明日起きてから試してみます。
「iアプリコンテンツ開発ガイド for DoJa-3.0 詳細編」が 一昨日づけでアップデートされてる模様。
って、もしかしてGraphics#getPixelあたりでイヤガラセしてやればいいのかな。 これ呼べばフラッシュせざるを得ないじゃん。(正しいピクセルを返そうとする限りは) N505i持ってる方、実際のところどうでしょうか。
誰かロードランナー作って。
うらやましいか!SO505i(S)買え。
>>N505の糞仕様 _| ̄|○ 通りでdrawStringを大量に行う必要があるHELP画面で、キーの反応が超絶鈍くなるわけだ
ダメでした。 imageフォルダをエミュのリソース置き場と同じresにしたり 画像の置く位置を変えてみたりもしましたがダメ。 大体自分のサイトの同じ位置に置いているのに ホスト名が違うってエラーが出ることが謎ですよね。 (この辺全然詳しくないですが…;) う〜ん、比較しているホスト名を表示する方法ないかなぁ?
>>81 なるほど。
オレもキーの反応にぶいの何でかなーと思ってたが、そういうことか。
さすがはNだぜ
>>82 >う〜ん、比較しているホスト名を表示する方法ないかなぁ?
IApplication.getCurrentApp().getSourceURL();
85 :
デフォルトの名無しさん :04/05/19 20:31
iアプリ初心者です。前スレでも話題に上っていたようですが、 {project root}/resフォルダがjarに入らないので、resource://が使えず困っています。 Eclipse2.1.2 + iAppli Development Kit for DoJa3.0/3.5です。 上手く行っている方はいらっしゃるのでしょうか? まぁ、サーバ+ScratchPadにしろと言われればそれまでですが…… どうもCPL抵触して全面書き換えになったようですね。それ以降の症状なのかな……
>>84 レスありがとうございました、無事解決しました。
お教えいただいたものでurlを取り出してみたところ
ホスト名が微妙に変わっていたので、
それの対策をしたら動くようになりました。
自分の端末だけ動かないのは悔しかったですから、
動いてホッとしました。
でも昨日今日だけでかなりの回数ダウンロードしたから
パケ代が怖いな…。
>>86 おお、すまん。最初からgetSourceURLするよう勧めとけばよかったな。。
>>85 前スレ724より
>結局、パスに追加してた C:\cygwin\bin が悪さ(?)してたという結論に。
>それまでパスの先頭付近にいたので、最後尾に移してみたら、普通にビルド通る様になった。
>そちらとは直接の原因は違うかもしれないけど、似た様な事情かもしれない。
>参考までに。
漏れはコレで解決しますた。cygwin使ってなかったらスルーしてくだたい
% wget -S
http://ah-k.kyocera.co.jp/download/000001/000000/update.bin --23:40:41--
http://ah-k.kyocera.co.jp/download/000001/000000/update.bin => `update.bin'
Resolving ah-k.kyocera.co.jp... done.
Connecting to ah-k.kyocera.co.jp[211.14.6.5]:80... connected.
HTTP request sent, awaiting response...
1 HTTP/1.1 200 OK
2 Date: Thu, 20 May 2004 14:56:25 GMT
3 Server: Apache/1.3.29 (Unix) PHP/4.2.4-dev mod_ssl/2.8.16 OpenSSL/0.9.7d
4 Last-Modified: Wed, 19 May 2004 07:42:20 GMT
5 ETag: "13f898-c4-40ab0fdc"
6 Accept-Ranges: bytes
7 Content-Length: 196
8 Keep-Alive: timeout=10, max=100
9 Connection: Keep-Alive
10 Content-Type: application/octet-stream
100%[====================================>] 196 191.41K/s ETA 00:00
誤爆です。スマソ。
質問です
サーバのCGIにPOSTするiアプリを作成してます
以下のプログラムをN900iで実行するとConnector.openでエラーが発生します。
※N505i、SO505i、SH900iだと正常に動作しています(他機種は未確認)
-------------
HttpConnection con = null;
try {
con = (HttpConnection)Connector.open(
"
http://xxx/yyy/test.cgi ",
Connector.READ_WRITE,
true );
con.setRequestMethod( HttpConnection.POST );
:
:
-------------
このアプリは接続するtest.cgiと同じディレクトリからダウンロードしたものです
このプログラムの前に通信関係のプログラムは一切動かしていません
理由がぜんぜん分からん
同じ問題に当たった方いますか?
なにか事前にやっておくべき処理が抜けてるのかなあ。。。
そりゃN900だもの。 JPEG読み込みまわりにも致命的バグがあるし、もうだめすぎ N900&P900 過去の仕事をこれ対応にするなら、作り直すくらいの料金もらわないと割に合わない。
N900iとP900iには通信系でカナーリきな臭いバグがある。
>>93 >>94 レスありがとうございマス
そうかぁ、N900じゃしょうがないのかw
自分のせいじゃなさそうで安心しましたw
徹夜までして調査してた「かい」がありましたよ(爆死
とは言っても、N900iでサーバ接続するアプリはあるみたいなので できない訳ではないと思うんですが。。。 どなたかご存知ないですかね?
>>97 レス、ありがとうゴザイマス
GETは試してません
実はN900iもっていないので。。
試してみる価値ありますね
99 :
デフォルトの名無しさん :04/05/22 00:09
とりあえず、あFOMAだけSPSIZEを409600取って味噌
>>97 GETと思ったのですが、
POSTを指定する前のConnector.openでエラーが発生していますので
GETでも同じだと思います。。。
N900iには困ったもんだ
>101 エラーって何? 例外も発生せずに強制終了してるの?
>>102 例外が発生します
例外の内容を表示して確認したいところですが
N900i端末を持っていないので、それもできません。
というのも、どこで例外が発生したかはオリジナルの
エラーコードで判断ができるのですが何の例外が発生したかは
コードに記述していませんでした(そもそもこれがイカンですね)
とにかくConnector.openが例外を投げていることは確かです。
>>103 おお!ほんとですか?
すごい仕様(外)ですねw
ちなみにSH900iでは動いてるんですが、N900i固有の問題なんですかね?
>>92 con.connect(); は書いてる?
もうちょい前後のソースとかエラー発生時の情報を提供した方がいいかも。
ああ、なんかトンチンカンなこと書いちゃったな。忘れてくれ…
>>104 実機が手元にないのか。それは辛いなあ。
せめて例外の種類と詳細メッセージがわかれば、かなり搾れるんだが。
AppTraceをonにすれば、例外の種類くらいわかるんじゃなかったっけ?
>>108 AppTraceをONにしたことないのですが
どうやらprintln()で出力した情報をみれるみたいですね
こんなことになるなら、例外処理にスタックトレースとか
入れておいたほうがよかったのかな。。
開発中は、すべての例外を補足して表示。 これ基本。 本番でもすべての入り口に例外処理。 Canvas#paintとかprocessEventとかIApplication#resumeとかは全部tryでくくる。
Connector.openって何の例外発生するんですかね?
実際は以下のようにコードを書いているのですが
HttpConnection con = null;
con = (HttpConnection)Connector.open( IApplication.getCurrentApp().getArgs()[0] + "test.cgi", Connector.READ_WRITE, true );
#ADFのAppParamには「
http://xxx/yyy/ 」と記述
接続URLが不正以外で例外なんて発生しなそう。。
IApplication.getCurrentApp().getArgs()[0]が正しく取得できないことなんて
あんのかな。
思ったんだが、やっぱ質問スレ立てる?
なんで? このスレで十分じゃん。
************ヽ(`Д´)ノ機種依存情報!!************ P900とN900で、通信、JPEG読み込み系の意味わからんエラーがでる場合は、 スクラッチパッドサイズを409600にしる! そうしないと、ある程度以上メモリーを使ってからの通信、JPEG読み込みでバグる! F900の待ち受けアプリは蓋開けなどにより非活性化した場合、 FOLD_CHANGED_EVENTより先に止まっていたスレッドが動き出す。 おかげで「蓋を開けたときに背景が変化する」みたいなアプリの場合、変な動作になる。
iモーション(*.3gp)はiアプリから扱えませんか? 音声の再生が目的なのですが iメロディだと各機種ごとに規格がバラバラなんですよね。 各機種(といっても各900i限定で構わないです)で動く 共通のひとつの音声ファイルをiアプリで扱えれば・・
>>115 FOLD_CHANGED_EVENTについては、その動作は仕様どおりだと思うが?
スレッドが先に復帰するという動作はきちんと記述されてるし、それで動作が
おかしくなるならアプリの方のバグじゃないかと。
それとは違う動作がF900にはあるの?
>>116 ドコモのサイトからダウンロードできる仕様書(PDFのやつね)が
ついこないだ更新されてるから、それみてみ。
最後の方読んだら書いてあるよ。
ちなみに150KB制限とかあるから気をつけてね。
>>111 おいおい。
そのコードじゃConnector.open()で例外が起きてるかどうかも分からないじゃん..
たとえばgetArgs()がnullだったらどうするの?
あと、AppTraceは、標準出力だけじゃなくて、例外キャッチせずに落ちた場合に、
落ちた原因となった例外名だけ表示された記憶があるんだよね。
ちなみに、printStackTrace()は、AppTraceをonにしても表示されないっす。使えん。
>>119 IApplication.getCurrentApp().getArgs()
ってADFのAppParamに書いてあってもnullになる可能性があるんですかね?
そうだとすると確かにこれじゃマズイですね。。。
>>120 さすがにAppParamに書いてあったらnullにはならない。
だけど、本当にAppParamに書いてあるの?
実はHTML書き間違えてて違うADF読み込んでるとか。
AppParamの行が2つあるとか。
あるいは綴りが少し違ってるとか。
そういう「あたりまえ」だと思ってることを確かめてくことがデバッグでしょう。
>>115 スクラッチパッドって1つのアプリで大量につかうと他のアプリに
当然影響あるんですよね?
個人で配布してるアプリごときにそんなことしたくないなあ。。
N900,P900どうしてくれるんだ!って感じですねw
>>121 AppParamに書いてあるかどうかですが
N505iやSH900i等で動作しているから大丈夫と思うんですよね。
今回の処理とは別フローで通信処理(データをDLしてSPADに書き込む)
があるんですけど、通信エラーの出るN900iでもそこは正常に動作
しています。そこの処理も
IApplication.getCurrentApp().getArgs()[0]
が使われているんですよ。。。
わけわからん。やっぱりSPSIZEの問題なのかな。。
>>123 そういや他の機種で動作してたんだな。スマソ。
やっぱり例外の種類と内容がわからないと何とも…。
>>124 例外表示しなかったの致命的ですよね。。
今後はこんな不条理なエラーがあるってことを頭に置いて
例外表示するように注意します。
>>117 >スレッドが先に復帰するという動作はきちんと記述されてるし
まじで?
F900以外(504全機種、505全機種、DOJA2.1FOMA全部、900のF以外)は
まったく逆で、FOLD_CHANGEDのほうが先にくるぞ。
>>126 >sleep()メソッドを呼び出したスレッドは、休眠状態から非活性化状態に遷移すると
>sleep()メソッドから復帰し、それに続くロジックの処理を再開します。
>sleep()メソッドからの復帰は、システムイベントの通知に先立って行われます。
コンテンツ開発カイドに書いてるこれがそうだと思ってるんだがどう?
またこう書いてるんだから、非活性に復帰した直後の実行がシステム通知よりも
先におきる場合もあるし後にも起きる場合もあるよね。
sleepしたスレッドとシステム通知スレッドが別の可能性もあるんだし。
以前の端末全てがそうだとしても、それはたまたまでしかないでしょ。
>>127 そうだったのか…。
たまたまということはなく、常に意図した動作をしていた。
つまり今までは必ず
sleep復帰 → FOLD_CHANGE → 描画
だったんだなぁ。
Sleep復帰と描画までに数ミリ秒余裕があるから平気だったのかな。
F900iは、FOLD_CHANGEがくるのが他の機種に比べて遅いだけで、仕様どおりではあると。
>>127 そう。結局、それを保証されても、実行順序は何も保証されてないんだよな。
>>118 インラインプレイヤーモードって機種依存なのですね。
BGM的な用途には向かないのかな。
MediaPresenterのsetAttributeに渡すパラメータがいまいちわからない。
じゃなくてAudioPresenterでiモーション音声を再生すればいいのか。
いろいろ試してみます。ありがとうございました。
N900i、ShortTimer10個くらい作るとUIExceptionだよ
N900iだけでConnector.openで例外が発生する件
本質的な解決じゃないけど例外は出なくなったので報告。
例外を発生するアプリは通信処理前にスクラッチパッドから約100kの
データをロードしててメモリをたくさん使っています。そこで
>>115 氏の内容を参考に
データロードする前に通信処理をしたところ例外が発生しなくなりました。
ある程度メモリを使ってから通信するとエラーが出る可能性大です
ちなみにアプリのSPSIZEは95kbです。
とりあえず何の例外が発生したか出力するようにしたので
N900iユーザから報告待ちです。
わかったらまた書き込みます。
N900iだけでConnector.openで例外が発生する件 例外が分かりました com.nttdocomo.io.ConnectionException: NoResource リソース不足ってことですかね。 やはりメモリの問題ですか
ってゆーか単純にリソース食い尽くしてエラーが出てるの? 自分のプログラムが端末の限界を超えて作ってしまったってこと? でもN505iで動くし,もしかするとSPSIZE=409600KBであれば動くかも しれないので,なんともいえないですね。。。
メモリーが超余裕でもN900とP900はメモリーオーバー吐く。
SP409600にするとでなくなる。(
>>135 単位KBじゃないぞ)
ひどすぎるバグである。
>>136 KB誤記スマソ
本当にひどすぎるバグだ=3
>>135 リソース不足だったか。Nってすぐメモリなくなるんだよな。なんでなんだか。
ちなみに、ConnectionExceptionとかは、getMessage()の内容も重要だけど、
getStatus()の戻り値も重要なので、今後デバッグする時は出力するように書いといた方が良いカモ。
>>138 メモリ管理が5KB単位なんで、頻繁に確保したり解放したりしてると
フラグメンテーションでえらいことになる。
しかもRuntime#freeMemory()では検出できないという・・・orz
フラグメンテーションって。。。 GCするときにコンパクションしてないってことか...orz
>>139 まぁ、ネイティブなんでfreeMemoryとかじゃわかんないよなぁ。
NP問題については以前話題になってたが、
spsize409600にするのが基本のようだね。
jamだけ変更すればいいわけなんで、
それが一番簡単でトラブルも少なくていいかもな。
へたに、spsizeケチるより
どーんといこうや。
NとPはgcが未実装だってどこかで見たが
さすがにGCは実装してると思うぞ…。 GC実装してなかったらCLDC準拠じゃないだろ。。
こうして見ると、Nは503iからずっとトラブルメーカーか? 他にも酷い機種はあるが、トップシェアならきちんとやってくれ。
おれも、作ったアプリがNでテスト通ったときが一番ほっとするなぁ。
丁度Nの話題なんでN505i固有のバグで質問があります。 知識ある人教えてください。 アプリケーション起動中に不特定なタイミングで電源キーを押下すると、 「終了しますか? Yes/No 」のダイアログが出ずに、 「ソフトに継続動作できない障害が発生しました」で落ちてしまいます。 タイミングによっては落ちたり落ちなかったり、バグの原因が特定できなくて、 かなりハマってます・・。 Runtimeで取得したヒープメモリは、ファイル展開時には100%使用するのですが、 通常時は1/3ぐらいの消費量です。 何か注意すべき事や、同症状のバグが出た人はいませんか?
import com.nttdocomo.ui.*; class HelloWorldCanvas extends Canvas { public void paint(Graphics g) { g.drawString("★",5,20); } } public class HelloWorldIAppli extends IApplication { public void start() { Display.setCurrent(new HelloWorldCanvas()); } } このソースでで★の部分にめちゃくちゃ長い文章入れたいんですが、右端で折り返して、 縦にスクロールできるようにしたいんですが・・・ どうすればいいんでしょうか
>>147 そういう機能のクラスを作れ
じゃなきゃTextBoxで代用だ
>>147 Canvasだと、
自分で行を分割してスクロールさせるしかないと思う。
これは大変だ(;´Д`) テキストボックス使うと1行あたりの表示文字数少なくなっちゃうから、 Canvas使って1行ごと分けようかな・・・
どうも、また来ました。
まだまだRPG製作中なんですが、描画関連でまた困っています。
>>33 の方法で描画速度はかなり速くなったんですが、操作キャラや敵キャラなど、
他にもいろんな画像を使い始めたら、だんだん動きが鈍くなってきました。
プレイする人にとっては、動きが鈍いのはきついと思うのでできれば速くしたいのですが、
なかなかいい方法が思いつきません…orz
そこで図々しい質問だとは思いますが、何か描画を早くするテクニックみたいなものはないでしょうか?
あと、
>>30 のを改良(?)して↓のようにしたんですが、皆さんもこんな感じにマップを描いているんでしょうか?
for (int i = 0; i < 13 ;i++){
for (int j = 0; j < 13 ;j++){
g.drawImage(img[image[j][i]],i*24,j*24);
}
}
※img[]に画像を入れています
>>150 そのためにFont#getLineBreakがあるんだが…
>>153 指定した文字列の改行位置を取得します。off からlen 文字の部分文字列の幅が width より 大きい場合は、つぎの行の先頭になる文字列の位置を返します。
(抜粋)
ですか・・・
できるだけ簡単に"表示して終わり"。
っていうのにしないとClassが増えてわけわかめだからこまります
初心者でHPと本参考にしながら勉強とアプリ製作同時進行なもんで
>>154 別にクラス増やす必要ないでしょ?
APIリファレンスに出てるサンプルコードをコピペしてメソッド作ればおわりじゃん。。
がんがれ
まずは、行を分割するメソッドとか 少しずつ確実に進めるのがいいよ。 iアプリはdebuggerが貧弱なんでバグると特定するのが大変。 急がば回れということで着実にプログラミングにはげめ。
Canvasでimageに限らず差分だけ描画って結構難しいですね・・・。 repaint()とclareRect()を上手に使うのでしょうか・・・?
160 :
デフォルトの名無しさん :04/05/25 15:59
スクロール前とスクロール後で同じチップになるところは 描画しないということじゃないのかな?そのかわりカクカクスクロールだね スムースなスクロールを希望するなら背景用のデカイ画像を用意してその上に 数少ないチップを並べて、チップのみスクロールさせるとかするしかないよ すなわち、その方法で表現できないゲームは作らないほうがいいということかな。
俺も情報量の多い表をCanvasで作成するとかなり動作が遅くなってしまいました・・・。 505の時はそんなに気にしなくてもそこそこ早く動いてたのに、N,P900を使用すると激遅。 俺の書いてるプログラムも問題なのだろうが、900iは描画速度遅すぎない?
>>161 NとPは遅いね。Graphic#drawString()が特に遅いみたいだ。
163 :
デフォルトの名無しさん :04/05/25 23:09
はじめまして。 今日からiアプリを作ろうと思っているのですが、将来的にはRPGのようなものを 作ろうと思っております。 HelloWorldなどの単純なプログラムは作れるようになりました。 次に画面の中心に画像があるときに、キー入力を読み込み、 右キーを押したとき→画像が右に移動 左キーを押したとき→画像が左に移動 下キーを押したとき→画像が下に移動 上キーを押したとき→画像が上に移動 するようなプログラムを作ろうと思っているのですが、どのようにしたらいいのか まったくわからない状態になってしまいました。 すでに6時間以上進展してないので、どなたか助け舟をだしていただけないでしょうか?
誰か知っていたら教えてくれないか? マップスクロールする様なタイプのアプリを作ったのだが、何故かSH505&SH900“だけ” 遅いと言われてしまった(遅いはずのDでも問題なく動いているらしい)。 俺はSHの実機を持ってないんで、描画系をいろいろと工夫してテストを頼んでみたのだが、 多少の改善はしたが遅いままだそうだ(505では依存系のImageMapも使ったんだが…)。 そこで質問なのだが、SH系特有の動作がトロくなる処理などあるのだろうか? かれこれ3日ほど悩んでいるのだが、N505では問題ない速度だし…。 俺にSHを買えという啓示なのだろうか…(涙)。
SHはスクラッチパッドのアクセス遅くなかったっけか。
>>163 冷たい言い方だが、
それらの方向キーを押したときに、
そのように画面を再描画できるようなプログラムを作れとしか言えん。
描画するものの位置をキーの入力で変えればいいだけだ。
画面上の任意の位置に任意の色の点や画像を表示できるのだから、
あとはそれを自分でキチンと処理できれば
(速度とかの問題を除けば)できるはずだと思う。
6時間も悩んでると言ってるが、
ほんとにその間いろいろ試してみたのか?
プログラミングの初心者だと思うがはなはだ疑問だ。
そもそもイベントドリブンなプログラムの書き方を理解してるかどうかあやしいよな。 そこを理解してないと、どうすれば良いか見当も付かないだろう…。
>>163 まず、どこがわからないのかを、もっと詳しく説明してくれ。
・画像を表示させる方法
・画像の表示位置を変える方法
・キー入力を取得する方法
のどこで詰まってるんだ?
>>164 うーん。SHは本来描画も演算もトップクラスで速いんだが・・・
現在の描画系はImageベース?
173 :
デフォルトの名無しさん :04/05/26 09:49
初めてお邪魔します。 ドコモから落としてきた開発環境のエミュレーター実行時に ALERT: Invalid constant pool entry と出て起動しません。 どういったことが考えられるでしょうか? よければアドバイスお願いします。
早速のレスありがとう。 >166 この記事は俺も読んだよ(で、さらに訳が分からなくなった…orz)。 まあ、真っ先に思い浮かんだのが描画系だったんで、もしかすると 166 の書いている通り、描画以外に問題があるのかもしれん。 実機が手元にあれば、パケ死覚悟で処理別の速度チェックを行えるんだが…。 >167 SPは最初のデータ読み込みと最後のスコア登録だけでしか使ってないんよ。 たぶんSPは問題ないと思われる(最初に書いておけば良かった、申し訳ない)。 >171 最初は drawImage & Clip で描画していたけど、今は ImageMap & Clip を使ってる (まあ、どっちも Image ベースなんだが、直接か間接かの違いだね)。 本当は Clip も外してみたいんだけど、ピクセル単位でのスクロールがあるんで 外せないんだよな…。 俺も、もう少し自力で調べてみるわ。 何か分かったら、自己レスするよ。
>>174 使ったことないからわからんけど、ImageMapが遅いんじゃないの?
import com.nttdocomo.ui.*; public class Painter extends IApplication{ public void start(){ Display.setCurrent(new MyCanvas());//MyCanvasクラスを画面にセットする。}} class MyCanvas extends Canvas{ public void paint(Graphics g){ for(int dy=0; dy<240;dy++){ g.getColorOfRGB(255,0,0); g.fillRect(0,dy,240,1); g.getColorOfRGB(255-dy,0,0);} //文字列の描画 g.drawString("グラデーション",50,130);}} DoJa-3.5(FOMA)を使ってiアプリの勉強を始めたのですが、画面をグラデーションさせる所で詰まってます。 画面サイズは240*240で上の方から赤から黒へグラデーションさせて画面中央に文字を描画したいのですが、考え方は合ってると思うのですがどこが間違ってるのでしょう?
>>176 fillRectの第4引数を2にしてみな
もしくはdrawLine使うとかな
178 :
デフォルトの名無しさん :04/05/26 17:21
iアプリの通信について教えてください iアプリは、ダウンロードしたサーバーとしか通信できないのですか? iアプリは、数字のIPアドレスはつかえない、は正しいでしょうか? iアプリは、ダイナミックDNSのアドレスでも通信できるのでしょうか? 以上質問3連投 3連打で打ち返してくださいまし
>>178 あー、ここで色々質問に答えてるけど、さすがにその質問の仕方はむかついたわー。
仕様書読め。
どれも基本的すぎる上、態度が気に食わん。
>>176 getColorしたものを、setColorしなきゃだめだぞ
>>174 Clipが外せない理由がちょっと気になった。
ひょっとして、でかーいマップ画面を作って、それを全部描こうとしてない?
チップに分けているなら、敷き詰めたときに描画エリアより少し大きくなるだけの
マップを作って、それをスクロール量分だけずらして描けばいい。
スクロール量がチップサイズを超えたらチップのマッピングを変更。
的外れだったらすまん。
>182 質問に答えてくれてありがと〜。 drawImageでやっていた時は、チップから生成している Image は描画分+1行列だけだね。 ImageMap の場合も、描画ウィンドウ範囲はやっぱり描画分+1行列だよ。 そしてマップが移動する時にピクセル単位でスクロールさせて(2〜3描画程度)、 用意したチップマップサイズを超えたら、足りない分だけ描画している。 マップ移動時にカクカクと見せないための処置なんですよ。 で、さっき売り切れ寸前の実機を手に入れて試してみましたさ〜(1万円が飛んでいく〜)。 …えらく騒がせて申し訳ないけれど、マップ描画以前でも遅延が発生してやがる…_| ̄|○ 描画よりもメインルーチンの部分に問題あるんじゃないか…。 本当にスレ汚してスマン…。 でも、遅延の理由が分かったら自己レスするわ(SHだけで起こるのも興味深いし)。
>>173 それ、浮動小数点数使ってるとでるよ。
CLDCは浮動小数点数は未サポートなんよ。(コンパイルは通る)
確かドキュメントに載ってたはずなのでもっかい確認すれ。
とりあえず、SH505iのImageMapは特に遅くない。 少なくともdrawImage2重ループよりは速くなる。
はやくCLDC1.1対応になって欲しいものだ…。 いつから対応するんだろうねぇ。
>>183 なるほど。外してたスマソ。
どういう処理で遅くなってるのかまで切り分けてくれれば、なにか
アドバイスできるかもしれん。
現象については俺も興味あるトコなんで、何かわかったらよろしく〜
189 :
デフォルトの名無しさん :04/05/27 12:14
ここですか? BREWを馬鹿にするスレは
auはJavaに戻りつつある。
>>191 auはPhase3迄でJava対応は終了だと思ったが・・・?
193 :
デフォルトの名無しさん :04/05/28 03:08
はじめましてです。 i-アプリで単語帳(クイズ形式)のようなものを作ろうと思うのですが、 (漠然とした話ですみません) 単語や訳のデータはテキストベースで結構な量になってしまうので、 扱いをどうしようかと迷っています。 サーバから逐一落としてくるのでは通信料も多くかかりますし。 端末内のメールをJAVAから読み込めるのでしたらそこにデータを置いて、 メールをPCとやりとりすれば、編集も容易で可用性十分なんですけども。 やはりトラステッドiアプリの配信なんて個人では無理でしょうか? バケ代が安く済ませられ(すんません貧乏なんです)、 編集の容易さや、端末間のデータの移動しやすさなど 上手く解決できる、何か良い知恵はないでしょうか? 宜しくお願いしまする。
>>193 テキストをjarで圧縮して、ネットワークダウンロードして、スクラッチパッドに書き込め。200KまでOKだ。
妥当な提案だ。 UTF8そのままでは、テキストと言えどもかなりかさばるので 何らかの形で圧縮を施すのも忘れずに。 imonaの中の人の圧縮とか、悪くないサイズに縮んでくれまますよ。
>>194 >>195 早速のレスさんくすです。
やはりスクラッチパッドに詰め込んでしまうのが妥当ですよね。
データ編集は別のアプリからCGI使ってやることにします。
バケ代については…パケ割入ります。
ありがとうでした。
ケチケチせんとパケ放題入っとけ
>>195 使う文字を決めてしまって(ひらがな+英数字+漢字+記号)256種類に収めれば
とりあえず1バイトで表現できるので素のテキストよりは軽くできると思うが。だめかな?
>183 やっと原因が分かった…。 つうか、俺の初歩的ミスだったよ…○| ̄|_ 原因は「ShortTimer」が発生させるイベントを「processEvent」でうまく取得できな かった事のようだ。「processEvent」はイベント発生時に遅れる事はあっても呼ばれる もんだと思っていたが、呼び出しタイミングは任意だったんだな…。 俺が作っていたアプリでは「IApplication派生=メインルーチンクラス」と 「canvas派生=描画クラス」を作っていて、メインルーチンから描画クラスの 「ShortTimer」が発生させたイベントのカウンタを見に行く仕様だったんだ (一つにまとめろという意見はあると思うが、その通りとしか言いようがない…)。 で、他の機種(NやらD、SOなど)では一定間隔で「processEvent」が作動して、 タイマーイベントの取得ができていたんだが、SHだけは「メインルーチン」ばかり 動作して「processEvent」が動かずに取得できなかった(多分イベントキューには たまっていた?)。どうもSHは「processEvent」か「canvas」クラスの動作が他と 違う感じだ。 修正したところは、メインルーチンのウェイト処理で「Thread#yield()」を使用 したところ、うまく動いたよ(「Thread#sleep(1)」でもいいんだよな)。要は別スレ ッドへ実行を譲ればいいわけだから。 このメソッドの存在を忘れるとは、改めて俺にはJavaの知識ねぇなぁと思ったね。 始めてから半年にもなるというのに…。 スレ汚し、スマンね…。
メインスレッドをSleepなんぞかけずに無限ループさせているが、 processEventが動作しなくなるなんてバグでたことないぞ。
スレッドを無限ループさせるなら wait()かsleep()かyield()は必須だね。マルチスレッドプログラミングの基本。 たしかに、よく入れるの忘れるけどな...orz
>>199 解決おめ〜
スレ汚しとは言うけど、俺にとってはためになる話だった。thx。
ただ、やっぱしメインと描画で別のスレッドを走らせるのは変えたほうがいいと思う。
Canvas派生クラスのrun()の中だけでウェイト入れてぐるぐる回そう。
結局そこに落ち着くんだよなあ…。 timerイベントの方がクールだとか人は言うが、端末毎に実装が違うとしか思えん 挙動の違いを見せる事があって、どーにも安心して使ってらんないし。
>200 いや、こいつはCanvas派生クラスにメイン処理を作っていれば、本来は起こらないバグ だとは思うよ。 だから、携帯Javaアプリを作り慣れている人間は、滅多にお目にかかれないバグだ ろうね。お目にかかっても、ちっとも嬉しくはないんだけどね...orz >201 確かに実行管理はスレッドの基本だから、これからは忘れないようにすればいいかねぇ (別にメソッド名は暗記せんでもいいとは思うが、存在は忘れないようにせんとね)。 SH900iでも同じ仕様らしいから、今後も同様の仕様の機種が出てくるかもしれんし。 >202 ためになると言っていただけると、俺も恥を晒して書いた甲斐があったというもんです。 確かに、canvas派生にrunメソッドをおいて、スレッド化するのが一番だと気付きました。 ただ、現状コメント含めて3000行のソースを、数日でバグを発生させずにマージする 自信がなかったもんで断念ですよ...orz 次回の開発では、もう少しうまく設計できると嬉しいよ。 >203 JavaVMの動作の違い(仕様)と言ってしまえばそれまでなんだろうけれど、本当 にDやらNで動作していた事が不思議だ(なんかSHの動作の方が正しい気もするし)。 ShortTimer は確かに便利なんだが、こうもVMの違いがあると困るのも確かだね。 では、本当にみなさんありがと〜。 これからも何かあったらよろしく(俺も応えられる範囲で答えるから)。
明示的にスレッドオッ立てなくても、描画イベントやタイマイベントは 処理中に平然と割り込んでくるから、作法をひとつ間違えただけで 同期処理が甚だしく面倒になるんだよなあ…。 iアプリはpaint()内で描画しなくてもgetGraphics()してやれば 何時でも描画できる分、メインのループに処理を集中させられるんだが、 これがVodaとかだと小細工を労するか、諦めて描画と本体の2ブロックに プログラムを叩き割るかしないといけなくなるから、無意味に大変なんだよなあ…。 つか、やっぱりみんな同じ所に引っかかるものなんだなと、ちょっぴり安心した(w
206 :
デフォルトの名無しさん :04/05/29 03:27
あの・・・ どなたか長い文章を表示するアプリで、画面の右端で折り返して表示してくれるアプリのソースのヒントください・・・ いろいろ試行錯誤してみたんですけどできなくて・・・・
>>206 「いろいろ試行錯誤してみた」じゃ何を試したのかわかんないから
助けを求められても何もできないよ。
APIリファレンスのFont#getLineBreak()を読め、としか。
208 :
デフォルトの名無しさん :04/05/29 05:54
Font#getLineBreak()の使い方わからないので、 テキストボックスで作ってみたんですけど、文字サイズが大きくて見づらくてこまってるんです・・・
>>208 ちょっと待て。
Font#getLineBreak()がわからなくてテキストボックスで作ってみた、って言ってるけど
アプリをPanelとCanvasのどちらで作るかも決めてないってことかい???
ま、それはそれとして。
Font#getLineBreak()はCanvasで文字列を描画するもの。
APIリファレンスに載ってるサンプルが理解できなかったら勉強するかアプリの制作をあきらめる。
テキストボックスはPanelに配置するもの。
複数行表示はできてるみたいだね。それで文字の大きさが問題、と。
APIリファレンスでTextBoxの「クラス com.nttdocomo.ui.Component から継承したメソッド」の中に
「setFont」ってあるでしょ。今度はそこ読んで何とかしてみ。
>>208 なぁ…。
getLineBreakでぐぐって、一番上にでてくるリファレンスに、
そのものずばりサンプルソースがまるまる書いてあるんだが…。
な め る な よ ?
プログラムの組み立て方についてなのですが、 トップメニューに0.gifを表示しつつ 1.画像A 2.画像B 3.画像C の様なメニューを表示します。 キーイベントが発生したら それぞれ1.gif、2.gif、3.gifを表示します。 といったオーソドックスな分岐なのですが、 キーイベントのif文で if(param == Display.KEY_1){ 1.gifを表示する処理 } else if(param == Display.KEY_2){ 2.gifを表示する処理 } else if(param == Display.KEY_3){ 3.gifを表示する処理 } とするのがいいのか、 フラグを使ってrepaint();した先のpaintの中で分岐させればいいのか、 paint1、paint2、paint3を作ってキーイベントからそれぞれに飛ばした方がいいのか、 どの方法がおすすめでしょう? こういう場合の定石なんてあります? ぶっちゃけ動けば何でもいいのでしょうが、 あとあとの拡張性なんかを考えるとどうすればいいのか 混乱しています。なにとぞ救いの手をお願いします〜
キーイベントで分岐。
>>212 全部じゃねーか(藁
>>211 処理内容によるかも知れないけど、最初の案でいいと思うよ。
無駄に変数やメソッドを増やすこともないし。
214 :
デフォルトの名無しさん :04/05/29 11:39
>>211 repaint()を呼んでも必ず直後にpaint()がコールされるわけじゃないから
(ラグがある時がある)気をつけてね。
なので、どちらかと言えばprocessEvent()が呼ばれたときか、
タイトルループの中でgetKeypadState()使って処理したほうがヨサゲ。
>>211 iアプリコンテンツ開発ガイド 詳細編に理由とともに書いてあるが、
processEvent()内の処理は極力短時間で完結させよとのこと。
paramを変数に保存し、repaint()先のpaint()で分岐して各画像を描いたらいいのでは。
そもそもrepaintなんぞ使わないに一票。 reapaintのは、全画面再描画用フラグを立てるだけの入力しか書いていない。
みなさんありがとうございます。 処理内容は、画像表示+αも想定してまして、 その+α部分の規模が大きくなってしまう可能性もあったりします。 極力短時間で完結させるならば、 フラグだけ持ってさっさと外に逃げた方が無難そうですね。 +α部分の処理を独立させるか否かは別にして、 すぐに外に出る、という方向で骨組みの処理の流れを今一度考え直してみます。 getKeypadState()使った処理も考えてみますね。ありがとうございます。
複数のキーを同時に押すことがあるなら、getKeypadState()を使ったほうが楽。
ちなみに、getLineBreakのサンプルコードは、 503iの時APIリファレンスは間違ってるので注意w
F505iGPSでiアプリで位置情報を取得したいんですけど、 どうやってやったらいいんでしょう?? 誰か知っている人がいたら教えてくれるとうれしいです。
Dojaのデバイス情報ってどこにもないのでしょうか。 見つけたのは古くて、現在のDojaでは利用できませんでした。 機種ごとにあれば、と思い各メーカのページやDoCoMoのページも探してみたのですが見当たりません。 私の検索能力では見つけることができませんでした。 自分で作るしかありませんか? それともすでにどなたかが作っているとか? もしご存知の方がいらっしゃいましたら、ご教示いただけるとありがたいです。
>>220 パッケージcom.nttdocomo.device.locationを使うんじゃないの?
DoJa3.0のAPIリファレンス嫁
オプションAPIなのに標準APIの方に載ってるが…
>>221 エミュのスキンのことか??
普通は画面のサイズを変えるくらいしかしないから、そんな物わざわざうpしないと思われ
漏れは、skin.confの
lcd_width = 240
lcd_height = 271
を変えるだけしかやった事無い
>>221 ちょっと言ってる意味が分かんない。
具体的にどんな情報を探してるの?
>>222 ありがとうございます。
やはり動作チェックさえできればいいくらいのものなんですね。
>>223 質問の仕方が悪かったようです。申し訳ありません。
>>222 さんの回答で充分です。
ありがとうございました。
225 :
デフォルトの名無しさん :04/05/29 21:23
import com.nttdocomo.ui.*; public class test extends IApplication{ public void start(){ Display.setCurrent(new myCanvas()); } } //Canvasクラス設定 class myCanvas extends Canvas{ public void paint(Graphics g){ // 小さいフォントを指定 Font f = Font.getFont(Font.SIZE_SMALL); String str = "フォントを指定する方法は、2通りあり、「タイプを指定する方法」と、「フォントのフェイス、スタイル、サイズを指定する方法」の2種類があります。"; int begin=0, finish=0; for(int i=0; i<3; i++){ finish = f.getLineBreak(str, begin, str.length()-begin, 160); int kaigyo = f.getLineBreak(str, begin, finish, 160); begin=finish; } } } あの・・・ やってみたんですが・・・ 悪いところ指摘してください。おねがいします
>>225 > int kaigyo = f.getLineBreak(str, begin, finish, 160);
ここが意味ワカンネ
文字列が変化していないのだが・・
228 :
デフォルトの名無しさん :04/05/29 22:13
>>227 そうなんですよil||li _| ̄|● il||li
まずサンプルコードをテキストエディタで書き写せ で、それをここへコピペしろ 話はそれからだ
230 :
これですか? :04/05/29 22:40
Font f = Font.getFont(Font.STYLE_PLAIN); String str = "ある晴れた日の午後、アヒルが池で気持ちよさそうに泳いでいた。"; int begin=0, finish=0; for(int i=0; i<3; i++){ finish = f.getLineBreak(str, begin, str.length()-begin, 50); int kaigyo = f.getLineBreak(str, begin, finish, 50); begin=finish; }
確認するが、文字開始位置を出しているだけなのに、 文字列が表示されないとか思っているわけ、じゃないよな???
232 :
デフォルトの名無しさん :04/05/29 23:28
>>231 g.drawString(str,10,10);
ってのを追加しても意味ないですよね・・・
どうすれば・・・
>>232 232==206で、210にあるソースを試しているってのを説明しないと
何をしたくてどううまくいかないのかが読んでいる人には全然理解
できんぞ。おれはもう説明する気ねーけど。
234 :
デフォルトの名無しさん :04/05/29 23:39
ttp://www10.plala.or.jp/java/kouza/19.htm ここに載っていたソースをコピーして
>>225 を作り、コンパイルしてたんですが、
文字が表示されなかったんです。
それでどれを使って文字を表示すればいいのかと思って
g.drawString(str,10,10);
というのを使ってみたんですが、それでは
for(int i=0; i<3; i++){
finish = f.getLineBreak(str, begin, str.length()-begin, 50);
int kaigyo = f.getLineBreak(str, begin, finish, 50);
begin=finish;
}
を記述した意味がなくなってしまうのではないのかなぁ
とおもって困ってます
>>228 おい、文字列を変化させるコード書かずになにを期待してるんだ?
ソース見せるだけじゃ意味ないからこれは調べてくれよ。
1.getLineBreakで次の行にすべき最初の文字位置が求められる
2.文字位置が求められたら、それを参考にstrから必要な文字列を抜き出す
3.抜き出した文字列をdrawStringで書き出す
これでしたいことはできるんじゃないかな。多分分かっていないと思うから、結論から言うと、
getLineBreakは「自動的に改行してくれる」ものじゃないということだ。
>>232 が分かっていると思われるメソッドについては、そのまま入れておいたから、
何を調べればいいかは分かるだろ? がんがれ。
int kaigyo = .... と begin=finish; の間に g.drawString(str.substring(begin,finish),0,i*f.getHeight()+f.getHeight()); を入れてみてちょ
239 :
デフォルトの名無しさん :04/05/29 23:56
>>238 キタ Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒(。A。)!!!!!!!!!!!
キタ━━━( ´∀`)`・д・´) -_-)´・ω・`)丶`∀´>´・.・`)=3━━!!!!
どうもありがとうございます!!
やっとできた!!!
先ずAPIリファレンスのFont#getLineBreak()を見ろ で、そこに書いてあることを読んで理解しろ そこにそのものずばりのサンプルコードも載っている 理屈がわからないなら出来ても無意味だぞ つーか、ほんとにちゃんと動いてるのか?
241 :
デフォルトの名無しさん :04/05/30 00:17
文字の表示はされました 後は改行したい位置での改行と、縦スクロールするのにはどうやって記述するのかを調べてきます
なんでAPIリファレンスのコードコピーしないんだよ。。 あれで殆ど用は足りてるのに。
このスレが必要なくなっちまうからじゃないのか? ネタを続かせるためだろ、多分。
改行問題で困っている質問者(206氏)は問題が解決するまで名前欄に「206」と入れた方がいいよ。
助ける側もその方がやりやすい。
ついでだから
>>206 から
>>241 (ここまで読んだ)までのまとめ。
質問者
206=208=225=228=230=232=234=239=241=…
やろうとしていること
長い文章を画面の右端で折り返して表示するプログラムを書く。
質問者のレベル
プログラミング初心者。
サンプルソースを理解不十分のままコピペしてトライ&エラー。苦戦中。
なんでAPIリファレンス見ないんだろうね。 よくわからんページのサンプルソースは見るくせして。
>>207 がAPIリファレンス読めと言って
>>208 で分からないと答えている。
読んでも理解できなかったってことじゃないかな。
つまり、どれがサンプルかわからなかったってことか。
つまり、DoJaのリファレンスすら見てないバカだったってことか。
ちなみに、こいつのバカなところは、リファレンスを見ろと言て、リファレンスが見つけられてないのにそのまま話題を続行したことだな。 あの時点でgetLineBreakのリファレンスがみつかってないことをいってれば、こんなことにはなってない。 やれっていわれたことをできないのはしょうがない。でも、それができてないことを隠して話題を続けるやつは、救いようがない。
>>251 まずオフィシャルのものをダウンロードしろよ・・・
>>206 まず、このスレの
>>2 を見よ。
DoCoMo公式サイトから必要なドキュメント(資料)をダウンロードせよ。
開発の対象としている機種が
504シリーズならDoJa2.xプロファイル用を。
505シリーズならDoJa3.0プロファイル用、および3.x共通用を。
900シリーズならDoJa3.5プロファイル用、および3.x共通用を。
ダウンロードしたか? iアプリ開発に固有のAPIのリファレンス(説明書)は
「iアプリコンテンツ開発ガイド for DoJa-○.○ APIリファレンス編」というやつだ。
206がやろうとしていることも、そのものずばりの解答がそのまま掲載されているんだぞ。
Fontの項目のgetLineBreak()の説明を読んでサンプルコードを理解せよ。
206よ。
きみは質問する立場として、質問者のスタートラインにも立っていなかったってことだ。
今はAPIリファレンスが読めるように(必要な項目の内容が理解できるように)がんばれ。
おれはまず、やれっていうことができなかったら、そのことを申告できるようになってほしい。
>>248 まあそれもAPIリファレンスだから間違っては無いw
誰も「Dojaの」APIリファレンスとは教えてない罠。
おまいら見てると癒されるからもっとやれw
聞くほうも聞くほうだが、教えてるほうも(ry
>>209 の
>APIリファレンスに載ってるサンプルが理解できなかったら勉強するかアプリの制作をあきらめる。
を完全に無視したあたりが原因かもなー。
まず「調べ方」あるいは基礎の基礎からの勉強が必要だったという。
進んでいるように見えてこれから先、何回も同じような壁があるだろうから、
結局は先に勉強しておいたほうが「急がば回れ」を実感できるよ思うよ、実際…
>>251 そこのgetLineBreakのところにまんまなサンプルコードあるじゃんよ…。
おもしろい反応が返ってこないから、ネタじゃないだろ。 ま、一次情報の大切さがわかってくれればよいのだが。
>>206 いままで私も同じところでつまずいて
いました。>238さんの方法でなら、確
かに解決しますね。初心者同士これか
らも頑張りましょう。けれども、どう
してこの一行が必ずいるんでしようか
ね?よろしければ、教えてください。
>>206
ママに持て?
>>260 まず一番最初のソースの失敗した原因は
文字を画面に表示するためのものが記述させてなかったからと思います
きちんとgetLineBreakの意味を勘違いしないでわかってればこんな失敗しなかったと思うので、
サンプルソースみて勉強してきます
縦読みか・・・ 釣られた・・・・ orz
当方、iappliTool for DoJa-3.5にてiアプリを開発しています。 resディレクトリの中に置いたtest.txtの中に書かれている 文字列を読み取って処理するにはどのようにしたらよいのでしょうか? 画像ファイルはMediaManager#getImage、 音楽ファイルはMediaManager#getSound を使用しているのですが・・・。 よろしくお願いします。
InputStream ins = Connector.openInputStream("resource:///test.txt"); こんな感じだったかと あとはInputStreamReaderを使うなりなんなりして頑張る
>>251 =206
キミが見てるのは503i用のAPIリファレンスの悪寒。
>>219 が本当かどうかちゃんと見てないが、ちゃんと最新のをダウンロードしてこい。
>>268 ありがとうございます!
InputStreamReaderとBufferedReaderを使って、
なんとか希望通りの動作をするようになりました。
>>269 >>206 が503iを対象にしたものを作ろうとしているときは…
などと考えると疲れるな、やめとこ。
272 :
デフォルトの名無しさん :04/05/31 16:58
ボタンが押下されたら画面を切り替える処理の場合、 public class Canvas1 extends Canvas { public void processEvent(int type, int param){ if(type == Display.KEY_PRESSED_EVENT){ Display.setCurrent(new Canvas2()); } } public class Canvas2 extends Canvas { public void processEvent(int type, int param){ if(type == Display.KEY_PRESSED_EVENT){ Display.setCurrent(new Canvas1()); } } このコードで表面上は目的が達成されるのですが、 Display.setCurrentのnewでインスタンスを生成しっぱなし ってメモリ的には無問題でしょうか?
DoJaのエミュが今どのくらいメモリを消費しているのか 調べる方法ってあります?
>272 Runtime
インスタンス生成前と生成後を long m1 = Runtime.getRuntime().totalMemory(); System.out.println( m1 ); long m2 = Runtime.getRuntime().totalMemory(); System.out.println( m2 ); で比較してみたのですが同じ数値が返されました。 このコードって実機じゃないと有効じゃないのかな・・・
>>275 Runtime#totalMemory()は、仮想マシンの総メモリ容量を返す。
空きメモリを見たければ、 Runtime#freeMemory() な。
だけど、断片化などのメモリ管理の都合で、必ずしも正確な値を返さないようだ。
ありがとうございます。 インスタンス生成前と生成後で数値の変化が確認できました。 うーんよくわからないけど破棄する処理は不要なのかな・・・ もう少し勉強してきます。
>>277 ガーベッジコレクションっていう仕組みがあるから大丈夫なのよ。
必要ないのに毎回newするのはあんまりイクナイ
ガベコレがあるからといって、むやみにnewするのはやめとけ。
というか、GCの挙動が、機種によってあまりにも違いすぎ。
>機種によって...
まぁそのへんの話になってくると愚痴になりやすいので、
俺たちで何とかできる部分はないか考えてみようぜ。
例えば
>>272 なんかだと
「new Canvas1()」の部分があからさまにアレだしさ。
Java Blenderを使ってアプリを圧縮してるんですが、 このツールを使って作成したアプリは 商用などでも制限なしで使えるのでしょうか? ocamlのホームページなどを色々見てみたのですが、 いまいち要領を得ません。 誰かご存知の方がいましたら教えていただけないでしょうか?
285 :
デフォルトの名無しさん :04/06/01 01:50
とりあえず、不要な領域はnullを代入してgc()しとけ。 初期化とか画面遷移のタイミングでやるのが基本。 ・・・だよね?
あからさまにシロウト丸出しでした きっとnew以外のCanvas表示方法がありますよね そっちを使えばメモリ云々なんて気にすることないし。 gc()は勉強になりました。多くのヒントをありがとうございます。
うむ、キャンバス切り替えるたびにnewするのは馬鹿らしい。 っていうか、Canvasのオブジェクトはひとつしか使う必要がないと思うのだが。
誰かiアプリでピンボール作ってくれませんか? 少ないですが報酬も出します。 高額は出せないので、暇な人で作れそうな人。
>>288 せめて、対応機種と納品条件
それともちょっと具体的な金額を提示してくれないと
なんとも言えないような気もする。
>>287 それは言い換えれば、何枚画面があろうと
ひとつのCanvasオブジェクト内で工夫するのがベターだ
という解釈で正解ですか?
だとすると考え方を根本から変えなければ。
現在、Canvas1.java、Canvas2.javaな状態でして・・
最近はjarのサイズ制限がぬるくなったからいいねぇ。
何をやりたいのか説明しますと、ゲームで ●タイトル画面(キー入力でメニュー画面へ) ●メニュー画面(メニュー選択後キー入力で各画面へ) ・はじめから ・つづきから ・面セレクト ・操作説明 の様な構成で各画面を行き来する部分の作り方を試行錯誤中なのです。
>>291 すみません、DoJa3.5以上を対象機種として作ってたりなんかします(汗)
趣味なので自分の携帯で遊べればいいや、という発想でして。
294 :
デフォルトの名無しさん :04/06/01 11:27
>>292 やり方は色々だと思うけど、自分なら
画面状態をフラグで管理して描画やキー入力処理を振り分けるよ。
メモリ使ってでもCanvasオブジェクトを複数使いたいなら
毎回ではなく最初に一度だけnewしておいて使い回したほうがいいね。
newしてgc()するとアプリが一瞬止まる。
止まってもいいようなケースなら問題ないか。
>>292 なんかいきなり色んなことに取り組み過ぎじゃないか?
まずは肝心のゲームの部分から手をつけた方がいいんじゃない?
カキコ見てると、とてもゲームの部分出来てるように思えんのだが…
FOMA900iでPrimitiveArrayクラスを使用して3Dのテストをしているのですが、 テクスチャ付きの3角形ポリゴンを描画しようとすると以下の問題が発生していて困っています。 エミュレータでの確認 java.lang.IllegalArgumentException: The primitives require texture setting のエラーで描画できない。 P900(個人所有) N900(友人の協力により確認) 正常に描画できる。 で、特に疑問なのが、リファレンスには 「未サポートの場合、 メソッドが呼び出された時点でUnsupportedOperationException」 とあるのに、エミュレータでは「The primitives require texture setting」とでるので、 プログラムの凡ミスの可能性があるような気もしますが、P900、N900では正常に 動作しているので困っています。 The primitives require texture settingはどのようなミスがあったときに出るエラーなのでしょうか?
>>290 画面を管理するクラスを作って、それぞれの画面はそのクラスを継承したものにする。
キー入力や描画処理は、現在表示中の画面にイベントを転送するだけになる。
そうすると、唯一のキャンバスの全ての処理を例外補足しておけば、ほとんど全ての例外に対応できる。
クラスといっても項目数は多くないから、newしてもあまりメモリに負担はかけないし。
メニューみたいな選択画面は継承でいろいろなバリエーションを作れるし。
1回作れば、再利用も簡単。
ドラクエみたいな重なるメニューも実装しやすい。
298 :
デフォルトの名無しさん :04/06/01 15:33
>>297 iアプリの容量やパケット従量制を考えると
クラスの数を増やさないほうが良いと思われ
って、ちとケチくさい意見だったら失礼。
特に継承とか利用する設計だとどうしてもクラスが増えるし
最終的にマージしようとすると大変。
FOMAでパケ放題を見越せば、そんな設計はレガシーになるよ
>>298 クラスを使わずにコードが散乱したほうがトータルの容量が増える可能性もある。
クラスをまたがった重複コードは圧縮されないし。同じクラス内なら、同じコードが圧縮される。
効率の悪いフラグ処理で、無駄なコードが多くなることもあるし。というか、クラスを使わないで作られてるものはだいたいそうだ。
容量の問題があるなら、いったんクラスを使って整理した形で書いたものを、後で容量の問題が出てきたときにまとめていけばいい。
ダウンロードの話で言えば、結局30KBになるわけだし、画像の方が比較にならないくらい大きいので、そこが問題になることはない。
基本的に、クラスを使わない方がいい、という意見は、クラスを使った設計ができない人が、容量の問題をタテに自分を正当化するだけ、ということが多い気がする。
>>296 とりあえず、
Graphics3D#setPrimitiveTextureArray()
Graphics3D#setPrimitiveTexture()
によるテクスチャの設定を行っているかどうかを聞きたい。
Graphics3Dまわりのエミュレータの挙動はあちこち怪しげなので、lockするたびに
透視変換パラメータやらテクスチャ設定やらをやり直さないとうまく動かなかった
気がする。
>>297 >>298 容量制限があるので、クラスを分けるよりは、現在の状態を保持する変数を用意
して、その値を見てswitch()で分岐させとくのが楽でいいと思う。
>>300 クラスを使ったほうが綺麗に書ける場合は確かに多いけど、現時点ではまだ
容量制限がきついのも事実。
盲目的に「クラス使っちゃ駄目」ってのはナンセンスだけど、終盤で容量が
足りなくなったりしたら悲惨なんで、クラスの分け方にはかなり気を使うね。
100Kマンセー
漏れはこんな感じ ・10KBならクラスは2つだけ! ・30KBなら無闇にクラスを作らないように気を付ける ・100KBならオブジェクト指向でGO! 30KBじゃまだまだキツイよ 凄く小さなアプリしか作らないなら話は別だが
>>301 有難うございます。解決できました。
Graphics3D#setPrimitiveTextureArray()
をしていて
Graphics3D#setPrimitiveTexture()
をしていなかったのが原因でした。
クラス1つ増やすと無条件で数百バイト余計に食うからなあ。
>>288 ピンボールかぁ…
オレなら条件にもよるが、
¥1000ぐらいで作ってやっていいと思ってたが、
反応がないとこを見ると釣りか。
308 :
デフォルトの名無しさん :04/06/01 21:18
>>300 >基本的に、クラスを使わない方がいい、という意見は、クラスを使った設計ができない人が、容量の問題をタテに自分を正当化するだけ、ということが多い気がする。
↑この発言は、ちょっとひどいなぁ。
30KB制限ギリギリのアプリをオブジェクト指向バリバリで
設計したことある人ならこんなことはいえないよ。
あるクラスを継承して作った複数のクラスを容量収まらないから
1つにまとめる作業って結構大変だよ。
設計段階からある程度考慮したほうがよいと思うけどなあ。
まあオブジェクト指向を愛する人(自分も含む)は皆
クラスで美しく作りたいのが本音だけどね。
309 :
デフォルトの名無しさん :04/06/01 21:20
>>304 まぁ、処理内容にもよりますよね。
簡単なアプリだったらそれくらいですかねぇ。
>>308 そうだねぇ。
30kでもちょっとこったアプリだと、
classどころかmethodも展開したりするからねぇ。
オブジェクト指向以前の問題だったりして鬱
>>310 いや、*条件次第*ではひっくるめて¥1,000-でOKなのだがw
1000円だと、とりあえずピンポールの画面イメージまでなら作れるな
314 :
デフォルトの名無しさん :04/06/01 21:47
そーゆーことか
>>314 納期1分の仕事って業界ではいくらが相場なんだ?
>>316 たぶん、普通はいくら提示されても受けない。
ネタにマジレス過去悪いな
>>304 大きいアプリ作るなら、終盤でのちょっとした変更とか修正が、フラグ処理でやってるとほんとにやりにくくなる。
新しいもの作らないなら別だけど、新しいものを試行錯誤しながら作るときには、少なくとも画面に関してはちゃんとクラス分けして、だいたい落ち着いてから統合していく。
今日中っていうのはあった
>>294 >>297 参考になります。たしかにやり方は色々ですよね。
あとから書き直すのは大変だけど色々なやり方を経験してみます。
>>295 ゲーム本編は別の言語で書いたものをそのまま移植
というより焼き直しなので割と楽観的に考えています。
むしろ今はゲーム本編に手を出す以前の基本を勉強中で。
納期の無い道楽ですが本業が忙しくて時間が作れない〜
貴重な自由時間だ、さっさと続きを作らなくては
ありがとうございました。
322 :
デフォルトの名無しさん :04/06/02 07:16
>>304 俺は、仕事でやってるんで、クラスは最低限しか作らない。
仕様変更が多いく、プログラムが分かっていない企画が
無茶なことをよく言ってくるので、ギリギリのサイズになることが多い。
俺は仕事でやってるんで、なるべくクラスを使う。 仕様変更が多いく、プログラムが分かっていない企画が 無茶なことをよく言ってくるので、変更しやすい状態にしておく。 30KB制限の場合、32KBを越えたあたりから、最適化にとりくむ。 とりあえず35KB程度なら、オブファスケータ使えば30KB程度におさまるし。
まとめると、 「プログラムの構造は人それぞれだが、やっぱ30KBの制限は厳しいね」 って事か 100KBフルに使い切ったアプリってどの位入るんだろうな 900i専用アプリってやった事無いからわからん
やっぱり基本は1画面1クラスですか? Commonクラス(共通部分用)とかはあまり作らない方がいいですかねぇ?
>>325 1画面1クラスにしたら、共通部分が基底クラスになるだろ。
>>325 サイズが収まって、期待どおりの動作をすれば
そんなのどーでもいい。
今、いろいろ試しているんだけど、サイズ小さくするならインナークラスより 独立したクラスにしたほうが良いのか… インナーもprivateよりpublicにしたほうが小さいし…
>>328 外側のクラス名の分、クラス名が長くなるからじゃネーノ?
zip圧縮だから、 似たコードが近所にくるように classやmethodの順番弄ったりすると縮むけど、 激しくマンドクセー
>>329 60バイトくらい大きくなるよ。そんなもんか?
全機種対応が凄く大変なので、 そろそろ503を切り捨てたいんだけど、 まだ使ってる人います?
>>332 504が出た瞬間に、すでに切り捨ててます。
あのさ、プロを無礼るのもいい加減にしとけよ。
無礼るって久しぶりに聞いた
>>336 「無礼」で「なめ」って読む。
「無礼る」って単語はないけど。
最終的にサイズ縮める必要があるとしても、そのための作業時間を 稼ぐために、携帯相手と言えども最低限のクラス化はして、 作業効率上げた方がトクというのが、漏れ的結論。 504と505で共通のアプリを作る場合にグラフィック以外のコードを 共通クラスに括りだしたり、機種の個別対応のための緩衝クラスを 設けたりするの、最初は忌避してたけど、試した限りではデメリットを メリットを上回ってる気がするしで、最近は恐れず普通にJava的プログラミング しちゃうようになったよ。 あんまり大量にクラスを持ち込まない限り、オビュファスケータかませば ほとんど気にならないレベルまで縮められるしね。 preverifyかけた時点で、速度的なオーバーヘッドもかなり解消されてると思う。 最後の一押しのためにクラスを解体する必要が出てくる事も多いけど、 それまでの作業が無駄になるわけじゃないし、まあいいかなと。 つか、その辺どうしても気になる向きには、Cのプリプロセッサを併用するって 手もあるしね。 実際、引数マクロが使えるだけでも凄い楽になる。 ただ、JavaBlenderとかで最適化をかける場合に、クラス階層が複雑だと、 変なバイトコードに変換されてしまう気がしていて、それが少し心配。 納品直前に突然動かなくなったりして困った事が、過去数度あった。 あと、JavaBlenderとjargの併用とかも問題みたい。 時々とんでもない縮み方をして、えええー!?と疑ったらコードの半分くらいが ばっさり消滅してたってことがあった。 漏れが夢見てたとかならいいんだけど…。
>>338 JavaBlenderってクラス融合するんだよね
チト怖いな
漏れはjarg(バイトコード最適化OFF)+ProGuardにしてる
有料のツールで良いのがあれば使ってみたいが‥
グラフィックは別モジュールでダウンロードさせて 馬鹿みたいに広くなってるスクラッチパッドに保存して使うようにしたら、 容量的に意識して変な最適化をすることもなく、Javaとして(らしく?)開発できると 感じているんだけど、まだまだ甘ちゃんですか。
>>340 それは既に常套手段だと思うんだけど、504を捨ててくれるなという
案件も、まだまだ多いからねぇ…。
職業倫理的にトータルの通信料も抑えてあげたいというのもある。
それにjar30KBの制限は504も505も変わらないし。
手を抜いた書き方すると簡単に足が出るし、詰め込もうと思えば
相当な量を入れられるしで、中々面白いラインではあるんだけど、
今後の携帯事情を考えれば、確かに無駄な苦労ではあるよな(w
>>340 それは当たり前の・・・。
文字列とか3Dデータとか圧縮の効くデータはZIP圧縮させておく、とかなら、ちょっとアマちゃんじゃないかも。
ジダイハソコマデΣΣ(゚д゚lll)
考えてみれば、505でZIP解凍できて感激してたころから、もうすぐ1年半が経とうとしてるのか。 当たり前だな。_| ̄|○
みな、プリプロセッサとか使ってるの?
使ってます。
自作アプリのURL晒し合って各機種での動作確認をし合ったり ソース晒し合って改造し合ったり、 みたいなコミュニティってありますか?
プリプロセッサは使わないと話にならんだろう。 特に機種毎に別アプリを用意するプロでは。
eclipse 使うときはどうしてるんだ? プリプロセッサ
実際、各機種ごとのアプリを作ってるヒトデ、 eclipse使ってる人いる?
eclipseは使ってないなぁ。 ちまちまとMakefile書いてる。 モノによっては最後に手動でJBlender
jblenderって概算でどのくらい圧縮される? jargだと10%〜15%くらいは削れるんだけど、それに比べて激しく(・∀・)イイ?
>>355 ありがと
やれることなんて同じようなもんだから、効果も同じってことね
Panelのコンポーネントで用意されている機能でも Canvasで書いた方が容量節約になる?
Ant でやってる人っている?
Antでpreverifyとかができなくてあきらめたのは昔のはなしか。
俺は、プリプロセッサ VisualC++ のを使ってるなあ。 コマンドラインで。
>346 俺は #define だけ使ってるねぇ。 まあ #ifdef 使えば、機種ごとのアプリ作成も簡単だし、デバッグ埋め込みと取り外しも 簡単になるとは思うんだけど、他の奴がソース解析する時に見にくくなると思って使いづら いんだよねぇ。 ちなみにプリプロセッサは、ん・ぱか工房の人が本で紹介してた ppp.exe 使ってる。
>>342 -
>>345 そうですか。まだまだ甘ちゃんでしたね。
結局グラフィックを埋め込んでも30KBにはおさまってしまう程度の
ものしか作ったことがないです。すんません。
>>362 ああ、それは言えるな。
他人と言わず、自分でも見難くなってしまうのが辛いが、
ソース分けるよりはマシと思ってPP使ってしまう。
PP使うんなら、機種毎のとこは別ファイルにしている物をincludeすればよいんでないのか
includeはいいよね。 汎用メソッドとか全部別ファイルにしてあるよ
DoJa3.5でのDisplay.KEY_CLEARの使い方って 他のキー(たとえばKEY_1など)と違います? エミュだとKEY_1などはイメージ通りの反応なのですが KEY_CLEARがまったく反応してくれない。 DoJa 3.5 (APIリファレンス)には KEY_CLEAR [iアプリオプションAPI] と書いてあるのに DoJa 3.5 (オプションAPIリファレンス)にKEY_CLEARが書いてない。 うーん
PPはCPP32がオススメだな。 __LINE__でデバッグ表示させればExceptionの場所もすぐにわかるし、 インクルード元ファイルのファイル名と行数をコメントで埋め込んでくれるので 複数モジュールに分けてて開発できて楽チン也
>>368 KEY_CLEARの解説をよーく読みなよ。
・505iS以降の端末でのみ使用可能(無印505iでは使用不可)
・端末によってはそもそもクリアキーがないことがある
(Pが確かそうだよな)
特定の機種向けじゃなければ、機能を割り当てるべきではない。
エミュで反応しないのはご愛嬌だが(w
>>370 Borland C++ Compiler 5.5 に付属の PP だったような。
GNU CPP を cygwin で。
>>362 >>364 確かに。使いすぎはよくないみたい。
会社の Java しか知らない若い連中に iMona のソースを
見せたときの拒絶反応に驚いた。
「Javaしか知らない若い連中」ΣΣ(゚д゚lll)
いろいろ知ってるけどiMonaのソース見たときは驚いたわ これが携帯Javaの本気の書き方か、ってね
enumが使えるとイイヨ
>>377 static final int で定数定義すれば?
379 :
デフォルトの名無しさん :04/06/04 20:22
(>_<)
380 :
デフォルトの名無しさん :04/06/04 20:56
>>377 static finalを定数に置き換えてくれるツールもあるで。
>>371 機種依存というのは理解していたつもりなのですが
DoJa3.5のエミュは505iS以降の端末と同等のはずだ
と思い込んでいました。ご愛嬌ですかw
パケ代ケチらずに疑問に感じたら実機で試せということですね。
ありがとうございました。
382 :
デフォルトの名無しさん :04/06/04 23:20
>>381 お疲れ〜&がんがれ〜
Dojaは、Scratchpad4096k確保できないとかダメダメなんで
いろいろつらいな。
383 :
SH900i :04/06/05 16:15
SH900iのテストモードへの行きかたしってますか?
みんなstatic finalで満足しちゃってるのか・・・慣れって恐いなw
eclipseでやってるんだが、AppNameってどうやって設定すればいいのかわかりません。
388 :
デフォルトの名無しさん :04/06/06 00:54
>>386 Antのbuild.xmlに書くんじゃないの?
>>388 bin/*.jamが勝手に作られててAppNameとClassNameがなかったので
手書きしたらうまくいきますた。
Antは勉強してないのでサパーリ。ホントはこっちに書くのかな。
>>389 つーかさ、bin/*.jamが勝手に作られるってことは
Doja対応のプラグインつかってんでしょ。マニュアル読もうぜ。
マニュアルも読んでんだよ、うんこ野郎。 jamも毎回上書きされるんじゃないかって思ったんだよ、このウンコ。
まあ解決したなら良いじゃないか。
>>391 も尻拭くのを忘れんな。
俺みたいに尻からぬるぽが飛び出して自宅にウォシュレット取り付ける様な目には
遭いたくないだろう?
static final int で定数列記するの、普通に不便だよなあ。嵩張るし。
Java的では無いのかもしらんが、enumとか使わせてくれ!て感じだ。
だが、プリプロセッサの類いを噛ますとソースコードがJavaでもなんでも
なくなってしまうので、収まるなら大抵jargとかでの圧縮だけで済ませちゃってるよ。
温る過ぎ?
>>393 まぁ、それで収まるんだったら問題ないだろ
いまさらだが506iってDoJa3.0プロファイルなのね。とりあえずDとFは。 てっきり4.0になるのかと思ってた。900iの新しいやつらもiアプリ的には 従来と大差ないのかな
506は505から何も進化しとらんよ。 場つなぎで出すだけ。 DoCoMoは全員FOMAに移動して欲しいわけで、それのためのワンクッション。 2世代前は切り捨ての法則で、今後アプリ開発がQVGAだけになったら楽だなぁ。
シリーズ名が変わらないのにDoJaのメジャーバージョン変わったら混乱のもとだよ。 506がDoJa3.0なのは正解じゃないかな。 DoCoMoはDoJaのバージョン管理がちょっと変じゃないかと思う。 505iのDoJa3.0を基準に考えた場合、 505iSで一部追加や変更があったにもかかわらずDoJa3.0のまま。 これはDoJa3.1とすべきだったのでは。 そうすると900のDoJa3.5とかぶりそうになるけど、それは900でDoJa3.5としたのがおかしい。 900のAPI群は50xシリーズから大きく変わっているのにマイナーバージョン変えただけのDoJa3.5。 これこそDoJa4.0と名付けて欲しかった。
解像度がせめて320x320できることなら400x400になって欲しい とゆうのは無謀かw
>>397 ライブラリやさんじゃないからねぇ。
そこらへんのブランチとかのノウハウはないんだろう。
>>397 いやまったく同意<505iSはDoJa3.1とすべき
俺も getKeypadState(0); とかやっちゃって無印505で落ちるバグ
出してもーた・・・orz
解像度はしばらくこれで打ち止めなのかねえ。VGAとか言って欲しいけど。
絵描きとしても8x8とかの小さいドットで表現するよりも 16x16以上、24x24くらいの方が何かと表現しやすくない? もちろんものにもよるけど
性能だけあがってもなぁ。 開発単価あがってくれないとやってらんない。
>>405 労力に見合う報酬が上乗せされていくと思うか?
409 :
デフォルトの名無しさん :04/06/07 22:43
ピンボール¥1,000-は、ちょっとふっかけ過ぎたかな… 遠足のおやつ制限より安くすべきだったか… orz
単に相場を知りたかっただけなんじゃないのか、と。 んで、だめだここじゃ参考にならん、と。
良くも悪くも皆努力して、安値安定しちゃったからなあ。 質もめちゃくちゃ上がってるし、ユーザ側も大分目が肥えてきてるし。 開発コストと実装させる成果のバランスが崩れかけてる昨今、 おまいら今後どうやって生き延びてく予定でございますですか?
ドラクエやらリッジレーサーが動く時代に、ゲーム屋じゃない企業がiアプリでゲームやっても敵うわけない。 iアプリのゲームで儲けようと思うのはあふぉ。
そこでエロアプリですよ。↓
やっぱエロしかないか… しかしドキュモが許さない罠
公式サイトには認められないとしても 勝手に作って売るのはアリじゃないの 売り上げ回収の問題はあるけど
Java質問・相談スレからきました 以前 mac で iappli を作ろうとしたら preverifier が無いので無理だと言われました 久しぶりに時間もできそうなので、再度トライしようと思ったんですが相変わらずな 状況なのでしょうか? なにか preverifier が無くてもなんとかなるのでしょうか? よろしくお願いします
金の回収はコンビニ決済業者に丸投げで。 諸費用が問題だが。。。
>>418 さっそくありがとうございます
なんか怪しい preveriifier でつね
とりあえずこれでトライしてみます
zentekの「既に業界のデファクト・スタンダードの地位を確立したi-JADE」がとても気になる。 どこの業界でデファクトスタンダードになってるんだろう・・・
503、504 あたりではお世話になったけどなあ・・・
公式エミュがでてから、ぜんぜん聞かなくなった。 お世話になった人は、やっぱ便利だったのかな。
前々から気になってたんですけど 公式エミュで文字出力するとき意図する位置より1ドットか2ドット下に でてしまうんですが、自分だけですかね? 実機だとちゃんとでるんですが
>>423 その下がり幅は機種によって違ってくるぞ
Font.getAscent()を座標計算に加味すれば吸収できる
(゜ロ゜)!なんとそうでしたか…全部直さなきゃ
>>424 ありがとうございました
426 :
デフォルトの名無しさん :04/06/12 00:02
リソースからデータを読み込むのですが、 ひとつのファイルにはまとめてありますが セパレータで区切られた1000個くらいのデータがあり 配列にオフセットを取得し必要になったら本体を読み込む、 という仕様を考えています。 この方法だと、アプリ起動中はストリームが開きっぱなしになるのですが 何か問題はあるでしょうか? 用が済んだらストリームは閉じなければならない、 という意識があって、この仕様自体気持ち悪いのですが これ以外の方法が思いつかなくて・・・。 経験豊富な皆様方、どうかご助言よろしくお願いいたします。
オフセット取得したらストリーム閉じればいいじゃん 何悩んでたんだおれはアホだスンマセン忘れてくだされ
がんがれ
>>420 もう言ったもん勝ちだな。
生暖かく見守ってやろうぜ。
> 既に業界のデファクト・スタンダードの地位を確立した 過去形だしウソではないかも。
最初に自分で「カリスマ」って言っちゃってメディアでもカリスマ扱いされたら それはもう社会的にカリスマとして認められたのと同等、みたいなね。 ところで、delphiのseekに相当するメソッドは無いのでしょうか? skipで前には進めるけど巻き戻しが出来なくて。 もしかして、skip(-20);で20バイト戻ったりするのかな。試してみよ。 現在位置を得るメソッドも無さそうだなあ。 これも自分で頭からカウントしていくしかないのかな。
>>423 SHだと上にずれるよね。
SOは上下は気にならないけど右に寄る。
私は、座標や中央寄せなど、表示させたい位置が はっきりと分かっている場合は Font.getHeight() Font.stringWidth() を使って対処してます。。。
アセント値使ってもズレるのか? 漏れは文字の表示位置で困った事無いんだが…
同じアプリを動かして比較してみたが SH900iはF900iより遅いっぽい。 処理によってはかなりの差が出た 操作性や画面の大きさならSHなのにな
質問です。 N900iとP900iでアプリダウンロード直後はアプリから通信できるのですが、 いったんアプリを終了して再度起動すると通信できなくなってしまいます。 どなたか何が原因かわかりませんでしょうか。 SH900iだと大丈夫です。
ちなみにN505iとD505iも大丈夫でした。
438 :
デフォルトの名無しさん :04/06/13 13:58
>>438 ありがとうございます。
明日会社で試してみます。
>>436 うむ、初回ダウンロード一発目は通信できるが、
その後メモリ不足で通信失敗ってのは
sp4096で解決するバグのような気がする。
外出だが、検証報告は有益だと思うんで
動作確認したら報告きぼん
結果報告です。 P900iではSPsize=409600にすることでうまくいきました。 N900iでの結果はしばらくお待ちください。 SPsizeと実行時のヒープメモリーは全く関係ないと思っておりましたので、 この掲示板を見なければ一生わからなかったかもしれません。 ありがとうございました。
N900とP900は、両方Pの会社が作ったものだから結果は同じと思われ
にしても、アプリ1つで確実に400KB+αですか。 PとNのアプリ保存用メモリってどれくらいなん? 最大保存件数10件ってあるから5MB?
11月かよ。
>>442 オレの書いたプログラムはNでもPでも、SPSizeで409600指定しないで例外出なかったからなぁ
なんかプログラミング方法に問題あるんじゃねぇの?
>>446 お前、Pの技術力と、Nの糞味噌業界鼻つまみもの独自仕様だらけ解像度独自ふざけんな技術を見れば、
勘違いしようがないだろうが…
>>447 通信やJPEG読み込みの前にどれくらいメモリーを使うかが鍵。
>>447 SPSizeが実行時のメモリーに影響するのが
そもそもおかしいと思われ。本来全く無関係であるべき。
>>449 それはネットアクセス前にgcを走らせても?
>>451 それで解決するなら、NP900は糞だなんて言われないよw
わけわからずメモリーオーバー
URL履歴一覧で左右キーでスクロールできたり、 URL履歴をそのまま編集できるすばらしいインターフェイスまわりを見るにP様では?
457 :
デフォルトの名無しさん :04/06/14 23:02
>>451 449ではないんだけど
gcコールしても使用中のメモリは解放されないのでNG
自分のアプリでこの現象が発生したのは
大量の画像データ(100KB弱)をImageオブジェクトとして生成した後に
Connector.openを使用した時で、例外(NO RESOURCE)が発生した。
ちなみにアプリサイズは30KB
ナショナル900とパナソニック900ってことですね?
>>442 報告乙カレイヤー
まぁ、業界人ならN・Pどっちがソフト担当してるか知ってる罠
直す気が無い糞メーカーは、4096k上等!だろうから
それに答えてあげるのがプログラマの勤めだろうねw
念のためN900iでも検証したところ、正常に動作しました。 以上、報告まで。
461 :
デフォルトの名無しさん :04/06/15 12:57
F900iでHTMLLayoutを使ったアプリがうまく動かないと報告うけたんですが、なんか情報あります?
質問ここでよろしいでしょうか? C3DMathのメッソドがどうにもうまく使えないので苦労してます。 固定小数点の扱い方が間違ってるかと思うのですが 自分では解決できなくなってしまいました たとえば5の3乗の計算だと int beki = 3; int buf = 5; int ret; buf <<= 16; beki <<= 16; ret = C3DMath.pow(buf, beki); ret >>= 16 と考えたんですがpowでRuntimeExceptionが出てしまいます どなたか識者の方アドバイスいただけたら幸いです
つかえんやつだ。
465 :
デフォルトの名無しさん :04/06/15 18:00
>>462 晒しますので、よろしくお願い致します。
HTMLLayout HTML = new HTMLLayout();
p_menu = new Panel();
lb_1 = new ListBox( ListBox.CHOICE, 2 );
lb_1.append( "Foo" );
lb_1.append( "Bar" );
b_menu_submit = new Button( "Hoge" );
lbl= new Label( " HogeHoge " );
int lbllength = lbl.getWidth();
p_menu.setLayoutManager( HTML );
p_menu.setBackground( Graphics.getColorOfRGB( 204, 204, 204 ) );
HTML.begin( HTMLLayout.CENTER );
HTML.begin( HTMLLayout.P );
//続く・・・
466 :
デフォルトの名無しさん :04/06/15 18:01
il_logo = new ImageLabel( LoadImage( "logo.gif" ) ); p_menu.add( lbl = new Label( " " ) ); lbl.setBackground( Graphics.getColorOfRGB( 204, 204, 204 ) ); HTML.br(); p_menu.add( il_logo ); HTML.end(); HTML.br(); HTML.begin( HTMLLayout.P ); p_menu.add( lbl = new Label( "Text1" ) ); lbl.setBackground( Graphics.getColorOfRGB( 204, 204, 204 ) ); HTML.br(); p_menu.add( lbl = new Label( "Text2" ) ); lbl.setBackground( Graphics.getColorOfRGB( 204, 204, 204 ) ); HTML.br(); p_menu.add( lb_1 ); HTML.br(); p_menu.add( b_menu_submit ); HTML.end(); HTML.end();
465, 466に晒したソースをF900iで動作させると、左上にゴチャっと表示されてしまうようなのです。 HTMLレイアウトがぜんぜん利いていないのかな、という感じです。
他では?
三菱の特定の機種しかj3dとj3d2のクラスを使えないってことなのかな…
ゴルフのスコアシートアプリを作ったのですが、 SH900i,SH505iで「ソフトに誤りがあります」ダウンロードできません・・・。 N900i,P900i,P505iSでは問題なくダウンロードできて動いています。 操作上でエラー起こるならわかりますが、 ダウンロードの段階で弾かれるのは何故でしょうか? アプリのサイズは15kbでスクラッチパッドは100kbでhttpを使用します。 ダウンロード直前に確認できるソフト情報にLaunchByAppキーを設定していないのに 「アプリからの起動」が「あり」になってるのが気になるのですが・・・。 ダウンロードしたアプリすべて「アプリからの起動」が「あり」にもなってるし・・・。 どなたか解決策が分かりますでしょうか?
>>470 とりあえず、jamの内容晒してもらわんとなんとも言えん。
TargetDevice設定してたとかいうくだらんオチじゃないよね?
>>469 j3d2は三菱だけだねー。
j3dは全機種使えるはず。
>>471 情報が足りなくてすみません。jam晒します。
UseNetwork = http
MessageCode =
LaunchByBrowser =
TargetDevice =
GetSysInfo =
AllowPushBy =
PackageURL = GolfScore.jar
LaunchApp =
ConfigurationVer =
AppName = ゴルフスコア表
ProfileVer =
MyConcierge =
UseBrowser =
>続く
LaunchByMail = AppParam = IletPreserve = UseTelephone = LaunchByApp = TrustedAPID = AppVer = LastModified = Thu, 03 Jun 2004 17:14:02 AppClass = Main AccessUserInfo = GetUtn = LaunchAt = DrawArea = AppSize = 15132 SPsize = 102400 AppTrace = on 以上です。よろしくお願いします。
>TargetDevice = これはマズイんじゃないか? 他の項目にもいえることだけど、 指定無しの項目はもともと出力されないハズでは?
TargetDevice = ProfileVer = これら2つとも指定がないのがまずいのでは。 Javaアプリケーションマネージャが、このアプリがその携帯電話で 実行できるものなのかどうか判別できない。
>>472 ありがとうございます
j3d2駄目なんですね…
j3dでまかなって動かせました
javaもiアプリもはじめて触ったんで無茶苦茶な質問だったかもしれません
失礼しました。
>>475 >>476 アドバイスありがとうございます。
TargetDevice = all900i,all505i
ProfileVer = DoJa-3.0
に設定してだめだったので、
TargetDevice = SH900i
ProfileVer = DoJa-3.5
を指定してみましたが、ダウンロードできませんでした。
今まで20個くらいアプリを作っていて、この2つの項目を指定したことがなく、
問題なく動いていました。
SH900iを使用したのは初めてですが、SH505iでは動作確認していました。
>他の項目にもいえることだけど、
>指定無しの項目はもともと出力されないハズでは?
このjam情報は直接ブラウザからアクセスしたものをコピペしました。
携帯側では表示されないという認識でよろしかったですか?
何度もすみませんが、分かりましたらアドバイスをお願いします。
追記します。 >SH900iを使用したのは初めてですが、SH505iでは動作確認していました。 は今まで作った20個くらいのアプリでという意味です。
>>478 DojaのADF設定で吐かれるjamには、
パラメータを指定しなかった項目は出力されなかったと思う。
AppVer =
とかいう行は生成されないってこと。
このjamってどうやって生成したんだ?
>>480 eclipse + DoJa3.5のエミュ(DoCoMo配布)で生成しました。
とりあえず、値を指定してない項目を削除てみたら
>>478 =470
>TargetDevice = all900i,all505i
この書き方が間違っている。末尾に「i」を付けてはいけない。
TargetDevice = all900,all505
ProfileVer = DoJa-3.0
としてみて。
それから
>>475 氏
>>480 氏がいうように、値を指定しないキーはjamファイルに書かない。
DoCoMo配布のエミュレータでは書き出されないしね。
ごめん。 iアプリコンテンツ開発ガイド 詳細編 読んだら TargetDevice と ProfileVer はオプショナルキー(指定しなくてもいいキー)だった。 変にこだわったこと書いて混乱させてスマヌ。
>>476 =484
とんでもないです、アドバイス感謝しております。
これが原因でないとすると、振り出しに戻りますね。
ダウンロードできるアプリと出来ないアプリの違いをもう一度確認してみます。
何か分かりましたら、レスします。
ありがとうございました。
>>485 ついでに言っとくと、
頻度は稀だと思うが、
jamの取得時に通信エラーしたりすると
「ソフトに誤りがあります」になることがあったと思う。
>>466 まず、なんでbegin(CENTER)して、すぐにbegin(P)してるの?
意味ないじゃん。
そういえば、imodeのHTMLのDTDって きちんと定義してる資料とか知らないか? docomoの資料には w3cのようなまともなものが見当たらなかったんだけど
すいません一つ質問なのですが、 void exe(){ String fName[]; Name = new String[11]; Name[0] = "Moon:"; 〜 Name[10] = "Star:"; dispName(); } void disp() { for (i=0;i<=10;i++){ g.drawString(Name[i],120,120); } return; } この時exe()内からdisp()に行った時にexe()内の配列を参照できなくて困っています 参照できる方法はあるでしょうか? exe()内で大量に配列を定義して必要に応じて取り出したいと思っているので
プログラミングの基本を勉強し直した方がいいよ。 void exe(){}内で宣言したString fName[];はexe()内でのみ参照可能。 void disp(){}からも参照したいなら、void exe(){}の外で宣言するか void disp(){}へ引数で渡さないとだめ。 それから、ソース貼るときはコピペでな。 >String fName[]; >Name = new String[11]; とか、 >dispName(); >void disp() { とか、素で間違えてるのか書き込み時に書き間違えてるのかわからんよ。
釣りだろ?
>>483 不要な項目をjamから消してみましたがダメでした・・・。
とりあえずご報告まで。
>>486 情報ありがとうございます。
通信エラーが起きてはいなそうですが、その可能性も追ってみます。
>>492 レスありがとうございます とても恥ずかしい質問をしたみたいで、すみませんでした 初心者向けの本を買って勉強します ソースは文で説明が出来そうになかったので……以後気を付けます
>>495 変数スコープは外部から参照されないからいいのであって、
参照したほうがいいものは同一クラスのトップで宣言されるべきだ。
勉強初めたばかりで大変だと思うがガンガレ!
敷居は高いかもしれんが、
懇切丁寧に教えてくれた492氏のように
なにげにこのスレは親切だと思う。
初心者であります。Cでプログラムを組んだりは少しできると思います。 iアプリの製作をしてますが、 いろんなところで調べても普通のjavaは解説してありますが、 iアプリでの場合とは違うため適応できません。なので、ここに来ました。 すべて同じパッケージの直下にあり、 ソースファイルはパッケージ化(1行目 package SameFile;)しているものとして、 メインのソースファイルと、 それ以外にクラスを分割したソースファイルが複数あるとします。 メインのソースファイル(例:GameSelect.java) クラス分けされたソースファイル(例:WalkGame.java,JumpGame.java,WaterGame.java) この場合、起動時にGameSelect.javaを実行し、選択画面からWalkGame.javaやJumpGame.javaを起動したいのです。 また、Softkey2をGameSelect.javaに戻るボタンとして、 単純にGameSelect.javaの中でWalkGameのクラス、その他のインスタンスを生成して、 processEventで1keyはWalkGame、2keyはJumpGameに飛ぶよう(各クラスを呼び出す)設定したつもりなのですが、 1回目はちゃんと表示されますが、そこからSoftkey2を押して選択画面に戻りもう一度同じゲームを選択した場合、画面の切り替えが行われません。 しかし、Softkeyに設定している文字は、GameSelectの時の文字とWalkGameを選択した時の文字では、変化しています。 ということは、WalkGameのコンストラクタしか読まれていないことになります。 そこで、コンストラクタだけではなく、WalkGame.java全体を実行できるようにしたいのですが、 どうすればいいかわかりません。ご教授くださいませ。 あと、わかりにくく、見にくい内容でごめんなさい。
書き忘れていましたがソースファイルは全部Canvasです。 開発は、 iαppliTool for DoJa-3.5(FOMA)+そこいらにあるeditor Eclipseはありますが、ノートパソコンなので処理が遅くなるためeditorを使ってます。 ちなみに、サクラエディタってのを使ってます。
>>494 AppSize合ってないとかそんなことはないよな
>>498 >書き忘れていましたがソースファイルは全部Canvasです。
???
とりあえず、Display#setCurrent() とかちゃんとやってる?
あとは、基本的な作りがアプリ向きじゃないんじゃないかなぁ。
Canvas派生クラスは1個にしたほうが・・・
eclipse+iαppliTool for DoJaでやってる人、 コードアシストってちゃんと動きます??
[質問] 1byteだけ通信した場合でも、1パケット分の通信費掛かりますか? それとも累計で128byteになった時に1パケット分の通信とみなされますか?
503 :
デフォルトの名無しさん :04/06/18 10:02
ゲームのリプレイを記録したくてその方法を考えています。 記録したいのはカーソルの上下左右が押下された順番です。 byte変数を4個用意するやり方だと 1000アクションで1KBもの容量を消費してしまいます。 ビットで記録すれば、上(00)、下(01)、左(10)、右(11)、と 4アクション記録できるので1000アクションで250byteと 容量を節約できるのですが、スマートなコードが思いかなくて。 おそらく「そういう時はこう書け」的な定石があるような気がするのですが いかがなものでしょうか?達人の方には幼稚な悩みかもしれませんが よろしくお願いいたします。
>>502 累計で128byteに満たない分が
来月の電話代に繰り越されるとは
考えにくいのだが
実際はどうなんだろう。
たぶん1byteだろうが何だろうが
1回の通信で128byte未満なら
1パケットとして扱われる気がする。
5秒で切っても10円玉は戻ってこない
>>500 メインのソースファイル(GameSelect.java)のprocessEvent内で
Keyの1を押した場合
Display.setCurrent(GameSelect.walkgame);
でWalkGameを実行しています。
逆にWalkGame.javaのファイルのprocessEvent内で
Softkey2を押した場合
Display.setCurrent(GameSelect.select);
を表示しています。
selectはGameSelect.java内にあるCanvasのクラスです。
この辺で私が変な記述をしていると思うのですが、
当初の思惑通りに動かしたければ、これをどのように変えればいいのかがわかりません。
おそらく、一つのソースファイルないで分岐させまくって作ればできるのかもしれませんが、
それでは、ソースが長くなりすぎるので分けて作りたいのです。
>あとは、基本的な作りがアプリ向きじゃないんじゃないかなぁ。
だとすると、基本的な作りを変えるしかなさそうですね。
いい方法があれば、よろしくお願いします。
追記なんですが、
paint()内からジャンプして、
外部(同一ソースないでも別のソースファイルでも)で描画処理を行うことは可能でしょうか?
これも、paint()内が膨大になりすぎるので、分割したいのですが、よい方法があればお願いします。
>それでは、ソースが長くなりすぎるので分けて作りたいのです。 分けない方がいいよ
508 :
デフォルトの名無しさん :04/06/18 13:58
>>501 コードアシストってオブジェクト名を打ち込むと
そのメンバが表示されて入力ラクチンになるやつのこと?
それならちゃんと出るよ。ちがったらスマソ
ダウンロードできました!!! 詳しい原因はいまだ不明ですが、できる時とできない時の差がある程度分かりました。 jamに記したアプリの名前で結果が変わりました。 ↓検証結果 ゴルフスコア表× ゴルフスコア表です× ゴルフスコア紙○ ゴルフ表スコア○ ゴルフスコア表○ ごるふすこあ表○ 表ゴルフスコア○ ゴルフスコアひょう○ ゴルフスコア○ ゴルフ表○ ゴルフhyou○ ゴルフスコアhyou○ 「ゴルフスコア表」と「ゴルフスコア紙」の違いはよく分かりません・・・。 他のアプリに「ゴルフスコア表」と名前をつけてもダウンロードできませんでした。 お時間のあるかたは試してみてください。意味不明ですが・・・。
文字コードが一致してないとかはない?
ああ。アプリの名前ね。 文字によってダメだよ。 表は文字コードの2バイト目が'\'。 DBなんかでも問題になるSJISの鬼門系文字だね。 おそらく 「ゴルフスコア表」 これは前半が半角カタカナなので2バイト文字と誤認され ゴ ルフ スコ ア0x95 0x5C と分解され、'\'がアプリ名に混ざっているのでエラー。 「ゴルフスコア表です」も同様。 「ゴルフ表」は運がいいことに半角文字が偶数個だったので ゴ ルフ 表 と判断され、'\'が含まれていると誤認されなかった。
ああ、補足 0x5C = '\'ね またF2102Vなどの旧Fフォーマも、アプリの日本語名でDLエラーを起こしやすい。 気をつけたほうがいい。
513 :
デフォルトの名無しさん :04/06/18 14:55
>>497 よくわからんから下のソース参考にして
import com.nttdocomo.ui.*;
public class Sample extends IApplication {
public void start() {
GameSelect gs = new GameSelect();
Display.setCurrent( gs );
gs.start();
}
}
>続く
class GameSelect extends Canvas { Game walkGame = new Game( this, "WalkGame" ); Game jumpGame = new Game( this, "JumpGame" ); public GameSelect() { } public void start() { setSoftLabel( Frame.SOFT_KEY_1, "WALK" ); setSoftLabel( Frame.SOFT_KEY_2, "JUMP" ); } public void paint( Graphics g ) { g.drawString( "GameSelect",0,10 ); } public void processEvent( int nType, int nParm ) { if( nType == Display.KEY_PRESSED_EVENT ) { switch ( nParm ) { case Display.KEY_SOFT1: Display.setCurrent( walkGame ); walkGame.start(); break; case Display.KEY_SOFT2: Display.setCurrent( jumpGame ); jumpGame.start(); break; } } } } >続く
class Game extends Canvas { GameSelect gs = null; String gameName = ""; public Game( GameSelect obj, String name ) { gs = obj; gameName = name; } public void start() { setSoftLabel( Frame.SOFT_KEY_2, "SELECT" ); } public void paint( Graphics g ) { g.drawString( gameName,0,10 ); } public void processEvent( int nType, int nParm ) { if( nType == Display.KEY_PRESSED_EVENT ) { switch ( nParm ) { case Display.KEY_SOFT2: Display.setCurrent( gs ); break; } } } } おわり
>>511 今後名前の付け方も気をつけてアプリ作ります。
ありがとうございました!
>>511 また信じられんような問題があるなあ……。
JAMファイルはSJISで書けゆーといて、そのSJISで誤認識されたらたまらんがな。
医と表はダメっぽい
饅頭怖い問題かよ
>>508 そう、それです。
Eclipse2.1.2+DoJaプラグイン(ドコモ)3.5なんですが、
補完もされない(候補も出ない)しJavaDoc添付によるホバー表示もできないんです。。
よかったら、環境やバージョンを教えてもらえますか?
>>501 環境ですが
Eclipse2.1.2 + DoJa2.0プラグインでした。なので
改めてDoJa3.5入れて試してみましたが
コードアシストしてくれますよ。
>>507 513さんのプログラムも分けずに書かれているので、
このプログラムを参考に作ろうと思いますので、
507さんの言うとおり、分けずに作ってみることにします。
>>513 丁寧にプログラムまで書いていただいてありがとうございます。
ファイル(クラス)分割はやめて、
地味に一つのソースファイル内で作っていきます。ありがとうございました。
さすがにそれくらいドコモでも試験してると信じたいが。。
再現もなにも、ばりばりうちの会社での「リリースチェック項目」に含まれてるよw
530 :
デフォルトの名無しさん :04/06/19 12:00
>>502 ドコモのサイトに
パケットとは
課金するデータ量の単位のことです。
1パケット(=128バイト)ごとに0.3円(税込0.315円)の課金となり、
パケット通信料は1ヵ月の総パケット数から算出しています。
って書いてあるから、月が変わらない限りは1byteのパケット通信128回で1パケットと思われ。
>>530 うんにゃ。
パケットとは通信の箱の単位。
1byteでも1パケットという箱に入れてデータを送る。
>>530 パケット通信について勉強してください。
ナルホド
アプリ名に「時刻表」って出来ない
>>534 できると思われ。
「Super時刻表」はだめだと思われ。
パケット通信なんていうものは存在しない ていうかどんな通信でもそういうことやっているだけのこと ただ、時間でお金取るのかデータ量でお金取るかの選択に データでお金取る事に決めた で、どのデータ単位でとろうかとしたときに パケット単位で取ればいいじゃんってなった ちなみにH"は時間でお金取る
>>535 多分できると思われ
「スーパー時刻表」は無理と思われ
半角カナと英数で挙動が違うの?
0x80以上のため、いいかげんに作ってるSJIS読み取り機能だと、 二バイト文字と勘違いしてしまう。
>>534 試しもしないでウソ書くなよ。
SH505iで試してみたら、
○ 時刻表
○ ウ表
○ スコア表
× ゴルフスコア表
ちなみに、ダウンロード自体はできてるようだが、
ダウン終了して保存するときに、
「ソフトに誤りがあるため保存できません」
と蹴られる
やだなぁ。単純な法則性のない(ように見える)バグ。
文字列が短い時はOKなのか 法則が良くわからん… 教えてエロイ人
おいおい、これで法則がわからんってのはちょっと勘が悪いぞ。
煽るより情報を出すべし
>>546 では、「ウ表」と、「スコア表」で大丈夫な理由は?
548 :
デフォルトの名無しさん :04/06/19 22:42
「表」って言う文字ってよく文字化けの例で見かけますよね
ボスケテエロイ人〜
半角文字が中途半端な対応で、濁点とか半濁点入るとダメだったりしてね。 該当機種持ってないから分からないや。
そもそも半角非対応とか 今までは運良く使えてただけだったり
携帯で使える、簡単なランダム生成プログラムはないでしょうか。 Randクラスだと、Seedが設定できないようで、ランダム性を含むゲームの リプレイファイルを作るのが大変なのです。
553 :
デフォルトの名無しさん :04/06/20 19:25
今日からi-appliをやってみようとして、javaSDK1.4.2をインストールしたのだが iαppli Development Kit for DoJa 3.5 Ver.1.03 が、インストールできません。 セットアップ実行直後のエラーは「Java(TM) 2 SDK Standard Edotionが見つかりません」です。 環境はWindowsXPSP1、JavaSDKインストール後に再起動したりしたのですがダメでした。 DoJa 3.5のサイトにJava1.3.1意外はダメとか書いてあったので、それが原因でしょうか。というかSunのサイトでJavaSDKの1.3.1が見つからなかったので、やってしまったのですが… 環境変数の設定などを行い、"Javac"などは動作するので、Java自体のインストールは問題ないと思うのです。 朝からハマってるのでどなたかご教授いただければ…
>>552 RandってRandomのこと?
コンストラクタの引数でseedは指定できるけど。
いったいドキュメント何みてるの?
>>553 java 1.3 でぐぐってみ。1.3系もちゃんと置いてあるよ。
>>554 なんと。大変失礼しました。
>>523 いろいろ試してみたんですが、相変わらず動かず困っています。
クラス名(com.nttdocomo.ui.Button等)はでるのですが、
メソッド名やメンバ、Javadocはでてこないんです。
そちらではすべて表示されていますか?
それと、J2se SDKのバージョンも関係あるのでしょうか。。
何だかよく分からない場合は、再度インストールを行う。 ただし、すべてデフォルトの設定で、だ。 それでうまくいく場合、推奨されないフォルダ名だったりするわけ。 あとDoJa使うだけなら、環境変数の設定とかは必要ないよ。
>>557 さん みなさん、
実に情けない話なのですが、
Eclipseのインストールパスに空白が入ってたというだけの話でした。。
ありがとうございました。
>>558 ヤッチャッター!
って、悪いのは
>>558 じゃないんだけど、この手のクロスプラットホーム開発
されてるアプリにはありがちだ罠。
ともあれ、動いてよかった。
今更かもしれないけどWindowsでケータイアプリ開発するなら 開発ツールのインストール先や開発中に使うフォルダで ・Program Files ・Documents and Settings (My Documents) これらのフォルダは使わないように注意ってことだな。
この手のは大抵デフォルトでC:直下に作りたがるので、 C:の下がゴチャゴチャになって気持ち悪い罠。 余計な苦労したくないなら、甘んじて受け入れるしかないが。 そしてスレ違いhage
562 :
デフォルトの名無しさん :04/06/21 11:26
はじめまして。 スクラッチパットに書き込んだ文字列を 取得するには、どうしたらいいのでしょうか? 何故か文字化けするのですが・・・ 誰か教えて下さい。お願いします。
さいきんやっちゃったのはあれだね。 IBMのJ2ME開発環境(Eclipseベース)使ってて Eclipse自体は環境変数CLASSPATH無視するからって 気にしてなかったらなぜかフリーズ頻発。 ワークベンチから呼ばれるツールがCLASSPATH 見てたよ... orz. 話戻すとEclipse自体は↑の開発環境等IBMの 商用版がc:/Program Files/IBM/以下にインストール される都合上空白に関しては開発段階から必ずチ ェックされるけどその他URLエンコードが必要な パス名に関しては保証されてない。個々のプラグイン に関しては正しくEclipseAPIを使っていれば 問題になることはないんだけど、Docomoは やっちゃったんだろうな。
>>562 書き込んでいるところと、読み込んでいるところのソース張ってごらん
すいません、今しがたできました・・・。 .readChar()で一文字ずつ読もうとしたのが駄目だったらしく、 .readLine()で1行づつ読むとできました。 お騒がせしました。
566 :
デフォルトの名無しさん :04/06/22 00:26
UTF-8の文字コードを読み込みたいのですが Encoding UTF_8 not foundとなってしまいます。 byte[] bytBuff = {(byte)0xE3,(byte)0x81,(byte)0x82,(byte)0xE3,(byte)0x81,(byte)0x84,(byte)0xE3,(byte)0x81,(byte)0x86,(byte)0xE3,(byte)0x81,(byte)0x88,(byte)0xE3,(byte)0x81,(byte)0x8A}; try { System.out.println(new String(bytBuff, "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } 開発ガイドにはOutputStreamWriterでUnicodeも 扱えそうに書いてありますが使い方がわかりません。 バイト配列からも使えますか?
567 :
デフォルトの名無しさん :04/06/22 00:40
>>566 UTF-8じゃないUnicodeであるに一票。
>>566 ぱっと見、ソース中でUTF-8ってなってるのに
メッセージ中でUTF_8になってるのがすげー気になる。
569 :
デフォルトの名無しさん :04/06/22 13:22
F2051でおかしな現象に遭遇しました。 1.アプリをダウンロードするURLの書かれたメールを受信 2.メール文中のURLをクリックしてジャンプ先でアプリをダウンロード 3.ダウンロード直後に起動 上の方法でアプリを起動すると「通信を許可しますか?」というダイアログの背景にメー ラー画面が表示されている状態でアプリが起動されるのですが、この状態でアプリが落ち る場合があるようです。 とはいえ、全てのアプリでそうなるわけではなく特定のアプリのみです。また、メーラー 画面が表示されていない状態で起動している限りは上記症状は発生しません。 メーラーにヒープを持っていかれてリソース展開に失敗しているのかな、などと勝手に想 像しているのですが、同じ状況に遭遇された方、いらっしゃいますか?
570 :
デフォルトの名無しさん :04/06/22 15:25
>>567 ということはUTF-8は読み込み不可能???
>>568 UTF-8というのはStringクラスで認識しているようで
その上でEncodingが見つからないといわれているので
(iアプリの)StringクラスではUTF-8は絶望的ですよね。。。
>>570 UTF-8 → UCS-2 の変換は単純だから実装しちゃいなよ
>>570 いや、DataInputStreamを開けば、ふつうに readUTF()で読めたような・・・
>>566 ・
http://java.sun.com/j2se/1.3/docs/api/java/lang/package-summary.html#charenc には、
> Every implementation of the Java platform is required to support the following character encodings.
> Consult the release documentation for your implementation to see if any other encodings are supported.
として UTF-8 が挙げられている。
・"UTF--8"などと書いてみると java.io.UnsupportedEncodingException: UTF--8 となり、
- → _ 変換などは行われていない。
ソース見たら "UTF_8" ってミスタイプしてるに50ペリカ
>>570 DataInput#readUTF で読み込めるのはその長さが前置されたUTF-8文字列だお
微妙にアンカーミスった鬱出汁脳
ちょっと試してみた。DoJa-3.0エミュレータ。
>>566 のソースを適当な手持ちのアプリのソースに貼り付けてコンパイル、実行。
ソースではnew String(bytBuff, "UTF-8")だがエラーメッセージは
java.io.UnsupportedEncodingException: Encoding UTF_8 not found
と出る。
ハイフンがアンダースコアにされてる。
つーか何故UTF-8?英数字がメインなのか? 漏れは基本的にSJISでやってるけど… 正確にはSJIS_iって事になるのかな(良く知らん)
さすがDoJaだ。UTF-8サポートが無くてもなんともないぜ! …マジカヨ
>>574 ,578
これはJ2SEの仕様。
CLDCでは最低限サポートすべきエンコーディングは実装依存だった覚えがある。
580 :
デフォルトの名無しさん :04/06/22 23:15
>>577 バイト配列で取得したXMLの一部を読みたいのですが
UTF-8が読めないと。。。
>>571 UCS-2へ変換しても今度はバイト配列の
UCS-2をどうやって読めばいいのかが???
>>572 >>574 ByteArrayInputStreamをDataInput#readUTFすると
java.io.EOFExceptionがでました。
>>579 マジっすか…。
>>580 UCS2にできちゃうんだったら、2バイトずつchar[]に入れればOKのはず。
javaのcharはUCS2なので。
商売に使えそうなので教えるのはもったいない気もしつつ、フォロー。
>>580 携帯用にカスタマイズしたkXML2を拾ってくればXMLパースできるよ。
俺んとこのテストプログラムではUTF-8も問題なく読めた。
詳しく試す気もないのでよくしらんが、 とりあえずShiftJISだったら問題ないんだろ?
確かに、どうせネットワーク越しにとってくるんだろうから、サーバサイドでSJISにしとくべきな気もするなw
586 :
デフォルトの名無しさん :04/06/23 01:21
間違っていたら申し訳ないけど
>>566 で言ってる
(byte)0xE3,(byte)0x81,(byte)0x82 = 「あ」
の場合、ビット列にすると
11100011,10000001,10000010
先頭が「1110xxxx」に一致するので「この文字は3バイトコードですよ」
ってことをDataInputSteam.readUTF()の説明に書いてあるだけのような。。。
自力でUNICODEに変換するのなら、先頭1バイトの上位4ビットを読んで
何バイトで構成される文字かを割り出してUTF-8のエンコーディングルールにのっとって
UNICODEに変換すればいいのかもしらんが、それで本当にできるか知らん。
ちなみにjavaのUTF8は確か4バイトコード(先頭が「1111xxxx」)に対応していなかったような
#UTFDataFormatExceptionがスローされるって書いてあるし
混乱させたらスイマセン
>>582 >>581 ちょっと今は試せないのであとでじっくり読んでみます。
ご助言どうもです。
>>583 実はkXML2をパーサに使ってます。
日本語が混ざったUTF-8って読めました?
仕様書ではSJISだけしか必須とされてないんじゃなかったか? あとは実装依存だったような。
>>587 kXML2のソースは若干いじってる。
InputStreamReaderは、エンコーディングを指定しなければ
UTF-8で読んでくれる。
とりあえずエミュレータ上ではそれで日本語読み込めてるよ。
実機で動かなかったら笑うしかないなw
>>589 マジ?DoJaのデフォルトエンコーディングはSJISだった気が…。
>>586 そういう意味だったら2バイトじゃなくて1バイトだろ。
「まず、2 バイトを読み込み、それを使って readUnsignedShort
メソッドとまったく同じ方法で符号なし 16 ビット整数を作成します。
この整数値は「UTF 長」と呼ばれ、読み込まれる追加のバイト数を表します。」
>>586 ちょっと補足。連続カキコ勘弁。
そもそも、原理的に、readUTF()で何バイト読まなきゃいけないかはヘッダに読み込むべき
バイト数がかかれてない限り決定不能だしね。
iアプリを作りたくて今日から始めたのですが、 環境はWindows2000Pro SP4で 1.Java2SDK1.3.1-11 2.Eclipse2.1.1(LanguagePack) 3.Doja3.0 とインストールしてDoja3.0のユーザーガイドPDFの「13.Eclipseの利用」の 「HelloWorld」をやってみたのですが、実行しようとすると 「com.nttdocomo.eclipse.DoJaBuildException: Fail to create C:\JAVA\eclipse\workspace\hello\bin\hello.jar」 とエラーが出てしまい実行が出来ません。これはなにを間違えると こうなってしまうのでしょうか? 自分では5,6回は見直し、最初からやり直しとかしているのですが エラーが出てしまいます。 Docaを使わずに、普通のJAVAアプリとして、やってみた時は実行できました。 Java環境は初めてなのですが、基本的なことを見落としているのでしょうか? 制作手順は、 1.新規−Dojaプロジェクト−プロジェクト名「hello」でプロジェクト制作 2.新規−クラス−パッケージ「hello」、名前「HelloWorld」でクラス制作 3.以下のコードを入力(コメントは削除) package hello; import com.nttdocomo.ui.*; public class HelloWorld extends IApplication { public void start() { System.out.println("Hello World"); } } 4.プロジェクト−Doja3.0設定−AppName「hello」、PackageURL「hello.jar」、AppClass「hello.HelloWorld」に設定 5.実行 → エラー
>>592 で、
「C:\JAVA\eclipse\workspace\hello\bin\hello.jar」
は存在してるの?
いえ、存在してません。そこには「hello.jam」が有るだけです。 「hello.jar」ってEclipseが作ってくれるファイルですよね?
J2SDKにパス通せ。
パスは、どのツールのどこで設定するのでしょうか? 探しても、判らないです...
コントロールパネルからシステムのプロパティを開いて 「詳細」タブの「環境変数」ボタンを押して 下のリストボックスにある「Path」ってやつの最後に C:\jdk1.3.1_11\bin(←デフォルトの場合)を追加する。 セミコロン区切りになってるので注意すること。
出来ました、ありがとうございます! Doja,Eclipseに設定するところがあると思い込んでいて 環境変数に追加とは、思いもつかなかったです。
>>590 ごめん、ちょっと勘違いしてた。
ソース調べてみるわ
>>590 スミマセン、自分が間違ってましたm(__)m
(byte)0xE3,(byte)0x81,(byte)0x82 = 「あ」
の前に「あ」の長さ3をあらわす2バイトをつけて
0x00,0x03,0xE3,0x81,0x82 としたらEOFExceptionも発生せずに
readUTF()でUTF8の「あ」が読めました。
なるへそ
601 :
デフォルトの名無しさん :04/06/24 23:40
最近勉強を始めたばかりなのですが、Panelについて質問があります。 Labelを生成する際にLabel.RIGHTのように位置指定が出来ると思うんですが、 なぜか真ん中に表示されてしまいます。 また、Labelを縦に2つ並べたいんですが、実際に配置すると横に配置されてしまいます。 そこで、よく分からないのですが、 HTMLLayout lm = new HTMLLayout(); setLayoutManager(lm); lm.begin(HTMLLayout.CENTER); Label lb = new Label("Hello World!1"); add(lb); lm.br(); Label lb2 = new Label("Hello World!2"); add(lb2); lm.end(); とやればうまく出来ました。 改行の仕方はこれであっているのでしょうか? 開発環境はDoja3.0です。
>>601 Label.RIGHTは、ラベル内の文字列の位置あわせで、画面中のラベルの位置じゃなかった覚えが。
改行はその通り。HTMLLayoutが楽っす。
>>602 どうもありがとうございます。
>Label.RIGHTは、ラベル内の文字列の位置あわせで、画面中のラベルの位置じゃなかった覚えが。
ということは、Labelはある一定範囲の枠があり、その中に文字列が入っているという事になりますよね?
だとすると、多少なりとも右側に文字列が格納されてもいいかなぁと思うんですが・・・
それと、もう一つ疑問なんですが、今度は左右にLabelを表示してみようかと思い、
HTMLLayout lm = new HTMLLayout();
setLayoutManager(lm);
lm.begin(HTMLLayout.LEFT);
Label lb = new Label("Hello World!1");
add(lb);
lm.end();
lm.begin(HTMLLayout.RIGHT);
Label lb2 = new Label("Hello World!2");
add(lb2);
lm.end();
のようにやったんですが、なぜかHello World!2が一行改行された状態で表示されてしまいます。
br()を指定していなくてもend()をすると勝手に改行されてしまうのでしょうか?
また、そうだとするとどのように対処したらよいのでしょうか?
自分で作ったiアプリを自分の携帯にダウンロードしたいのですが、 どこのサーバーにアップすればいいのですか?
>>604 インターネットから見れるとこならどこでも。
>>603 Labelは、自分でsetSizeしないと、文字がっぴったりおさまる大きさにしかならないよ。
左端と右端に、、っていうのは、
もう画面幅調べて、2つのラベルの幅の合計が画面幅-数ピクセルくらいになるように調整しないと辛いんじゃないかな。
ちなみに、HTMLLayoutのその方法じゃ全然だめ。
HTMLで、
<LEFT>
hoge
</LEFT>
<RIGHT>
piyo
</RIGHT>
って書くとhogeとpiyoの間で改行されるでしょ?
>>606 どうもありがとうございます。
setSizeは知りませんでした。
実際にサイズ指定して、Label.RIGHTとしたらちゃんと右側に表示されました。
また、LEFTタグとRIGHTタグは私の勉強不足で存在を知らなかったのですが、
改行されるのは仕様だったわけなんですね。
今回はラベルなので、左右の端に表示させるのは教えていただいた方法で出来そうですが、
これがボタンになったらボタンの間に空のラベルを入れて空白開けたりとかなり面倒ですね。
まだまだ勉強を始めたばかりですので、どんどん知識を深めていこうと思います。
本当にどうもありがとうございました。
>>605 マジっすか?
勝手にアップしちゃって、サーバー管理者にごらぁされませんか?
>>608 領域確保してもらってアカウントがあるなら、文句言われることはない。
>>608 何か問題あるのか?
釣りとしか思えんが…
>>610 CGIみたいなサーバーに影響を与えるものと混同してるのではないかと。
612 :
デフォルトの名無しさん :04/06/25 10:02
>>610-612 ありがとうございます。では、yahooなどで問題ないということですね?
>>613 鯖の利用規約を読んでください。
第三者に判断なんかできませんよ
APIリファレンスをみると、複数行の文字はラベルではなくテキストボックスを使うと書いてあるのですが、 テキストボックスの黒い枠を消す事は出来るのでしょうか? また、選択できないようにsetEnabled(false)とすると文字が薄くなってしまうのですが、 これもなんとか出来ないのでしょうか? Dojaのバージョンは3.0です
>>615 なんともなんねぇ。しかも機種で表示が違うからね。
>>616 そうですか、どうしようもないなら仕方ないですね。
どうもありがとうございました。
>>615 AnchorButtonをsetEnabled(false)で使うという手もあるが、
やっぱり薄くなる機種があったような。。
>>607 ああ、すまん。LEFTとRIGHTはタグじゃないね。
<p align=left>とか<div align=right>とかだね。
まあ、どっちにせよ、ブロック要素は改行されること位知っておいてくれ。。
あと、setSize()知らないってどういうことだ?APIリファレンスは見てるんだよね。
>>619 偶然起きてましたのでレスを・・・
setSize()は本当に凡ミスです。
親クラスのところ見てませんでした。
なぜかLabelやButtonはObjectクラスを継承してるもんだと思い込んでました。
お恥ずかしい限りです。
親クラスっていうな。
ある場所だけで起こるイベントを作りたいのですが F505iGPS以外で位置情報を取得するような方法は無いのでしょうか? ぐるなびとかの今いるエリア程度でも良いのですが。
openiエリアってサイト名ですよね?ぐるなびの名前を出したのが まずかったかも知れません。書き方が悪かったですね。 iアプリ上で現在地(エリア)を取り込んで 特定の場所(緯度経度)なら処理を行うアプリを作りたいのです。 ドコモの公式サイトからAPIを落として読んでいたのですが F505iGPS用のメソッドは見つかったのですが他が見つけられません。 いい方法があればどなたか教えてください。
>>624 GPS載ってない携帯なら物理的に不可能だろ。
常識ってもんないの?
626 :
デフォルトの名無しさん :04/06/26 16:23
携帯用にカスタマイズされたkXML2って、どこにあるかわかりますか?
>>625 公式サイトで、iモードイエローページとか、現在地によって出てくる場所かわるよね。
物理的には可能だよ。
電波を受信したアンテナ場所で物理的な場所はドコモには判るんだろうけど それをユーザーにも開放しているのかはシラネ
>>627-629 情報ありがとうございます。
公式サイトにしか提供されていない機能だったんですね。
私も627さんと同じく公式サイトをみて可能なんだなと
思い質問させて頂きました。
このコンセプトのアプリは出回ってないので上手く使えば
注目されるものが出来るかなぁと思ったのですが・・・。
また、別の案を練る事にします。
ありがとうございました。
>>630 GPS的な使い方でなくて構わないなら、ユーザがいる場所の周りにある適当な店の
電話番号なりを入れてもらって、そこから特定するという手もあるよ。
番号データベースをローカルに持つように設計すれば、電波が届かない場所でも(以下略
だからオープンiエリアを使えよと…
>>630 オープンiエリアは誰でも使える
でもアクセス先がドコモの鯖になるから一般のiアプリからは利用出来ない
前にも書き込みさせてもらったのですが、 iαppliTool for DoJa-3.5(FOMA)+サクラエディタで作ってはいるのですが、 端末で見た場合とPCで見た場合とでは、若干ずれが生じます。 どんなずれかといいますと CanvasでdrawStringとdrawRectをしただけのものです。 (具体的には、drawRectで四角を作り、その中に文字を描くということ) PCできれい四角のど真ん中に作ったつもりだったのですが、 端末で見ると、文字がやや右にずれます。 もしかしたら、フォントのサイズの違いかと思いますが、 端末はSH900iでdocomoのサイトではデフォルトは12となっています。 もちろんプログラム内では、フォントのサイズを変更したりはしていませんので、 デフォルトのフォントが呼ばれているはずですが・・・ iαppliTool for DoJa-3.5(FOMA)のデフォルトのフォントというのは、 サイズは「12」ではないのでしょうか? また、「12」でなかった場合、「12」に変更は可能でしょうか? よろしくお願いします。
> PCできれい四角の PCできれいに四角の
>>634 デフォルトサイズへの変更をしてみるとよい・・・ってその変更自体が分からないのか・・・
Font.getFont あたりで調べてみると良いかも。サイズは「数値」での指定ではなかったと思うけどね。
つまりデフォルトのフォントサイズは公称通り。どうしても違うとか気になるなら、実機でうまく
動くまで調整するしかない。どうせターゲット機種でしか使わないんだから。
レイアウトを決め打ちしたいだけなら文字列の長さ(文字数ではない)を取得して計算させてもイイ
stringWidth あたりを調べてちょ。
PCと実機でフォントが違うからね。実機でもそれぞれ内蔵フォントが違う。 フォントサイズが12ドットって決まってるなら、12ドットの枠内に収まるってだけ。 その12ドットの枠内で上下左右どちらに寄るかは機種依存ってことで。 Font#getAscent()とFont#getDescent()を取得して表示位置を微調整するように組めば どの機種でもねらった位置に表示できるようになると思うけど、そこまで厳密に調整する 必要のないアプリなら、表示位置については割り切ってしまおう。
さらに追加一言。 Font#getAscent()とFont#getDescent()じゃ左右の表示位置調整には利用できないね(^^;
>>636-639 返信ありがとうございます。
SH900iと特定の端末をだしたのはただ単に、私の持っている端末がそれなので、
それでしか、製作途中では確認できないためSH900iといいましたが、(ある程度できたら友達のも借りますが)
ttp://www.nttdocomo.co.jp/p_s/imode/spec/info.html ここを見る限り、Doja2.0以降はデフォルトフォントのサイズは12x12となっていますので、
12x12のサイズで作ればDoja2.0以降の端末であれば、
レイアウト的に大丈夫だと思っていましたがそれだけでは、ダメなんですね・・・
636さんが言っているのは、
getFont(0x00000000)のあたりのことですよね?カッコ内を0x70000200に変更したりですよね?
私が作ろうとしているアプリの場合、
フォントは12x12のデフォルトのフォントでかまわないのです。
(むしろフォントを変更した場合、機種により変更したフォントのサイズが一定でない可能性があるため、
レイアウトがぼろぼろになりそうなので・・・)
drawRectで作った枠にdrawStringの文字列が入らない場合は、
フォントを小さくするより、枠を大きくしようと思っています。
っで、悩んでいるのはそこではなくて、
iαppliTool for DoJa-3.5(FOMA)のエミュレータのデフォルトフォントサイズなのです。
たとえば、上記サイトにて、SH900iほかN506i等でもデフォルトフォントは12x12になっていますが、
iαppliTool for DoJa-3.5(FOMA)のデフォルトフォントはいくらなのかなと思いまして、、
そのサイズはどこかに記述されているのでしょうか?
それとも、レイアウト的にずれたように見えるのは、637さんのおっしゃるとおり、
上下左右の機種依存のためだけで、実際はエミュレータでもデフォルトフォントは12x12なのかな?
って書いてて思ったんですが、エミュレータで1文字だけstringWidthで数値を出せば分かりますね。
それと現段階では、文字をdrawRectの中にきれいに敷き詰めようと思った場合は、
drawRectに余裕をもたせて、stringWidthでセンター割りをしたほうがいいかもしれません(^^;)
もう少し、調べてみます。
ほかにアドバイスがあれば、お聞かせくださいませ。
12x12なのは全角文字
>>634 DoJa-3.5のエミュレータでもデフォルトフォントは12ドット。
drawRectで描く枠のサイズを指定するにあたってはFont#getBBoxWidth()
を使えばちょうどよい大きさが取得できるんじゃないかな。
デフォルトフォントサイズは12x12(TINY)で、これはDoJa3.0以降の仕様だから エミュでも実機でもこのサイズ 24x24(MEDIUM)も共通 でもSMALLは機種によってサイズが違うんだよね‥一番良いサイズなんだけど
644 :
デフォルトの名無しさん :04/06/28 19:46
505用iアプリ作ったんだけど、 N505iのユーザから、 「message=Bad dynamic heap objects found」 というエラーが表示されて落ちるという報告がきた。 誰か似たような症状に出会ったことある? ちなみに、他にもN505iユーザいるようだが このユーザ以外からは報告をもらったことがない。
drawpixels
>>644 ある人だけ反応すればいいのかもしれないが、放置されてると思われるのもなんなので。
ないな。
たまたまよろしくない挙動をしたんじゃなかろうか…。くらいしかわからんエラーメッセージだな。
きちんとオブジェクト管理してれば出なさそうなんだが。
>>644 何か、デバッグ目的でassertionかけた所に引っかかったって感じのメッセージだなw
648 :
デフォルトの名無しさん :04/06/29 14:58
J2MEUnit って使ってる人います?
ブラウザからのアプリ起動で、パラメータを渡したく
以下の様にやっているのですが、起動はするのですが
パラメータが上手くいきません。
何か足らない所がお分かりになる方がいましたら
ご教授頂けると非常に助かります
●HTML側
<OBJECT declare id="app" data="
http://www.test.com/app.jam " type="application/x-jam">
<PARAM NAME="p1" VALUE="test"></OBJECT>
<A ista="#app" href="err.htm">起動</A><br>
●アプリ側
public class testapp extends IApplication {
public void start(){
String p1 = this.getParameter("p1");
Dialog d = new Dialog(Dialog.DIALOG_INFO,"test");
d.setText("Param1 = "+p1);
d.show();
Display.setCurrent(new b());
}
}
>>649 で、ダイアログには何て表示されてるんだ?
PARAMタグで渡すのってアプレットの仕様じゃなかったっけ? iアプリならjamの中のAppParamに書くんだよ 詳しく調べたわけじゃないから間違ってたらスマソ
>>651 504以降ならブラウザからiアプリを起動する事が出来る
その時にパラメータが渡せる
んで、やり方は合っているように見えるな‥
>>650 ダイアログにはnullと表示されます。
>>652 自分的にも、ぬけてる所はないと思うだけに
まいってます…
>>649 DoJaのドキュメントと照らし合わせてみたけど、合ってるっぽいよなー。
PARAMタグの name と value が大文字だから・・・なんてことはないよな、
まさか・・・
だが、ドコモのやることだから、ありえないこともなさそうなのが怖い。
突然失礼します。
iアプリを制作中なのですが、DoJa3.5ではコンパイル成功後、実行も問題なく出来るのですが、
DoJa3.0を用いるとコンパイル成功後、実行出来ずに止まります。
エラーメッセージは下記の様に表示されます。
java.lang.ArrayIndexOutOfBoundsException
ソースはここです。
http://mirage.zive.net/upload/source/up0172.txt 何処に原因があるのかわからなく、書き込みしました。
どなたかご教授お願いします。
>>641-643 遅くなりましたが、フォントサイズの件ですが、
大変参考になりました。
皆様ありがとうございました。
たぶん、また調べてもわからないことがあれば聞きにくるかと思いますが、
よろしくお願いします。
>>655 > ArrayIndexOutOfBoundsException
=配列のインデックスが範囲外だよ例外
ということなので、そのあたり調べるように。
658 :
テスト料金がかかってかかって :04/06/30 09:30
スクラッチパッドにダウンロードしたgif画像を保存するテストをしたいのですが、 スタンドアロンPC1台でテスト可能な方法はあるのでしょうか?
>>658 (鯖から?)ダウンロードしたgif画像をスクラッチパッドに保存したいと思ってる。
PC1台でテスト可能な方法を教えてくれ。
藻前の意図するとこはこんな意味だよな。
オレはできるだけ実地に近い条件でテストしたほうがいいと思うので、
普通にエミュで鯖からダウンロードしてる。
パケ代とか発生しないから問題ないだろ?
スタンドアロンって書いてあるぞ。 私も何故スタンドアローンでやりたいかは理解できんが…。 そのマシンにapacheインストして、接続先をlocalhostでやればいいと思われ。
高レベルAPI で Button を作成後、そのボタンを消去する方法はあるのでしょうか?
button.setVisible(false);
>662さん ありがとうございます。 試してみます。
>>655 ソースざっと眺めただけだから何ともいえないけど、
初期化で
shougaibutu = new char[gw][gh];
ってしてるけど、
shougaibutu[bdlx/65536][bdly/65536]
はまったく問題ないのん?
665 :
デフォルトの名無しさん :04/06/30 22:47
>>655 よくわからんけど
gw = getWidth();// 横幅
gh = getHeight();// 縦幅
で取得される値が変化するなんてことはないかな。
shougaibutu = new char[gw][gh]; // 障害物の情報領域作成
for(int i = 0;i < gw;i++){
shougaibutu[i][0] = 1;
shougaibutu[0][i] = 1; // <=== ★★★
shougaibutu[gw-1][i] = 1;
shougaibutu[i][gh-1] = 1;
}
forの★2行目★,gw(横幅)がgh(高さ)を超えたらアウトですが
>>655 mycanvasのpaint()でgwとghを取得しているけど、
それだとstart()のshougaibutu初期化の時に、
ちゃんと値が取れていることは保証できないよ
paint()内の取得はやめてnew mycanvasした直後にgw = w_canvas.getWidth()してみそ
数人の方々アドバイス有り難う御座います。 早速試した後、報告致します。
>>667 できることなら今後の発展のために
どの行で例外が出ているかまで自分で追求することオススメ。
自分の持っていない端末上で発生するエラーなら別だけどね。
Eclipseのデバッガを使ってもよし、最悪各行にprint文を挿入して
どこまで表示されるかで判断してもよし。
発生する行とExceptionの種類がわかれば大抵エラーの原因は見えるYO。
それでも不明なエラーだったときに質問するのがスマート&キュート。
がんがれ!
自作した通常起動なアプリを 待ち受け起動させたいのですが、 ADFのMyConciergeをYesにしただけではダメみたいで java.lang.RuntimeException: must be MApplication というエラーメッセージが出ました。 検索したところ、MApplicationを継承しろ、ということなのですが、 この場合、IApplicationは継承しなくてもいいのでしょうか? IApplicationをMApplicationに置換してADFのMyConciergeをYesにすればOK?
APIリファレンスのMApplicationクラスをよくごらんなさい。 IAppliationを継承しているハズ。
ありがとうございます DoJaのエミュでは待ち受け起動できたのですが 実機でダウンロードしようとすると 「ソフトに誤りがある」とのメッセージが出たので・・・。 バージョンアップだとダメで ウェブブラウザからアドレスにアクセスすればいいとかあるのかな。 もう少し勉強してみます・・・
672 :
デフォルトの名無しさん :04/07/02 15:18
自分で作ったアプリを出来るだけ安く実機でテストする方法を教えてください
>>672 一発で動作するように、
エミュとの違いに細心の注意を払ってコーディングする。
>>672 メーカーのプリインストールアプリを開発する仕事をする。
そうすると、転送するためのケーブルが借りれる。
さらにお金も入ってウマー
>>674 それはケーブルが重要なの?
転送ソフトが重要なの?
>>675 両方じゃない?
どっちかといわれればケーブルの方だろうけど、ここで問題にするような話じゃない。
いやいや開発コストを大きく左右する大問題でしょ 可能なら転送システムを自作するよ まいどまいど微々たる調整でパケ代浪費してられないさ
>>677 パケ放題入ったほうがいろいろ楽しめるぞ
シグナリングテスタでも使って転送汁
>>679 むっちゃ高いねんけど・゚・(ノД`)・゚・
>>677 ま、せいぜい数万円の得をするために、DoCoMoやら携帯各社と争う方がバカらしいと思うけどね。
682 :
デフォルトの名無しさん :04/07/02 22:43
>>672 正しいアドバイスかわかりませぬが
試作版を公開してテストユーザ募るのがいい
ただゲームとか人が食いつきそうなアプリに限られるかな。
これが一番現実的。
>>682 公開できるレベルになるまでが結局大変。
ゲームみたいに、ハードにあまり依存しないソフトだと、だいたいエミュレータでバグはとれるし。
バグ情報が集まっても、その修正は自分でアプリダウンロードして確認する必要がある。
>>684 仕事で作るアプリだと、リリース前に公開するわけにはいかんしね。
686 :
デフォルトの名無しさん :04/07/02 23:37
フリー向けだったら携帯アプリ版に動作確認のスレ立てたよ。 「動作確認はここでタノメ」ってやつ
ドコモ社員が持ってる魔法の携帯使えるといいんだけどねw
>>687 秋葉原の怪しいイラン人が持ってる魔法の携帯はどうですか?
そんなもんイラン。
こちらで聞くのが正解でしょうか? お聞きしたいのですが 「太鼓の達人」のように サイトからシナリオをDLしてきて、それをアプリ本体が受け取り スクラッチパッドに格納したいのですが 手順はどのようにすればいいのでしょうか? iアプリで考えております。 あと505iだと30kが制限とありますが プログラム本体の容量ですか?それとも画像などのリソース含むですか?
>>690 サイトからシナリオをDL→ スクラッチパッドに格納
大体このような手順で問題ないよ。
だからその手順を聞いてるんだろ
HTTPConnection#connect()→ストリームで受信/格納
>>693 っていうか、質問者は、その質問をするレベルにない。
せめてHelloWorld相当のiアプリくらい作れ。
これ以上の具体的な手順を説明しろということは、 「誰か代わりにプログラム作ってよ」 と言ってるのと変わらんね。
>>690 皆さんが言うとおりiアプリコンテンツ開発ガイドをよく読めばやり方はつかめます。
ソースの具体例が欲しくなったらネットで検索してみるとよいでしょう。
質問されたことはiアプリ開発においてとても基本的なことなので、答えそのものの
サンプルがよく見つかると思います。
iアプリ開発の技術的な質問はこのスレでOK。
開発ガイド読んで、ネットで検索して、それでも困ったら質問してみるがよろし。
Eclipse 3.0でDoJaプラグイン動く? 軽く試したけど、なんかクラスファイルがjarファイルに含まれずにダメっぽい。
699 :
デフォルトの名無しさん :04/07/04 14:18
すいません、初心者ですが、リスト画面切替について教えて下さい。 ComponetListenerを使って、ListBoxで生成リストのあるリスト項目を選択したら、 別のListBoxで作ったリスト画面を表示させたいです。 リスト単体は表示することができます。 さらに新しいクラスを定義するのかなど、 すいませんが、教えていただけないでしょうか。 : : public void start(){ TEST_Panel test_panel = new TEST_Panel(); : : } class TEST_Panel extends Panel{ : } public void componentAction(Componet s_com , int s_type , int s_param){ if( s_com == single )&&(s_type == SELECTION_CHANGED)&&(s_param==2){ ここの処理がよく分かりません。 } } : :
doja3.0を導入してプログラムに励もうとしましたが 一瞬ウインドウが開いたかと思った刹那 ウインドウが閉じ、アプリ終了してしまいますがなぜでしょうか? j2SE1.3とJ2ME1.04はインストール済みです。
半角スペースが含まれたディレクトリにインストールした、とかは関係ないっけ?
c:\iDKDoJa3.0に展開しましたのでそれはないと思いますが・・
なにか、ウインドに表示されているのですが文字を読むまもなく強制終了 以前は動いたのになぜ・・
とりあえず文字を読め。 我々はエスパーじゃないのだから、さっぱりわからん。
画像データをHTTP経由でサーバーから取得し、 スクラッチパッドに保存するプログラムを作成しているのですが、 電波状況が突然圏外になったりした時の対処方法に困っています。 ダウンロード中に圏外になる等、エラーが発生した場合には 「通信エラーが発生しました。決定キーでリトライ」等のダイアログを出し、 ユーザーが決定キーを押すと通信リトライ・・・という形にしたいのですが・・・。 下記のようなソースを書いてみましたが、リトライ時に 「Already connecting」というエラーが発生してしまいます・・・。
int byteNum = 0; HttpConnection hc; InputStream is; OutputStream os; while (true) { try { hc = (HttpConnection)Connector.open(url_ + filename, Connector.READ, true); hc.setRequestMethod(HttpConnection.GET); hc.connect(); is = hc.openInputStream(); os = Connector.openOutputStream("scratchpad:///0;pos=" + sp_pt_ + ",length=100000"); int temp; while ((temp = is.read()) != -1) { os.write(temp); byteNum++; } hc.close(); is.close(); os.close(); break; } catch (Exception e) { Dialog d = new Dialog(Dialog.DIALOG_ERROR, "ERROR"); d.setText("通信エラーです。決定キーでリトライ"); d.show(); } }
読む間があればよんでる。 なぜに強制終了するのか原因がさっぱりわからない。 トラブルシューティングもどこにも乗ってない。
失敗してcatchにとんだ時にcloseしていないのが原因。 if (null==hc) hc.close(); if (null==is) is.close(); if (null==os) os.close(); ってcatchの中に書いておきなさい
ああ、抜けた。
もちろんopen前にnullを入れておくのを忘れないように。
>>707 君がさっぱり分からないのに、その場にいない我々がわかると思うか?
そもそもPrintScreenすら知らないのか?
キーボードの右上に「PrintScreen」ってボタンがあるだろ。
それを押すとPCの画面が撮影できる。
BMPファイルを開いてCTRL+Vをすれば貼り付けられるから、それで文章も読めるだろう。
>>708 >>709 早々のレス、ありがとうございます。
>>706 の2〜4行目を
HttpConnection hc = null;
InputStream is = null;
OutputStream os = null;
として、
catchの中を
catch (Exception e) {
try {
if (hc != null) hc.close();
if (is != null) is.close();
if (os != null) os.close();
}
catch(Exception ee) {
ee.printStackTrace();
}
Dialog d = new Dialog(Dialog.DIALOG_ERROR, "ERROR");
d.setText("通信エラーです。決定キーでリトライ");
d.show();
}
としてみましたが、以前と変わらないエラーが出る状況です・・・。
何がいけないんでしょうか・・・。
>>710 catchの中じゃなくて、finallyの中に書くのが普通
finally {
if (hc != null) try { hc.close(); } catch (IOException e) {}
if (is != null) try { is.close(); } catch (IOException e) {}
if (os != null) try { os.close(); } catch (IOException e) {}
}
あと、hcとisとosの宣言はwhileの中に移動すれ
たはは。 null==になってたね。失礼。 そのとおり!=が正しい。 んでエラーだけど、関係ないかもしれないが、2度目のhcやisにnullが入ってないな。 心配だ。 dialog出した後にでもnull代入するか、開く前にnull代入するべし。 あと if (hc != null) hc.close(); if (is != null) is.close(); if (os != null) os.close(); のcloseとnullかどうか調べているものの対応が、本当にこの書き込みのとおりか確認。 結構失敗あるよ。
711と712のアドバイスをそのまままとめると 所望の動作を行わないから注意ね。
while (true) { HttpConnection hc = null; InputStream is = null; OutputStream os = null; try { hc = (HttpConnection)Connector.open(url_ + filename, Connector.READ, true); hc.setRequestMethod(HttpConnection.GET); hc.connect(); is = hc.openInputStream(); os = Connector.openOutputStream("scratchpad:///0;pos=" + sp_pt_ + ",length=100000"); int temp; while ((temp = is.read()) != -1) { os.write(temp); byteNum++; } hc.close(); is.close(); os.close(); break; }
catch (Exception e) { } finally { try { if (hc != null) hc.close(); if (is != null) is.close(); if (os != null) os.close(); } catch(Exception ee) { ee.printStackTrace(); } Dialog d = new Dialog(Dialog.DIALOG_ERROR, "ERROR"); d.setText("通信エラーです。決定キーでリトライ"); d.show(); hc = null; is = null; os = null; } }
>>711 ありがとうございます。
ご指摘の部分、修正してみましたが・・・やはり状況は変わらないようです・・・。
>>712 何度も申し訳ないです。
>>711 氏がおっしゃるようにwhileの中に宣言を持っていき、
更に念の為ダイアログ表示後にもnullを代入してみましたが、同じエラーを吐きます・・・。
ちなみに上記ソースはコピペしていますので、誤字脱字の類はないと思います。
他に怪しいところ等ありませんでしょうか?
while (true) { HttpConnection hc = null; InputStream is = null; OutputStream os = null; try { hc = (HttpConnection)Connector.open(url_ + filename, Connector.READ, true); hc.setRequestMethod(HttpConnection.GET); hc.connect(); is = hc.openInputStream(); os = Connector.openOutputStream("scratchpad:///0;pos=" + sp_pt_ + ",length=100000"); int temp; while ((temp = is.read()) != -1) { os.write(temp); byteNum++; } break; }
catch (Exception e) { Dialog d = new Dialog(Dialog.DIALOG_ERROR, "ERROR"); d.setText("通信エラーです。決定キーでリトライ"); d.show(); } finally { try { if (hc != null) hc.close(); if (is != null) is.close(); if (os != null) os.close(); } catch(Exception ee) { } } } かな。動かしてないけど。
>>717-718 おぉ!ありがとうございます。
なるほど・・・ダイアログ表示はcatchの中で行なって、
close処理はfinallyで行うんですね・・・。
早速上記に書き換えて実行してみたところ・・・いけました!
ですが新たな問題が・・・
1度目のダイアログが出た時に、圏内に戻って決定キーを押した場合は
うまく動作するのですが、まだ圏外にも関わらず決定キーを押すと、
ConnectionExceptionが発生するようです・・・。
これはどういうことなんでしょう?
圏外だからじゃないの?
1度目のダイアログが出ている時、まだ圏外なのに決定キーを押すと、 finallyの中にあるcatchにConnectionExceptionがキャッチされます。 その後は何度リトライしようとしても、ダイアログが表示されるcatchブロックに ConnectionException: Already connectingで捕まってしまう状況ですね・・・。
>>720 言葉足らずで申し訳ありません。
最初に通信を試みようとした時に圏外だとダイアログが表示される
↓
ダイアログの決定キーを押した時も圏外のままだと
再びダイアログが表示される
↓
圏内に入ってダイアログの決定キーを押しても
Already connectingでcatchに捕まってしまうため、
ダイアログが表示される
↓
以下同文
・・・という感じなんです。
とりあえずダイアログの表示はずしてみたら? いや。ダイアログの表示を、closeしたあとに変えてみたら? なーんか悪さしてそうに見える。 あと、hcとかisの宣言時にnullいれるのやめて HttpConnection hc = null; InputStream is = null; OutputStream os = null; try { hc = (HttpConnection)Connector.open(url_ + filename, Connector.READ, true); hc.setRequestMethod(HttpConnection.GET); じゃなくて try { hc=null; is=null; os=null; hc = (HttpConnection)Connector.open(url_ + filename, Connector.READ, true); hc.setRequestMethod(HttpConnection.GET); にしてみそ
もしかして724って、変数にnull入れないとそれまでその変数から 参照されてたインスタンスがGCされないとおもってんだろか。 さらにGC対象になったらすぐにGCされるとおもってんだろか...
なんか、いろんな状況を想定するのマンドクセ って意図が感じられるんですが、 なんと反応していいもんだか…
>>719 finally {
try {
if (hc != null) hc.close();
if (is != null) is.close();
if (os != null) os.close();
}
catch(Exception ee) {
}
}
これだとどれか一つのcloseが失敗すると他のcloseが実行されないから
だめ。まとめずまめにcatchすること。
>>727 finally {
try { if (hc != null) hc.close(); } catch (Exception e) {}
try { if (is != null) is.close(); } catch (Exception e) {}
try { if (os != null) os.close(); } catch (Exception e) {}
// 念の為
hc = null;
is = null;
os = null;
}
ありがとうございます。このように直してみました。
今、複数の実機で試してみてるんですが、
機種によってはうまくいくものもある模様・・・。N900は望み通りの動作をするみたいです。
ますますわからなくなってきました・・・。
>>728 connect()の動作はドコモが配ってあるマニュアルにもあるように
機種によって差があるので最低限それだけは一度目を通すこと。
あと、//念の為 以降はいらない。whileループの最後で
スコープから外れるでしょ。
>>725 うんにゃ。流石にんなことは思ってないけど、特に間違っているように見えなかったから
怪しげなところをひとつひとつ潰していこうってだけ。
ああ、しかもほんとだ。宣言がwhileの中じゃん
ヽ(;´Д`)ノぼろぼろだな俺
にしても、いつも俺が商業で使っているルーチンとほとんど変わらないように見える。
なぜダメなのかわからん。
本質とは関係ないかもしれないが気になることが。 ストリームを閉じてから接続を閉じるんじゃないの?
あ、ほんとだ
久々に見に来た 初心者増えたな・・・orz 昔お世話になった人たちは、 まだ見に来てくれているのだろうか・・・
>>733 時期的にそれどころじゃない人が多いかも知れない。
初心者も質問に来られる雰囲気は大事ですよ。 (*´ω`*)もふふん。 まぁ初心者サイトのソースぱくる位は先にして欲しいかもしれないけど。
しかし初心者サイト自体初心者が作ってんだよな...
でも、 いつもこんな調子だと、 機種依存?な質問しても、 初心者レスに埋もれて返答なさそうだよね・・・ って、見てて思った ていうか、質問内容が初心者すぎないか・・・orz
EclipseでDoJaプラグイン使ってiアプリ作ろうと思うんですが、CLDCやらDojaAPIのJavaDocってどうやって組み込んだらいいですか?
>>738 それぞれのjarやzipファイルのとこで右クリック、プロパティを
選んでそこで設定。
>>739 「doja_classes.zipにはプロパティページがありません」となります。
Eclipse2.1.3 + DoJa3.5です。
質問age
>>740 じゃ、プロジェクトのプロパティ開いて
Java build path -> librariesのとこで指定。
>>743 できたです。
でも、オプションAPIのJavaDocはどうすれば・・・
と思ったら、設定が反映されない・・・ 開きなおすと消えてる。
これって、普通はなやむところじゃないんでしょうか・・・
>>746 自分もそれ、できなくて困ってます。
こちらはeclipse2.1.2+doja3.5ですが、.zipを.jarに変更したら、
設定が消えることはなくなりました。
しかし、Javadocがホバー表示されない。
にもかかわらず、Navigate>外部Javadocを表示する(Shift+F2)では表示されます。
Eclipseのバグ??できるようになりましたか?
javadocのホバー表示はソースから直接読み取っているから ライブラリのソースが公開されない限り無理だね。
zipのままJavaDocの組み込みができた人がいるのかどうか、知りたい。 それがだめなら、今日ルイ・コスタがでるかどうか、知りたい。
>>748 そうだったんだ・・。ありがとうございます。
>>751 zipのままできる方法があるのなら、その方法でやりたいから。
ゴールシーン見逃した・・・ 拡張子変えてしまったら、プロジェクトがそのままでは使えないよね?
おぉ、ルイコスタ。 ファイル名変更ではなくて、コピーしてjarファイル作らないと実行できないね。 それでもオプションAPIのJavaDocは組み込めないけど。
結局、関係ないjarファイル追加して、そのドキュメントを設定するのがいい気がする。
コンパイラにしろエミュレータにしろ参照するライブラリは それぞれ設定できるからいかようにも。でもzipファイルとjarファ イル両方用意してプロジェクトのビルドパスだけjarにするのがいいかもね。 あと今試したけどR3.0だとzipファイルにjavadocのattachできる。 で、JavaDocのホバー表示だけど、CLDCに限っていえば、 Docomoが配ってるやつではなくて、IBMのやつはソース込みになってる。 だからビルドパスにはIBMの入れて、エミュレータではDocomoのを 参照するという手もあり。 ...ってアレ? Sunのほうもユーザ登録すればソース入手できた気がする けど、ごめん、よく覚えてない。
>>756 zipファイルにjavadoc結び付けれないのは、2.1の仕様?
最近Eclipseの質問おおいが、 そんなにこれはいいものなのか?
>>759 Eclipseは非常に良くできてて便利だけど
大きくても100KB程度のiアプリなら別に無くてもいいもの
アレは広大なクラスライブラリを相手にする時にありがたいよ
>>760 なるほどね。
みんなでEclipseって騒いでるから、
すごい便利なものなのかと思ってたよ。
それだったら、俺には全然必要ないな。
なんせ、クラスなんて多くて3個だからなw
>>761 HelloWorldから便利に使える。
クラスが3つもあるなら充分。
どっちやねん。 まあ、漏れは別件で使ってるけど
ってか、どうやったら「無くていいもの」っていう意見がでるか不思議。
エミュレータでGraphics3D使うとjava.lang.ClassCastExceptionが出るのはなぜ? エミュレータはiDKDoJa3.5を普通にインストールしただけ。 何か追加しなきゃならないものってありますか? import java.io.*; import java.util.*; import com.nttdocomo.ui.*; import com.nttdocomo.opt.ui.j3d.*; final class MyCanvas extends Canvas { public void paint(Graphics g) { Graphics3D g3d = (Graphics3D)g; // ここで例外発生 } void main() { for (;;) { repaint(); try { Thread.sleep(1000); } catch (Exception x) {} } } } public final class Test extends IApplication { MyCanvas c = new MyCanvas(); public void start() { Display.setCurrent(c); c.main(); } }
>>766 そういうときは「Graphics3D iアプリ」とかで検索するんだ。
Eclipseに関する質問ってたびたび出てくるね。 私は使ったことがないんだけども、よく使ってる人はスレで出てきた分だけでも FAQとしてまとめて、次スレからテンプレにしてみてはどうだろう。
>>769 たびたびは話題になるが、FAQという感じではないと思われ。
新バージョンでどうですか?とかだからねぇ。
でもコンパイルできねぇ、リソースがjarに入らねぇってのはよく出るね。
Eclipse、ドコモのプラグイン使わないで 一度自分でbuild.xml書いたほうが小回りきくし 使いまわせるし楽なんだけどな。 ファイルの大きさ取得するタスクは どっかから拾ってくる必要あるけど。
プリプロセッサでマクロバリバリのプログラムでもうまく使えるんなら 面白いんだけどな〜 EclipseとCのマクロどっち取るかと言われたらやっぱマクロだよな〜
おれなら両方とる。
なぜか、dojaほっといて Eclipseの設定していたら普通に起動した。 いまだに、原因はわかりませんが お騒がせしました。
778 :
デフォルトの名無しさん :04/07/07 00:34
ダウンロードサイトからDLしたいファイルを一覧で表示し、 選択したファイルをスクラッチパッドに書き込みたいんだが そんなことできる? <ファイルの一覧表示>
ファイル一覧情報を書き込んだlist.txtでもつくって、まずはそれを読み込めばいいだろう。
ls.cgiとかそんな感じのをサーバに置いときなさい。
782 :
デフォルトの名無しさん :04/07/07 01:57
作ったiアプリでBGM流したいんだけど、形式は何が使えるの? 音楽はサパーリわかんね
>>782 SMFを独自形式にコンバートしたもの。
なんかの機種はSMFが使えるはず
>>782 好みだし大きなお世話かもだがやめた方がいいよ
だって機種ごとの互換性保つの超大変だし
一度システム作っちゃえばあとは楽なのかもしれないけどね。
コンバータはググれば見つかるんじゃないかな。
各機種用のファイルを全部一気に吐き出してくれる優れもの。
そいつの名前は〜失念・・・
>>782 *.MLD(MFi形式)
FOMAは*.mid(SMF形式)
787 :
デフォルトの名無しさん :04/07/07 11:29
wav2mldを使ってSO505i用のmld作ったんですが、 PsmPlayerでは再生出来るのに実機で再生出来ません。 何故??
自己解決しました(^_^; SO505i用をSO505iSで再生していました。
>780 すごい!単純だけど、それが一番簡単でいい。 気がつかなかったよ!
>>789 って優香、
DirectoryIndexをonにしとけば list.txt作る必要もないだろ?
>>790 アプリにそれを解析しろというのか。
list.txtが楽
ええっと、ドラクエのようにモンスターの形はいっしょだけど 一部色が違う(パレット変更)ようにすることで別モンスターと いうようにしたいんだけど、 画像のリソースじゃなくて プログラムで読み込んだ画像を任意の色を任意の色にパレット変更 って感じにしたいんですが、 どうすればいいでしょうか?
サポートしてない機種多すぎ。 素直にスクラッチパッドに保存し、パレット部を直接書き換えるべし。
795 :
デフォルトの名無しさん :04/07/07 20:09
imode以外のブラウザ、タブブラウザなどからJarファイルを直接ダウンロードされているのですが、これを防ぐ方法はないものでしょうか
797 :
デフォルトの名無しさん :04/07/07 20:26
ご返答ありがとうございます。具体的にどうゆう対策でIPをはじけばよいのでしょうか
>797 君の立場じゃ無理。
>>795 元のjarはo-rしといて、
CGIでソレを読み込んでimodeのときだけ吐く
っていうのもありかなぁ?
802 :
デフォルトの名無しさん :04/07/07 23:20
ちょいと失礼します。 待ち受け起動したアプリからのブラウザ起動ってぜ〜ったい不可能ですかね? 待ち受け状態から自アプリを通常起動させてパラメーターによってブラウザ起動させようとしたけど アプリからアプリの起動って同じADFじゃできないみたいだし。。。 アプリを2つダウンロードさせるのも何だし、なんかいい方法ないもんですかね???
不可能。はい次。
待ち受け起動したランチャーに別アプリ起動させるしかない
DoJa-3.5のエミュって、PointingDeviceのエミュレートに対応してないのな。 マウスカーソル位置拾えねぇよ・・・orz まったくドコモのやることは・・・・
DoJaの標準APIで拾えないんじゃないか
>>807 確かにオプションAPIではあるが。
DoJa2.x系のエミュレータでは対応していたのに、3.x系では対応していない模様。
505シリーズにアナログポインティングデバイス付きの機種がなかったから削って
そのままになってるのだと思われ。
またしてもdoja3.0が意味不明で強制終了。 インストールしなおしてもだめです。 こんな方ほかにも折られます
809です。 error ・・・ と、エラーのつづりは一瞬を何度も見てなんとか読めたが その後がさっぱりわからん。 瞬く間なので画面のキャプチャーすら取るひまがなし。
DOS窓開いてからdoja.exe叩くとかそういう発想はないのかね
はいはーい、提案。やっぱ質問用スレ立てよう。 「【初心者歓迎】iアプリ相談室」とかそんな感じのを。 興味深い話題が、横合いからの質問でザクザクぶった切られまくるのではかなわん。 なんかギスギスしてるし。 スレの勢いもほぼ十分っていうか、むしろ分けたほうが 遠慮なく機械的に質問・回答できるようになって流通量増えるんじゃないかと思う。 オーケーならスレ立てに取り掛かるし。
初心者だからといって、自分で調べることを怠るべからず。 っていうか、スレ増えても散漫とするだけ
いいんじゃねえの?正直自治厨うぜぇし。
>>813 そう照れ隠ししながら、藻前が初心者スレのログからFAQページ
作ってくれると信じてるぞ。
そんなに活発でもないスレを分割する理由がわからん。
スクラッチパッドからのロード中の画面で、 1%,2%,3%,4%,5%って数字が増えたり、 バーが塗りつぶされていったりする、いわゆるよくある画面だと思いますが、 あれは、スレッドで並行に動かしているのでしょうか? それとも、読み込むforループの中に画面を描画するメソッドや repaintなりを組み込んでいるのでしょうか? しょうもない質問ですが、どちらなのか教えていただけませんでしょうか? よろしくお願いします。
後者だな。
両方だな。
(;´Д`)-3 まさか前者を容認するカキコがあるとは思わなかったわ。 説明くらい書かないとまずいな。 画像1枚を読み込むとき、そのどれくらいまでを読み込んだか知る術はない。 つまり「画像を何枚読み終わったか」しか知りえない。 すなわちあの%は、単純に「読み込み済み枚数 / 全体枚数」なわけで、%の増え方は一定しない。 これを容認できるなら前者。普通容認する。 どうしても%の増え方を一律にしたいなら、全て読み込み終える時間を機種毎に正確に測り、 「現在の時間 / 機種毎の全て読み込み終える(略」をスレッド表示。 どちらでもどうぞ。
>>819 画像読み込む時にバイト単位で読み込めばいけるんじゃねぇの?<正確な%の増え方
バイト数と展開の速度がイコールとは限らん。 高圧縮JPGとかな。 そもそも厳密にやってどうする。 だから「後者だな」と言った。
>>819 %は増えなくても、たいてい、なんかアニメーションしてるだろ。
「画面が止まってると使用者が不安になるから、何でもいいから動かせ」 ってのがプログレス表示の由来だ、と上司に聞いたことあるな。 %表示の正確性はあるにこしたことはないけど、とりあえずどうでもいいというのが実務レベルの実際。 スレ違いだけど、 昔のパソコンソフトで処理待ち中に文字をリバースで点滅させてたのもそういう意味をこめてたらしい。 ハードウェアの機能だったから、ソフトが暴走してても点滅しっぱなしなんだけどね(笑
%バーが塗りつぶされていくのを聞かれているのだから、後者だろう。 %に関わりなく一定間隔でキャラがアニメしてるなら、 そんなものスレッドに決まってると816(2通りの方法を思いつく人物)ならすぐわかるだろ。
処理中にrepaintしても、処理が終わってアプリケーションに制御が戻るまで反映されない機種ってなかった?Fあたりで。
repaint()由来のpaint()は非同期で実装依存だから いつ実行されるかわからないのが実情
>>825 Fは、precessEvent()内でrepaint()してもそのときのコールバックが終了したあとに
再描画になるね。イベントドリブンで組む場合には気をつけねばならぬ。
そう、だから、%バーの塗りつぶしも、スレッドじゃないとだめな気がしてたんだけど。
ダメな気が → ダメなことがある気が
プログレスバーなんか雰囲気でいいじゃん 漏れの糞コードなんか起動時に色々初期化が重いから テキトーにプログレス処理を振り分けて書いて ヨシこの辺で30%くらい、ここまできたら80%だ みたいな感覚でやってる 機種毎の速度の違いすら考えてなかったり・・・
重いといってもPCのエミュだとプログレスバーの表示すら見逃しかねない程度なんだけどね
マルチスレッドマンドクセ むかし、鯖へのアクセス時に画面に動きを付けるために使った事があるだけだな (j-phone用だったけど) new Thread(){ public void run(){ //描画 } }.start(); とかメソッドの中に書いた希ガス あとrepaint()は一切使わない方向で 誰か(ん・ぱか氏?)の本にそう書いてあったヨ
普通repaintは使わないな。iの場合。
>>812 どっちかと言われれば賛成。正直微妙だが。
で、repaintメソッドか。そんなものもあったな(ワラ
ウィンドウシステムのための仕組みをケータイで使う理由がわかんね(゚听)
まーあれだ Graphics用だろ。
>>812 条件付き賛成
線引きの草案を出してよ
たとえば
「総合スレ」と「質問専用スレ」
「雑談スレ」と「質問スレ」
「総合スレ」と「初心者専用スレ」
みたいに各スレの方向性を明確に打ち出してちゃんと区別しないと
ナァナァになって分けた意味なくね?になるし
スレを分けるか否かは別にして、
テンプレやFAQがもっと濃い内容だと初心者には優しいかもね。
漏れにはそんな濃いFAQは作れないけどw
マンドクセー事いってんじゃないですわよこのやろう。 作ってみて利用されれば残るだけの話。
単なる乱立やめてくれ。 初心者スレをわけるような流量ないだろ。 このスレが初心者歓迎になればいいだけの話。
現状でも、初心者質問がほとんどなんだからさぁ。
今でも初心者歓迎じゃないの? 確かに色々機種依存情報も書き込んできたけど、初心者に答えるのも好きよ? 特に重大情報なんてそう頻繁にでてくるわけじゃないんだから、普段のネタがないのも困る。
2ヶ月かかっても900いかないんだから。 FeliCaでももりあがってないし。 しばらく大きめの話題なさそうだし。
844 :
デフォルトの名無しさん :04/07/10 23:45
age
iアプリDXでも、携帯に保存している写真を読み取ることはできないですよね?
現在Doja3.0で勉強しているのですが、 Panelクラスを継承しているクラスの中で矢印キー(カーソルキー)が押された場合の処理はどう書けばよいのでしょうか? 今現在は数字キー等と同じように、 if(受け取った値 == Display.KEY_UP) のようにしているのですが、これでは反応してくれません。 一体どのようにすればいいのでしょうか?
>>846 調べてさしあげました。
以下iアプリコンテンツ開発ガイド for Doja3.0より引用
DoJa-2.0プロファイル以降では、
高レベルAPI利用時におけるこれらのキーのキーイベントにつ
いて以下のように規定されています。
・ 方向(上下左右)キーはキーイベントを発生しません。
これらのキーは、スクロールおよびフォーカス制御のために
常にPanelで処理されます。
(以下略)
keyListener void keyPressed(Panel panel, int key) void keyReleased(Panel panel, int key) これらは何に使うんだろうね・・・
と思ったけど0123・・*には必要なわけか ひとりごとを言ってしまいました。 さやうなら。
>>840 俺は初心者歓迎になれそうもない。S/Nどんどん悪くなってってるんでキレかけ。
こういう話してる最中ですらこれだからな。
iアプリ開発系の情報得られるのここだけだから、来ないわけにもいかないし。
>>842 >初心者に答えるのも好きよ?
キミは好きかも知れないけどなあ。
答えるのがそんなに好きなら、それこそ質問スレで存分に答えればよろしいのでは。
というか立てるならさっさと立てれ
>>812
>>850 com.nttdocomo.system.ImageStoreってのがあった。
ふつうにDXからできそうだ。
>>851 初心者スレたてたところで、SN変わるわけじゃなし。
俺は個人的に「初心者歓迎質問スレ」作って欲しい。
>>847 から答えてるのは実は俺なんだけど
ご覧の通り質問内容が公式なドキュメントに書いてあるレベル。
質問する方も、答えてしまうのも問題あるだろうけど
ガイドを読めないというのがエントリユーザの現実。
仕事でやってる人はまた別の次元の話があるだろうし。
双方が話しにくいのが流量が増えない原因だったり?
というわけで立てるならさっさと立てれ
>>812
>>854 別になぁ、公式ドキュメント全部見る前に、できるかできないかだけ知りたいってことあるし。
できる、ってわかれば、やり方は調べるし。
わけたところで流量は変わらんし、SNもかわらん。
どっちかがすたれるだけ。
ま、次スレとして使われるだけだな。
立てたきゃ立てろ フォローはしない
理想を求める学生さんが、現実を知るのにはいいかもしれない。
iアプリDXのテストって、公式サイトとして認められたサーバーに置いてDLするしかないよね?
>>847 どうもありがとうございます。
私も調べてみたのですが、そのような表記は発見できませんでした。
>方向(上下左右)キーはキーイベントを発生しません。
との事ですが、イベントが発生しない場合はどのように処理すればいいんでしょうか?
>>859 あきらめろってことだな。
上下とってなにがしたいの?
>>860 練習として計算機を作っていまして、
今は数字キーを押した後に、画面上にある「+」「−」「×」「÷」ボタンを押す事によって計算しているのですが、
そのボタンを方向キーに置き換えたいと思っています。
チン ☆ マチクタビレター ☆ チンチン マチクタビレター ♪ ♪ ☆ チチン ♪ .☆ マチクタビレター ☆ チン 〃 ∧_∧ ヽ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(・∀・ ) /\_/ < 分割マダー? チン \_/⊂ つ ‖ \__________ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| ‖ |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :| /|\ | |/
>>858 だいたいそんな感じ
でもそんな事聞いてどうすんの?
>>866 いやぁ、iアプリDXを作りたいんだが。
テスト用にそのコンテンツプロバイダーのサーバー借りる必要があるのかな、と。
>>867 エミュレータで簡単な動作確認くらいならできたはず
エラーのエミュレーションは難しいかも知れんが・・・
DXアプリは、
URLをドコモに申請し(俺が申請してるわけじゃないので、詳しくはわからんが・・・)、
ドコモからIDもらってようやく実機テストできるんで、
もしDXアプリ作るんなら、早めに手をうっておいたほうがいいと思うよ!
jarのURLを登録するときに本番用テスト用の2つを登録が出来るから、 テスト用を喪前の鯖にすればいいんじゃないの? つーかCPに聞いとくれ
まだねぇ、その仕事を受けるかどうか、DXにしないとだめな仕様になるかどうか、わからないからねぇ。 しかも、赤外線がからむから、実機じゃないとテストにならない、というオマケ月。
processEventでのFOLD_CHANGED_EVENTが待ち受けアプリでしか 使用できないような気がするのですが やりたい事は通常アプリで端末閉じたらアプリ停止処理をしたいのですが 何か良い手はないでしょうか
なんかドコモのドキュメントが更新されてる。FeliCa関連だと。 てーか、jguideforDoJa3_0_opt_040709.pdfが普通に保存できないぞ(゚Д゚)ゴルァ! IrvineでURL直叩きで落としたけど。
>>872 PhoneSystemでふたの状況が調べられるので、
閉じてたら処理を軽くするとかならできる
876 :
デフォルトの名無しさん :04/07/12 22:50
赤外線通信について質問です。 iアプリ内のデータをPCにテキストファイルとしてファイル転送したいと考えています。 こういうことって可能なのでしょうか?
>>876 PC側でObexが認識できれば普通にストリームで転送可能
ゲームのFPS管理で ・Timerを使う ・ShortTimerを使う ・System.currentTimeMillis()とsleepを使う 上のうちどれが一番正確にできるのでしょうか? また上記以外に精度の良い方法がありましたら教えて下さい
>>873 >てーか、jguideforDoJa3_0_opt_040709.pdfが普通に保存できないぞ(゚Д゚)ゴルァ!
>IrvineでURL直叩きで落としたけど。
普通に保存できるけど?
ブラウザでPDF開いたら保存のアイコンクリックすれば?
>>879 「文書を保存できません。この処理は許可されていません」って出る。
FPS?(◎_◎) ン?
>>877 PC側は認識してると思います。
携帯側で具体的にどうやるのかがわかりません。
$strの中の文字列を送りたいだけなのですが、
ストリームに$strをwriteするだけではダメなんですよね。
サンプルソースとかご存じの方いませんか?
>>878 どれを使っても、結局端末のタイマ精度次第だからなぁ・・・
ちなみに、漏れはSystem#currentTimeMillis()と空ループでやってる。
sleepの精度もやっぱりアテになんないし。
>>881 frame per second←これだろう
first person shooting
漏れも
>>883 と一緒で、System.currentTimeMillis()と空ループでやってる
時間解像度が荒い機種があるから、これが一番確実かと
>>880 俺は普通に保存で来てるので、ドコモサイトの問題ではなさそうだね。
それ以上は申し訳ないが、分からない。
というかまあ、もうダウンロードできてるので どうでもいいっちゃいいんだけど。
>>883 >>884 レスどうも
System#currentTimeMillis()と空ループを検討してみます
>>878 はじめTimer使ってて、
精度が悪いのでcurrentTimeMillis+空ループに変更したんだけど、
電池に悪そうなんで今後はcurrentTimemillis+sleepにしようかと思ってる。
空ループとsleepだと電池消費量はどっちのほうが大きいんでしょうか?
大して変わりないんだったら、お手軽な空ループ使うんですがね・・・
sleepの方が消費電力は低いと思われ 確かN504は時刻やタイマーは100msが最小単位だったよね? そういう機種だとThread.sleep(40);ってやっても100msスリープしちゃうとかありそう 試したわけじゃないし、空ループなら大丈夫なのかどうかも判らんが
891 :
デフォルトの名無しさん :04/07/13 09:02
iアプリ作るの初めてなのですけど、 現在JDKの1.42とDoJaの3.5をインストールしてあります。 この環境で504を対象としたiアプリを作れるのでしょうか? ADF設定でProfileVerをDoja-2.0にすれば大丈夫なのでしょうか? マニュアルにこの項目はエミュレータでは使用されないと書いてあり いまいちよくわからないのですが。 コンパイルオプションとしてDoJa2.0用にコンパイルしてくれる と言う事でしょうか?
>>890 100msスリープする。
だがN504はたしかShortTimerの解像度は10msという謎機種。
ほんとにNはブツブツ
>>891 別に気にしないでつくれる。
Doja2.0に含まれない命令を使っていると動かないだけ。
(たしかDL時に不正なアプリとか警告がでてDLできない)
でもまぁ、初めて作るとなると、どこからどこまでが2.0命令で、
どこからが3.0命令か判断つかないと思うから、2.0用エミュで作るのをお勧めする。
韓国で貴社アプリをリリースしたいとかなんとか、そういう変なメールが来ますた。 どうせまた皆のところにも来てるのかな。
なんか、あからさまにギガアプリとかアプリゲットあたりから適当に爆撃してますみたいな 文面のメール多いよな。 あれで釣れるやついるんだろうか。
返答どうも 505専用のアプリはsleep、全機種対応のアプリは空ループ 今後はこんな感じで使い分けてみることにします
ノウハウが無い会社と仕事するといろいろ面倒臭いよ スクラッチパッドの大きさも画面の大きさも違うの知らないし 端末の仕様なんて公開されているのに調べてなかったり。
ノウハウない、っていうか、iアプリ知らないのに仕様決めて、変更不可という会社はクズだな。
901 :
デフォルトの名無しさん :04/07/14 00:46
Canvasから直接テキスト入力枠ってどうやって表示すんの? 入力された文字の取得方法と合わせてご教授を。
>>901 > Canvasから直接テキスト入力枠ってどうやって表示すんの?
drawRect
drawString
> 入力された文字の取得方法と合わせてご教授を。
imeOnあたり
903 :
デフォルトの名無しさん :04/07/14 07:09
スクラッチパッド内のバイトの塊を画像データとして扱うには readしたデータをImageに丸投げすればいいのでしょうか? リソースからの画像の表示やスクラッチパッドとのやり取りは知っています。 スクラッチパッドからの画像の表示がわかっていません。 readするといってもバイト単位だし、そんな大きいデータを どこに貯めておけばよいのやら。Imageにバイト単位で追加していく? それとも自前で画像ビューア機能を実装する・・・・わけないですよね。
>>903 もちょっとImageのしくみを勉強してみてください。
905 :
デフォルトの名無しさん :04/07/14 07:37
>>903 SPの100バイト目から画像データが格納されている場合の例
MediaImage mi = MediaManager.getImage( "scratchpad:///0;pos=100" );
>>888 P端末だと電池の持ちが全然違う
(sleepすると本当に待ち受け時と同じくらいまで消費電力が落ちる)
のでsleepにしてほしい。
>>901 とりあえず枠っぽいものを描いておいて、SELECTが押されたら
即座にPannel画面に切り替える。
Canvasから直接は無理。
>>903 とりあえず初心者サイト行きなさい。画像の読み込みは基本中の基本。
バイト配列からImageを作成することもできるが、たしかDoja3.0から。
>>906 ヽ(`Д´)ノそういう気遣いしてももらえる額一緒なんだYO
あー、3.5以降から、Canvasから直に入力画面飛べたかも。 ちょっと今調べる時間ないんで、他の誰か知ってる人よろ。
>>904 わかったつもりになってましたが実は仕組みがわかってなかったようです。
>>905 ありがとうございます参考にいたします。
>>907 DoJaのバージョンによっても違う扱い方があるのですね。
バイト配列をImageにブチ込むというのは自分的にはとても理解しやすいです。
あとはヘッダフッタをどうするのか・・・って画像のフォーマットも調べなきゃ。
お導きいただきありがとうございました。
>>908 3.0以降で対応してる。
だけど、全画面がまっさらな入力画面になるので、「テキスト入力枠」を
用意したいのであればPanelを他に用意する必要がある。
912 :
デフォルトの名無しさん :04/07/14 14:03
>>911 まっさらでもよいです。
実装方法をご教授くださいませ。
913 :
デフォルトの名無しさん :04/07/14 14:05
あー。それともうひとつ。 カメラで撮影した画像をImageStoreで保存する場合に SDカード直は無理? P900iだと「メニュー」>「マルチメディア」>「イメージ」> 「iモード」ってところに保存されるんだけど・・・。
>>912 Canvas#imeOn()
public void imeOn(String text,
int displayMode,
int inputMode)
>>913 ネイティヴのファイル保存機能で保存できない場所は無理
915 :
デフォルトの名無しさん :04/07/14 15:10
>914 すげー簡単なとこにあったとは(^-^; 確認不足でした。 助かりました。ありがとうございます。
即レスしてやったのにさぁ・・・
質問の仕方が分からない初心者と同じで
>>902 は回答の仕方が分かってない。
>>917 懇切丁寧なレスがほしければ、「初心者歓迎」の方へ。
どっちもどっち
答える側は、答えれる範囲で答えればいいと思うのだが。
>>902 は内容的には適切なレスだし。
次はきっと processIMEEvent の質問が来るに違いない・・・
APIリファレンスをコピペすれば済むんだろどうせ
923 :
デフォルトの名無しさん :04/07/15 00:50
>>858 じゃないと、やり方ばれたら勝手サイトのアプリで
端末内の電話帳のデータとかぶっこぬけるだろ?
つかDX作るならこういうのはドコモに直接聞くのがいいと思われ。
教えてやりたくてもDX絡みはNDAで書けないことも多いし。
何も言うな。吊ってくる。
925 :
デフォルトの名無しさん :04/07/15 21:19
いつでも最初の画面に戻れる仕様で そこには大きめのタイトル画像がある。 これは滅多に使われない画像だが いつでも表示できる様に最初にロードしてそのまま。 それが仕様の変更でその画像が不要になった。 それでその画像を削除してビルドし直したら その途端にアプリ全体の処理速度がかなりアップしたのだが そういうものなの?
926 :
デフォルトの名無しさん :04/07/15 21:22
使ってなくても画像をロードしてあるだけで重くなる、 ということなら納得だが、そんなわけはない、 ということならバグを探さにゃならんよトホホ
>>925-926 ロードしてるなら、
javaヒープや機種によっては内部ワークを少なからず消費してるはずだから
ありえるんじゃないのかなぁ。
ヒープのGCの頻度や一回の重さも変わるような気がするから。
最近の画面サイズに合わせた画像は、リソース負担でかいから、ありうる話。
>>927 >>928 情報ありがとうございます。
可能性としてあり得る話しだ
とのことで少しホッとしました。
SH900iが特に顕著に変化したようです。
もし大きな画像を使うなら
使わない時は破棄しておいて
使う時にその都度ロードした方が
よさげですね。
でもそれはそれでロード時間がかかるか。
うん、その時はその時考えますw
ありがとうございました。
>>927 キャッシュのヒット率も下がるだろうしな。
>>929 ロード時間に目を瞑れるようだったらそうしたほうがいいかもね。
やたらロードしまくりだったらリソース不足で落ちるかもしれんし、
それよか確実に動いてくれるほうがうれしいな。
D505で画像用の内部ワークが尽きて落ちたときは正直マイッタ。
結局画像サイズをちっちゃくして逃げ切ったけど、
あまりこんなことで悩みたくないよなぁ…
>>923 といってもAPIは全部公開されてるからな(^^;
あれを見たらぶっこ抜けないことは明らか。
というか、ぶっこ抜く方法見付けた奴は神になれるなw
>あれを見たらぶっこ抜けないことは明らか。 XStringの中身がわからないってこと?
>>933 XStringの中身をiアプリが知ることは出来ないって意味で言ったけど。。
DXと言えどもユーザーのデータはぶっこ抜けないんだよ 一度XStringを描画したらそのGraphicsからは一切ピクセルが読めなくなるとか 比較が出来ないとか あらゆる手が封じられてる感じだから、もし穴を見つけた香具師は神なんだよ。多分
937 :
デフォルトの名無しさん :04/07/16 13:10
iアプリでブラウザ作りたいんだけど タグの処理方法の書かれてるよい資料かサイト しりませんか?
>>937 それはiアプリスレで聞く内容ではない。
939 :
デフォルトの名無しさん :04/07/16 13:32
知らんやつにはきいとらん
(つД`)親切で教えたのに。Web系に行きなさい
941 :
デフォルトの名無しさん :04/07/16 13:41
俺が悪かった。 カリカリしてたもんでな。 すまん。Web系にいってくる。
>>937 iアプリでは無理、という結果になるに150ぬるぽ
package com.nttdocomo.system; import com.nttdocomo.lang.*; import com.nttdocomo.ui.IApplication; public class Test extends IApplication { public static void Method() { try { XString x = SystemPrivateXString.createXString(); SystemPrivateXString.saveXStringValue( x , "a" ); String s = SystemPrivateXString.loadXStringValue( x ); System.out.println( x.toString() ); System.out.println( s ); } catch( Exception e ) { System.out.println( e.getMessage() ); } } public void start() { Test.Method(); } } エミュ上でなら動くんだがな
>>943 そりゃsystemパッケージにクラス挿入したら何でもできるわな…
>[DoJa-3.0] >端末によっては、ImageEncoder クラスで画像の形式として "J3dTexture" を >指定することで、 イメージをテクスチャのデータにエンコードすることができます。 ↑これって、どの機種で可能かテストしたことある香具師いる? 可能であればインチキ光学迷彩が実装できるな・・・
初歩的質問スマソ。 P505iで作ったアプリを、D506iに移植しようと思ったら、D506iがgraphics2クラスを サポートしていないことに初めて気が付きました。 このような場合、どうやってアプローチすればよいのでしょう? やっぱ低レベル3DAPI使うしかないのかな……
>>947 あぁ、そうだったけ?
だとしたら低レベル3DAPIとやらを使うしかないのでは?
Graphics2で半透明が使いたいんでしょ 機種によっては使えないよ でも凝った処理をしないなら半透明ポリゴンで何とかなると思われ やったこと無いけど ただ、低レベル3DAPI(C3D〜クラス)ってD以外使えるのか? Graphics3Dを使った方が安心だと思うが‥
ああ、Graphics2か。Graphics3Dと勘違いしてた。 Graphics2は使えない機種があるね。
使いたいのは半透明と左右反転だけです。 これってGraphics3Dでいけるんでしょうか? 3Dのプログラミング経験は皆無なので、API仕様見てもさぱーり…… ちなみに、Dは高レベル3DAPIでも、ハードウェアレンダしてくれるのでしょうか?
setTransparency()
>>953 3Dはモデルデータつくるのが大変だよな。
データさえ作っちゃえば、そういうメソッド呼べばいいので簡単なんだけど…。
そこでドット絵ですよ
PrimitiveArrayって、どれくらい実用的なの?
>>957 900iシリーズなら、まぁ使える。
D<<(実用最低ライン)<N≦P<F<<SH
だと思ってくれ。
50X系ではゲームとして実用的な見栄えと速度を出すのは大変だと思う。
最速と言われているPでも厳しい。
N900iとP900iって、端末のソフトだけでなくJava VMの挙動も同じものと考えてええのん? P900i系+N900i系 28% 900i系(DoJa-3.5) 41% 505i系(DoJa-3.0) 26% うちのサイトこんな感じなんでP900iに機種変してこようかと。
>>958 へー。じゃあ結構使われてるのね。
しかし、SHってがんばってるなあ。
>>959 まったく同じではないけど、結構似てる。
メモリ管理や描画まわりの癖とかは共通してる感じ。
Graphics2の対応状況とか、細かいところでは多少違うね。
>>960 1機種だけダントツで速いってのも結構困る状況なんだよねー。
SHをターゲットにして作れれば楽なんだけど、そうも言ってられん。
シェアの高いN/Pが3Dの性能イマイチ(その代わりImage系は速い)
なんで、2Dものには使わないほうが無難かも。
ポイントスプライトはサイズがでかくなると誤差丸めの影響で
ポリゴン分割面が見えちゃうし。
963 :
デフォルトの名無しさん :04/07/23 18:46
DOJA3.5エミュレータでコードリーダ起動で getParameterを使って読み込もうとしていますが、 パラメータがどうしてもNULLになってしまいます。 起動まではOKです。 CMD:まではちゃんと読み込んでいるみたいです。 コードはこうなってます public class sample2 extends IApplication { public void start() { String msg; String a = IApplication.getCurrentApp().getParameter("xxxxx"); System.out.println(a); if(null != a) { msg = a; } else { System.out.println("パラメータがNULLです"); msg = "ASCII"; } ............. どなたか同様の問題にあったことはありませんか?
jamはこんな感じです AllowPushBy = Code:command LastModified = Fri, 23 Jul 2004 18:19:04 AppClass = sample2 AppName = sample2 PackageURL = sample2.jar AppSize = 598 ちなみにコードリーダのデータは LAPL:ADFURL:http\://xxx.yyy.zzz/sample2.jam;CMD:command;PARAM:xxxxx,value1;PARAM:name2,value2;; としています
AppParamに指定したデータが取れるんじゃないのか?
>>699 それを取るメソッドはgetArgs。
getParameterの話してるんだからずれてはいないと思う。
ただ、コードから起動する時にどういうパラメーターにすればいいかは知らん。
いろいろありがとうございます ドコモもデフォルトでインストすると \iDKDoJa3.5\lib\multimediaにsample1.datを用意していて 明らかにコードリーダのデータなのですが sample1.javaはなくてその辺が微妙な気がします まさかエミュレータで動作確認してないとは思いませんが getArgsでAppParamからデータを取得は出来てます なお、赤外線のデータ渡しも同様にgetParameterを使うようです
質問です。
質問です
答えです 答えです
>>967 スマソ勘違い。
getArgsの時は「パラメータ名=値」の形式だけど
getParameterの時は「パラメータ名:値」の形式でいいのかな
DojaマニュアルやDOCOMOのサイトでも PARAM:Valueとなっていて 実際PARAM:Value以外の形式では「不正なフォーマットです」 となってRejectされてしまいますね
>>973 エミュレータの環境設定とかは問題ない?
どこかやり忘れてるってのがありがちなんだけど。
974までのみなさん色々ありがとうございました 自己レスです 結論から行くと実機でOKでした 外国サイトに似たようなBBSと似たような質問があって (おそらくアメリカ) そこにエミュレータでは動作不可で実機OKのようなことが書いてあったので ではやってみようとなって 難なく動作しました 今後の開発でパケ代がその都度かかるのではちょっと困りますが なんとかエミュで動くようにならないかな? とは継続して考えています 他のエミュで動いたよとか情報があれば今後ともよろしくお願いしますmm