1 名前:デフォルトの名無しさん [2007/08/21(火) 15:32:26 ] NTT DoCoMoのiモード携帯電話用Javaに関する話題を扱うスレッドです。 ※DoCoMo以外は下記スレへ。 CLDC+MIDP+携帯電話用Javaスレッド part 7 ttp://pc11.2ch.net/test/read.cgi/tech/1180010672/ ■ iアプリ特有ではなくJava一般に関する質問はこちらへ 【初心者】Java質問・相談スレッド104【大歓迎】 ttp://pc11.2ch.net/test/read.cgi/tech/1185493592/ ■ iモード携帯電話用Java(iアプリ)まとめサイト ttp://ton.my-sv.net/ ■関連スレ 【日本携帯】Mascot Capsule/Micro3D【標準】 ttp://pc8.2ch.net/test/read.cgi/tech/1117773530/
207 名前:ラgたくまチャン [2007/09/24(月) 23:01:07 ] 簡単簡単
208 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 23:47:03 ] つーかそこまでする必要あるか?商売でやってるわけじゃなし はっきりいって規格を統一しないメーカーが悪いんだし 売り上げに響くからか ろくに機種依存情報も出さないし(901以降は全然出してない) ハードに問題あるならどうしようもないよ
209 名前:198 mailto:sage [2007/09/25(火) 03:01:59 ] >>206 900シリーズとかならともかく、最近の機種でメモリ不足って考えにくくないかな。 例外をcatchするバージョンを実機で試すくらいは手伝うよ。 そもそもD902iでWaterPが落ちるのと、FallSの問題は無関係かもしれないが。
210 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 04:55:05 ] >196 Canのコンストラクタにあるload()って何やってるの? このタイミングでスクラッチパッドにアクセスしちゃダメだよ。 コンストラクタでは通信やリソースへのアクセスとかの複雑な処理をしちゃダメ。 機種依存で上手くいくこともあるけど基本的にはやらない。 コンストラクタはエラー返さないし例外が発生してもcatchしようがないから これが原因ならシステム側でエラー処理されるよ。
211 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 10:47:51 ] >>210 いやコンストラクタの中でだってcatchは出来るだろ まぁ処理にしくじったら即terminate()呼ぶなり変数で場合わけして内部を状況表示に切り替えるなり色々やりようはある 俺としてはスレッド使ってるからちゃんとsynchronizedするのを忘れてて各種変数が壊れてるってのを予測してるけど 特に特定の割合や特定個所で出るけど例外補足に失敗するってパターンはそれが多いよ 自分ではスレッドを使って無くてもCanvas.processEvent()とかをsynchronizedで括り忘れると 実機ではもうどんなバグが出てもおかしくないし まぁprocessEvent()系を全く使ってなかったら判らんけど
212 名前:199 mailto:sage [2007/09/25(火) 15:00:16 ] >>203 dクス! read側で201同様DataInputStreamをcloseしてなかったのが原因でした 言い訳するとDoja3.xの頃に作った頃はこれで動いてたんです・・
213 名前:デフォルトの名無しさん [2007/09/25(火) 23:32:00 ] >>209 ありがとうございます。デバッグver.はほんの少し時間を取れたら作ります。 ところで、落ちたのは何か表示がされた後なのでしょうか? >>210 load()はsaveした変数値を読み込んでいるだけです。(それほどボリュームはないかと。) >>211 うむむ、key処理でprocessEvent()は使ってますが、synchronizedは全く使ってないですね。
214 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 00:40:39 ] >213 load()について。 >saveした変数値を読み込んでいるだけです。 てことはスクラッチパッドにアクセスしてるんだよね? >210はそれだとダメじゃないかと指摘している。 処理のステップ数や読み込む量は関係ない。 今回の問題の原因ではないかもしれないが、いかなるコンストラクタでも デバイス機能の操作(スクラッチパッド、通信、音声、カメラ、描画更新など)は しないのが常識だと自分では思ってたんだけど…どうなのかな。
215 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 02:22:42 ] >>213 processEvent()をsynchronizedで括っておくのは基本 processEvent()がイベントごとに別個のスレッドで呼ばれるか同一のスレッドでキュー処理して呼ばれるかは実は機種依存 jguidefordoja5_x_070423.pdfの86ページ イベントごとに別個のスレッドで呼ばれる機種の場合processEvent()処理中に再突入されることを考慮に入れなければならないし またCanvasをThreadで処理してる場合processEvent()のスレッドと並走することになるのでprocessEvent()から呼んでるメンバは全て synchronizedである必要がある(まぁこちらは当然処理してるとは思うが) >>214 コンストラクタでやるのが悪いんじゃなく初期起動メソッド(start()やstartApp())の記憶違いじゃね? コンストラクタそのものは何をやろうと関係ないよ それも短くしなきゃいけないって決まってるのはMIDPの仕様(ディスパッチャ停止を避けるため)だったと思った DoJaには関係なかったはず
216 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 04:28:56 ] > processEvent()をsynchronizedで括っておくのは基本 Javaの基本って事?それとも携帯アプリでの基本って事?
217 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 10:21:20 ] >processEvent()から呼んでるメンバは全てsynchronizedである必要がある(まぁこちらは当然処理してるとは思うが) ちょっと気になったんだけど、processEventがsynchronizedになっている場合 processEventから呼んでいるメンバは自動的にsynchronizedがかかっているのと 同じ挙動にならないの?
218 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 15:44:51 ] >>217 ならない。 なぜなら、synchronized修飾子でロックされるのは指定したオブジェクト (指定しない場合はthis)であって、メソッド本体ではないから
219 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 16:27:13 ] iαppli Development Kit for DoJa-5.0(FOMA)をインストールしたのですが、 いざ起動しようとすると、何も反応がありません。 エラーが出るわけでもなく、一瞬砂時計が出て、それっきりです。 誰か解決法のわかる方はいますか? ちなみに、Doja3.5、Doja4.0は起動します。 java -version java version "1.4.2" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28) Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode) WinXP HomeEdition
220 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 17:06:03 ] 公式エミュレータ(Doja5.0)でストレージデバイスにデータを保存するアプリをエミュレートした場合 ストレージに保存したデータがどこに在るか知らない? >>219 Doja3.5,4.0はアンインストール済み?
221 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 17:31:47 ] >>220 アンインストール済みです
222 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 18:04:39 ] >>219 一端アンインストールして、別ユーザーでログインしてそっちでインストールしてもだめ?
223 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 18:07:30 ] >>220 公式資料によると、C:/iDKDoja5.0/lib/storagedevice/xxx
224 名前:198 mailto:sage [2007/09/26(水) 18:18:40 ] >>213 波が動き始めて5秒後にαエラー。 その間、helpの表示、設定の変更や保存は正常に機能してるっぽい。
225 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 18:58:25 ] あった!ありがとう>>223
226 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 18:59:40 ] >>222 別ユーザでやってみましたが、やはりダメですね。
227 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 19:09:53 ] javacのバージョンは? DoJa5.0のマイナーバージョンは?Eclipseの場合だけど、特定のバージョンだけ起動できなかったことがある。
228 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 19:16:54 ] >>227 java -version java version "1.4.2" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28) Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode) これではないのですか? あとDoJa5.0のマイナーバージョンは3.00です。 Eclipseは使ってません。
229 名前:213 [2007/09/26(水) 19:23:44 ] >>198 processEventにsynchronizedを付けて、 トレースモードにしたアプリをアップしました。↓ ttp://wave.no-blog.jp/test/test.html エラー情報頂けるとありがたいです。 (FallSでエラー出る方もいらっしゃれば・・・)
230 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:59:02 ] >>229 D902iで、WaterP v4、WaterP2ともにαエラー発生。 ALERT: java.lang.OutOfMemoryError FallS v1は問題なく動きますな。
231 名前:229 [2007/09/26(水) 23:31:03 ] >>230 予想通りのエラーですね。 ということで、対策デバッグ版アップしました。(同ページにて) ・System.gc()を初期化後に実行する:WaterP3 ・定期的に実行する:WaterP4
232 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:20:56 ] processEventにsynchronized付けるとキー入力が遅くなると思うんだが。 processEventにはsynchronizedをつける必要ない設計するのがセオリーなんじゃないの? と公式アプリつくってる者の意見でした。
233 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 02:32:44 ] paintをsynchronizedする人なら見たことあるけど、processEventはないな。
234 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 03:13:02 ] >>216-218 何か話が噛み合ってない気が… 以下2メソッドは同意。 public synchronized void processEvent(){ //... } public void processEvent() { synchronized(this) { //... } } synchronizedを指定したオブジェクトに対して、別スレッドから参照が行われた場合、 synchronized対象のロックが切れるまで、別スレッドは待ち状態になる。 2つのスレッドからprocessEventが呼び出されたとして、 先に呼び出されたほうがthisをロックする。 後から呼ばれたほうはthisのロックが解除されるまで待ち。 thisのロックが解除されるのはsynchronizedスコープの後なので、 その間呼び出されるメソッドもロック中と同等の動作になる。 >processEvent()から呼んでるメンバは全てsynchronizedである必要がある これはちとオーバーじゃないかね(´・ω・`)
235 名前:デフォルトの名無しさん [2007/09/27(木) 18:05:22 ] ちょっと教えてください iアプリを作って配付する場合 microSDに入れて配付とかした場合、アプリを起動できないですよね? ネット上から落としてもらうしかダメなんですかね?
236 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:16:55 ] うん、そう。
237 名前:デフォルトの名無しさん [2007/09/27(木) 18:29:16 ] なんとかやり方ないのかねえ まあネット上に置いてあったからってだれかれ構わず見つけて落とされることはないと思うけど できれば配付した人を特定しておきたいからminiSDなりmicroSDなりで配付したいんだけどなあ
238 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:31:25 ] DL時に特定できるように会員認証でもつければ良いんでないの? それくらいのCGIは書けるでしょ
239 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 19:08:26 ] >>231 WaterP3は5秒でOutOfMemoryだが、WaterP4は落ちなくなってた。 ただ、2〜5秒ほど動いては1秒以上停止(おそらくGC)するので、 アニメーションがウリのアプリとしては致命的だろうな。
240 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 19:24:33 ] > それくらいのCGIは書けるでしょ
241 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 19:50:56 ] >>219 doja.exeをダブルクリック等で直接起動させたときに動かないのか? それとも、バッチファイルやコマンドプロンプトから -i や -j などの オプションをつけて起動したときに動かないのか?
242 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:59:42 ] >>237 先に配布予定者の端末IDを聞いておいて、それに適合する場合のにDL可能ってどうよ?
243 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 21:48:11 ] じゃあ白ロムにアプリを移すのも無理なんですか?
244 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 22:33:41 ] 配布した人を特定したいのにminiSDで配布出来たら、その時点で意味ないだろ。 やるならシリアルナンバーでも配るしかないな。
245 名前:デフォルトの名無しさん [2007/09/27(木) 22:37:13 ] >>237 SDにキーデータファイルを入れて、 それがなければ初回起動できないようにするとか。
246 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 23:08:37 ] >245 何も知らなければ全部コピーすると思わないのかい。
247 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 23:45:20 ] >>245 そこまで自由度のあるSDへのアクセスそのものをiアプリからはできないわけだが まぁ実用的に落とした人を断定しておきたかったら落とす場所を 携帯でアクセスしか出来ないようにした上にBASIC認証にでもして 落とせる人、一人一人にIDとパスを割り振った上でアクセスログを取って 明らかに不特定多数からそのIDとパスが使われてたらそのIDとパスを停止する形にするとかかな むしろSDに入れて配布なんて方法の方が中身の全ファイルをzipで固めてどこかにアップされれば 完璧アウトな上に流通を止める手段がないよ
248 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 23:52:10 ] >>242 に一票
249 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 00:49:01 ] 質問させてください。 iアプリでソケット通信をする事は可能ですか? 調べていると出来ないように感じたのですが、その場合自前で用意したサーバにアクセスするにはHTTPで接続しにいくしかないですかね?
250 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:06:57 ] >>219 関係あるかどうか判らないけど。 うちは1.4.2でDoJa入れたら駄目で、 今は1.5.0_12でチャンと動いてる。
251 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 02:36:14 ] >>249 はい
252 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 03:15:00 ] ttp://www.mitsubishielectric.co.jp/giho/0502/0502110.pdf DってJITしてあの速度? 冗談はよしてくれ。
253 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 03:38:31 ] >>251 やっぱりそうですか。 ソケットを使って書いていたので、何かいい方法がないか、それともCGIやJSP等の方がいいのか検討してみます。 ソケット通信でも自分でHTTPヘッダを処理してやれば大丈夫なのかなぁ・・・。 色々調べてみます、ありがとうございました。
254 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 04:12:32 ] >>252 これは嘘じゃね?
255 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 07:52:02 ] >>249 iモードはソケット通信できないよ HTTP通信はOK HttpConnectorとか読んでみ
256 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:51:23 ] >>252 ほかの機種もJITなんじゃね?
257 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 13:51:48 ] まさか
258 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 14:06:27 ] >>252 >D505 i,D505 iS,D506 i,D900 iに実装している。 全部糞端末じゃねぇかw
259 名前:231 [2007/09/28(金) 20:54:05 ] >>239 ありがとうございます。 もしかすると、メモリ使用量増加の原因が分かったかもしれません。 ↓WaterP5で落ちるかどうか試してみてください。 www.i-paradise6.jp/~physics/test/test.html (サイトがちょっとトラブっているので、別の所にアップしました。)
260 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:00:46 ] >>259 WaterP5でもOutOfMemoryだった。 計算して線を描くだけならメモリ食わないと思うんだが。。。
261 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:55:16 ] すみません、Eclipse3.2、または3.3にて、エミュレータが起動した瞬間に落ちてしまうようになりました。 ビルドでエラーは出ず、JARファイルは生成されています。 DoJa5.0ツールで直接ビルド、起動した場合は正常に起動、動作します。j2sdkはは1.42です。 Eclipseを介してビルドした物はDoja5.0ツールから起動しても落ちます。 また少し前まではEclipseでも正常に起動していました。(ただし途中で落ちてました。) 何か設定を弄ってしまったのかもしれませんが、Eclipseに明るくなく、対処方法がわりませぬ。 思い当たる節があれば是非教えてください。
262 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:00:15 ] Stringの中身を消すとき str="";とstr=null; ってどっちの方がメモリ節約できますか?
263 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:58:55 ] 消すという概念自体がjavaに当てはまらない気がするが ガベコレに拾ってもらう上で""(空文字)オブジェクトが生成されない str=null;の方が節約って意味では確実なんじゃない? str="";は結局str=new String("");って事だから古いstrの中身は消えるだろうけど 新しいStringオブジェクトが生まれてるよ
264 名前:259 [2007/09/29(土) 01:13:49 ] >>260 そうでしたか。 getImageでImageをpaint内で生成しているのが原因かと思ったのですが・・・。 (描画の重ね合わせに、Graphics2.setRenderMode()と合わせて使用) 色々調べてみたところ、 さらにImageをdisposeしていないのがまずいような気がしたので、 getImage前にdisposeするようにしてみました。(WaterP6)どうでしょう。 あと、このgetImageをスイッチできるようにしました。
265 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 01:40:57 ] >>263 文字列リテラルはクラスがロードされたときに生成されて、 str = ""; は str がそれを指すようになるだけ。 そのたびに新しい String オブジェクトが生成されたりはしない。
266 名前:261 mailto:sage [2007/09/29(土) 02:06:39 ] すみません、自己解決しました。 デバッグの仕方を勉強して実行したたところ、 ALERT: java/lang/ClassFormatError: Bad version information. が出てて、JRE1.5でビルドされているのが問題のようでした。コンパイル設定変えたら動きました。 1.4のbinフォルダにパス通したのはエミュレータ動作用だったのかな。 スレ汚しすまそ
267 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 02:07:10 ] >>261 3、4回、マイナーバージョンの違うDoJaを交互にインストール・アンインストールして直ったことがある Eclipse 3.2.0 + Windows Vista + JDK 1.6
268 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 02:46:53 ] >>264 D902iでWaterP6テスト。 blurをonにした瞬間、NullPointerExceptionで落ちることがあるのはご愛嬌として、 OutOfMemoryは起きなくなったみたい。 たしかに毎フレームGraphics2#getImage()はメモリ食いそうだなぁ。
269 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 03:46:10 ] >さらにImageをdisposeしていないのがまずいような気がしたので、 脱力系のオチかよ
270 名前:264 [2007/09/29(土) 09:01:18 ] >>268 よかった。 getImageで上書きされるものと考えていたのが問題でした。 普通の使い方ならば、ガーベージ自動処理のタイミング的に大丈夫なのでしょうね。 他のアプリにも同様の処理をしているものがあるので、 アプリの機種違いによるエラーは、これで解決しそうです。 (アプリ_FallSのエラーは、現行ver.では起きないようなのでOKです。) お手伝いいただき、ありがとうございました。
271 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 13:53:15 ] 毎回getImageするより、オフスクリーンバッファを2枚用意したほうがいいんじゃないか? Imageの描画コンテキストはGraphics2にキャストできないんだっけ?
272 名前:デフォルトの名無しさん [2007/09/29(土) 14:42:06 ] Imageに対して直接Graphics2の描画(加算レンダリング)をするって事ですよね? 確かにその方法は良いと思います。 できるのであれば、どなたか教えてください。
273 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 15:29:39 ] >>272 確かにその方法は良いと思ったんなら、まず自分でやってみろよ。 良いと思うほどなんだから実現の可能性があることは自分でも分かってるんだろ? 教えてくださいじゃなくて、コード書くのが面倒なのでかわりに書いてくださいじゃないのか?
274 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 18:36:19 ] ってか、いきなりレベル低くなったな
275 名前:272 [2007/09/29(土) 19:26:02 ] >>273 こうすれば良いのですね。 Graphics gi=image.getGraphics(); Graphics2 g2=(Graphics2)gi;//簡単な事なのに、これを思い付けませんでした。 で、この方法で組み直したところ、1つ問題が出てきました。 drawLine((i+1)*d,y[i+1],i*d,y[i]);//(d:1ラインの横方向の大きさ) 曲線を連続したラインで表現するため、↑のようにしていたのですが、 これだと、隣のラインと1ドット重なってしまい、 当然、加算していくとそこだけ色が変わって ・・・ 1ドットずれた位置の変位yを計算する方法↓で自己解決しました。 drawLine((i+1)*d,y[i+1]+(y[i+1]-y[i])/d,i*d,y[i]); (厳密には変位が大きくなるとラインが途切れることになりますが) これでgetImage()よりは軽くなったはず。(多謝)
276 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 02:24:48 ] 他人のアプリのそんな細かい部分を語られても さっぱり分からないが、動いたのならおめでとう。 それにしてもモーションブラーが実装できる時代になったんだなぁ。
277 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 16:08:11 ] 最近JAVAプログラムを始めた初心者です。 リアルタイムなゲームを作ってみようと思って色んなサイトを参考にしながら作ろうとしています。 で、現在はスレッドを一つ作ってその中で無限ループさせているのですが、一つ疑問が浮かびました。 スレッドの入り口(無限ループの外)にSystem.out.println("スレッド実行");と書いた場合、ひたすら"スレッド実行" という文字が出力されていました。これはスレッド自体が無限ループのように呼び出されている、という事 なのでしょうか? ソースの例は以下のような感じです…。 public class applitest extends IApplication{ public static testCanvas a_test; public void start(){ a_test = new testCanvas(); Display.setCurrent(a_test); a_test.start(); } class testCanvas extends Canvas{ public void start() { System.out.println("スレッド実行中"); while(true){ //メインループ try{ Thread.sleep(30); } catch(Exception e){ } repaint(); } } } }
278 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 16:10:25 ] うん?どこでスレッドを作ってるんだ?スレッドを作ってるようには見えないが・・・
279 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 16:31:08 ] >>277 スレッドが作れて無いようだが? 基本的にThreadクラスから継承するんじゃないならRunnableインタフェースを実装しなきゃだし スレッド実行開始はThreadクラスのstart()だがスレッドの実体はどっち方法で実装してもrun()だぞ? 後Canvasのpaint()はabstractだから省略できんだろ、例として書くならそこも簡単でイイから書きなさい 一応IApplicationのstart()とCanvasのイベントメソッドが別スレッドになるかも?というのを使って IApplicationのstart()でCanvas内の無限ループメソッドを使ったメインループ作成方法はあるけど これはスレッドを自分で作ってるとは言わないし機種に依存するはず(動く場合が多いけど)
280 名前:277 mailto:sage [2007/10/01(月) 17:35:39 ] あれっ、本当だ…。Runnableが実装されてませんね…。 よく考えたらスレッドを作成して動かしてるのはVアプリ用の方でした。 こちらの方法はスレッドじゃないですね…失礼しました。 しかも279さんの仰る通り簡略化しすぎてました…。 とは言えせっかくなので教えて頂ければ幸いなのですが (改行エラーが出たのでソースは次に書きます) →ソース という感じで作っています。この場合、自分は a_test.start(); によってtestCanvas内のstart()メソッド が一回だけ実行され、その中の無限ループでグルグル処理をするっていうイメージで作ったんです。 しかし実際にはtestCanvas内のstart()メソッドが何度も実行されているようなのです。 物凄い勢いで”実行中”というトレースを吐き出します…。 質問自体分かりづらくて申し訳ないのですが、なぜtestCanvas内のstart()メソッドが何度も呼び出される のか、ご教授願えれば幸いです。
281 名前:277 mailto:sage [2007/10/01(月) 17:36:30 ] public class applitest extends IApplication{ public static testCanvas a_test; public void start(){ a_test = new testCanvas(); Display.setCurrent(a_test); a_test.start(); } class testCanvas extends Canvas{ public void start() { System.out.println("実行中"); while(true){ //メインループ repaint(); try{ Thread.sleep(30); } catch(Exception e){ } } } testCanvas(){ //色々処理 } public void paint(Graphics g){ //描画 } } }
282 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 17:38:37 ] >IApplicationのstart()でCanvas内の無限ループメソッドを使ったメインループ作成方法 Fの505,506,900でこれやると、processEventとmediaActionに処理こねぇ(ノд`)
283 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 17:41:25 ] Eclipseのデバッグモードで確認すれば一発
284 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 17:58:10 ] >>280 これ実機の話か? 取り敢えずDoJa5.0のエミュ上だと"実行中"は1度出力されるだけだ a_test = new testCanvas(); の前に System.out.println("起動"); a_test = new testCanvas(); ってやるとどうなる? IApplicationのstart()がループしてるのか、Canvasのstart()がループさせられてるのか切り分けてみ
285 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 18:02:28 ] あ、後当然ながらstart()とprocessEvent()の両方からアクセスしてるメンバは全部synchronizedになってるよな?
286 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 23:20:27 ] >>282 マジ? ずばりこのやり方で作りまくりなんだけど、、 Fの901以上とか700は大丈夫なの?
287 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 00:09:24 ] >>286 この手法って機種依存じゃないの? IApplication.start()がCanvas.processEvent()とは必ず別スレッドで呼ばれることが保証されてるってどっかドキュメントに書いてある?
288 名前:282 [2007/10/02(火) 02:51:23 ] >>286 実は端末がなくて、そこまで調べていない。 とりあえずデバッグ時に、手元にあった上記の三つは動作しなかったので 直した。その他の端末は、修正後に検証センターで端末チェックしたので その他のF機についてはわからない。
289 名前:286 mailto:sage [2007/10/02(火) 06:45:39 ] >>282 >>287 10K制限の時から気にせずやってたけど、 今は容量制限もゆるいし普通のやり方が一番安全ですね。
290 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 11:26:51 ] 俺もstart()で無限ループやりまくってるw リリース前にゃ全端末チェックして貰った事もあるけど 問題なかったなぁ。ユーザからクレームも上がってない。 んまぁ音鳴らすアプリが殆どない上processEvent使ってないし 気づかなかっただけかもだけど。
291 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 11:45:28 ] 過疎ってる(゜Д゜)
292 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 14:12:31 ] おうよ
293 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:59:45 ] ネット上のAPIリファレンスの見方を教えて下さい 全然分かりません
294 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 10:43:16 ] ネット上にDojaのAPIリファレンスなんてあったっけ? ここからダウンロードして使ってえば。 ttp://www.nttdocomo.co.jp/service/imode/make/content/iappli/about/index.html
295 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 01:17:55 ] このHPなんだけど(Doja5.0) www.rcdtokyo.com/man/doja/api/index.html 例文が全然ないから書式が全然分かりません できるだけ詳しく教えてください
296 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 01:20:24 ] それはまず Java の勉強をするべきでは?
297 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 03:16:15 ] >>295 まず初心者用のjavaの勉強から始めるべきだし もしjavaの勉強のためにDoJaを使おうとしてるなら奨めはしないが どうしてもというならiアプリ開発解説系サイトの初心者講座を見てhello worldからはじめるべきかな その上でまずDevGuide.pdfとjguidefordoja5_x_070423.pdfを内容覚えるぐらいに読んでおく APIリファレンスはリファレンス(参考書)であって入門書ではないからリファレンスだけを見ても iアプリは作れるようにはならないよ? もちろんjavaの事を既によく知っていてSwingとは言わんからAWTでいいから使ったことがあるとかなら DevGuide.pdfとjguidefordoja5_x_070423.pdfを適当に流し読みした後にAPIリファレンスだけあれば iアプリは作れるだろうけどね
298 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 22:08:04 ] 初心者用のjavaの勉強は5年もしました しかしDojaのAPIリファレンスは難解すぎて理解できません もうやめます
299 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 22:59:52 ] Java で5年間何をやってたのか気になるところだな。
300 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 00:44:16 ] 5年間ずっとjava初心者用HPのサンプルコードのコピペを続けてたのだろうか? それはそれで根気があるが……
301 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 00:45:41 ] ネタだろ。 数年前に一週間程度java勉強しただけの俺でも何とか分かる。
302 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 21:54:18 ] しかしそれは本来のJavaでなく携帯向けJavaだったのだ
303 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 02:10:42 ]  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」 ―――――――――――――‐┬┘ | ____.____ | | | | | | | ∧_∧ | | | |( ´∀`)つ ミ | | |/ ⊃ ノ | |  ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ミ [本来の Java]
304 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 03:35:34 ] >302 携帯向けのJavaが偽物みたいにいうな禿
305 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 03:57:13 ] 携帯向けのJavaなんて存在しないんだけど?w
306 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 05:14:54 ] JavaME
307 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 07:53:16 ] CLDCとMIDPの立場って一体……