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


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

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



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/


116 名前:112 mailto:sage [2007/09/03(月) 22:49:33 ]
情報ありがとうございます。
N902iでは見れないみたいです。(AppTrace=off)
903は白ロム買って確かめてみます。

117 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 02:17:56 ]
jamの置いてあるフォルダを知られたくない理由が知りたいな
DirectoryIndex対策か?

118 名前:デフォルトの名無しさん [2007/09/04(火) 12:19:47 ]
>>97
遅レスすまん。
一応、iαppliTool for Doja-5.0 の『設定→トラステッド動作設定』 で、『OpenGl/ES機能の使用許可』をYesにしているけどだめです。
ADF設定のTrustedAPIDを入力しないとエミュでもだめなんですかね?勝手なんで、そんなものもらってないし。



119 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 12:37:12 ]
エミュのTrustedAPIDは桁数だけ合わせて(11桁?)
適当なの突っ込んどけばOKだった気がする。

120 名前:112 mailto:sage [2007/09/04(火) 12:44:59 ]
>>117
PCから見られるのが嫌なので。
レンタルサーバでhtaccess使えないんです。

121 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 14:42:38 ]
>>120
CGIが使えるようならPerlとかPHPでリモートホスト見て
jamを吐き出すスクリプト書けばいいんじゃない?
有料のアプリなんかは課金チェックや機種判別も含めて
そういう手法取ってるから

122 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 14:55:35 ]
>>119
マジで!?
ちょっと試して見るわ

123 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 15:04:13 ]
jamのアドレスがバレると、リソースの場所も推測されてしまうことがあるから、見せない方がいい。
某ネットワークRPGアプリがAppTrace=onで出したから、シナリオが丸見えになった。

124 名前:デフォルトの名無しさん [2007/09/05(水) 11:28:05 ]
>>119
あ、うごいたっぽい。
ありがとう。




125 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 04:16:08 ]
RSS読む用のXMLのパーサを今作ってるDoJaアプリにインポートしたいんだけど.
軽くてお勧めなのある?

126 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 22:31:26 ]
教えてください。
アプリで画像表示中に音楽(3GP)ファイルを再生したいんですが、
AudioTrackPresenterで間違いないですよね?
エミュレータだと代替音楽のような曲が鳴るんですが、
実機だと何も鳴らない…
もちろんマナーモードではないです。

127 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 01:01:54 ]
AudioTrackPresenterはオプションAPI
SH、D、Fのみ対応
非対応機種はUnsupportedOperationException

128 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 02:37:48 ]
>>125
ttp://www.horobi.com/xml/mobile/report.html
を参考にして
ttp://kxml.sourceforge.net/kxml2/
これを使ってる。

129 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 14:06:42 ]
128を見ていて思ったけど、
BSDライセンスの場合は、サイト内のダウンロードページにライセンス条項を載せるだけでいい?

130 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:43:57 ]
「いい」ってのがどういう意味かによる
もっと具体的に

131 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:24:01 ]
>>127

ありがとうございます!
Nで試してました…
VisualPresenterを使うとすると、
ネイティブのプレイヤーが起動するから、
画像のバックで音楽再生はできないんでしょうか?

132 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:35:42 ]
質問させて下さい!
当方ゲームを作っているのですが、サウンドのループでつまずいています。
canvasのクラスにMediaListenerをimplementsしているんですが
曲の再生が終わっても(その他再生を開始たりしても)mediaActionに処理が
飛んでこないんです…。
ソースの概要はこんな感じです。

class game1 extends Canvas implements MediaListener{
各種処理
game1(){
各種処理
オーディオプレゼンター.setMediaListener(this);
}
public void mediaAction(MediaPresenter source,int type,int param){
System.out.println("処理が来た!");
}
}

よろしくお願い致します。

133 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:55:48 ]
>>131
3gp形式などは不可。
機種別のMFi形式を使うしかない。
>>132
参考例
ttp://iappli.kajas.com/sec0205/

134 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:14:37 ]
>>132
audio.setAttribute( AudioPresenter.SYNC_MODE, AudioPresenter.ATTR_SYNC_ON );
audio.setMediaListener( this );

audioは取得したAudioPresenter。
SYNC_MODEを設定しないと同期イベントは発生しないかと。





135 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 09:59:17 ]
>>134
SYNC_MODEはあくまで同期であって、それを設定しないからといって
mediaActionに処理が来ないわけではない。
>>132はmediaActionに処理が来ないと言っている。

136 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 10:07:40 ]
大方processEventでループしてたりするんじゃない?


137 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 12:52:40 ]
サウンドデータの問題かもな
曲が終わってから5分くらいしないとそこに行かないデータが前にあった

138 名前:125 mailto:sage [2007/09/11(火) 14:19:40 ]
>128

返事遅くて済まん
そのページは知ってたんだが,
2002年の報告だから今はどうなってるのかなぁと思って聞いてみた,
ともかくサンクス

139 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:57:50 ]
>>126さんに便乗して質問なんですが、
ゲームの中で効果音(1秒くらい)として3gpを再生したいのですがなぜか
ap.play();をしてからどうしても1〜2秒のラグが出てしまいます。
携帯はSH903iなんですが、携帯に問題があるのか、ファイルなのか
仕様なのか何なんでしょうか?

にしてもiアプリの音楽再生に関する詳しいページって少ないですね・・・。

140 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 01:29:15 ]
play(1ミリ秒単位)を入れるのねんのねん。
そうすると()内に入れた秒数から音楽がスタートするから
タイムラグを解消できるのねんのねん。
機種依存命令だけど903シリーズなら大丈夫じゃまいか。

141 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 01:40:39 ]
>>132
メディアアクションはpublic voidじゃ機能しないよん〜〜〜
だってpublic voidは呼び出して機能させるしかないからねんのねん
public classを作ってメディアアクションさせなきゃだめよ。
つまり別のclassを作るってことよ。わかったかしらあん〜〜〜はあと

142 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 03:15:57 ]
>>141
言ってる意味がよくわからんが、俺も>>136が怪しいと思う。
あるいは別のAudioPresenterをnewしていて、そっちでplay()してるとか?

143 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 06:18:58 ]
流れを切ってすみませんが、ご助言願います
以下のように、イメージを右に移動させる処理を組んでいますが、
イメージの移動した跡に残像が残り続けてしまいます。

while(true){
g.lock();
g.drawImage(image, x, y);
g.unlock(true);
x++;
//スリープ処理
}

ループ中に、g.clearRect(0, 0, getWidth(), getHeight());を追加すると解決したのですが、
参考とさせて頂いたこちら(ttp://www.doja-developer.net/_up/features/UE051011/index.php?id=71)の
サンプルソースでは、このような処理は行われていないようです。
サンプルソースでは、特に明示的に画面のリフレッシュを行っていないようなのですが、
同じように組んでも残像が発生してしまう理由を教えてもらえないでしょうか?
よろしくお願いします。

144 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 06:24:08 ]
>>141
MediaListener実装クラスがpublicじゃないと駄目ってことか?



145 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 06:28:37 ]
>>143
描画前に画面をクリアないと前の画面にそのまま上書きするからそうなる
サンプルでは68行目のfillrectで画面をクリアしてる

fillrectはsetColorで指定した色で塗りつぶす
clearRectはデフォルトの背景色で塗りつぶす

146 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 07:25:27 ]
>>145
即レスサンクス!
clearRectの先入観があってfillRectが目に入らなかった様です
要するに、実際のゲームアプリ等で応用する場合には
先に背景を再描画してしまって一度画面をクリアすれば良いわけですね

147 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 07:49:09 ]
背景が部分描画なら、はみ出した部分クリアしないと残るけど
全画面背景描くならクリアする必要ない

っていうか背景描いた後に画面クリアしたら背景消えちゃうぞ

148 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 09:26:27 ]
>147 多分意味は通じてると思うぞ
>146の頭の中では 背景を再描画する=画面をクリアする って意味なんだろう
まぁ>146の言い方が悪いんだけど初心者だしな

149 名前:139 mailto:sage [2007/09/12(水) 19:13:58 ]
>>140
今ちょっと試したんですが、やっぱり開始は遅く音が途中から再生されただけでした。
そもそもこの音はwavで作ってSoundEngineで無音部分を完全に切り取り、
3GP Converterで変換してるので一応ファイルの中にラグは無いはずなんです。
ただ3GP Converterで最初やったときなぜかデータが途中までになってしまい、
しょうがなくwavのケツにちょっとだけ無音を足して、途中で切れても音は聞こえるようにした。
という経緯があるので、ここが怪しいかな・・・?とは思ってるんです。
誰か同じようなことあった人居ますか?


150 名前:デフォルトの名無しさん [2007/09/13(木) 04:35:44 ]
便乗で質問させていただきます.
>>128で紹介されているライブラリの
kxml2-min-2.3.0.jar
をDLし既存のDoJaアプリに追加してみたんですが,
追加下だけのときは問題ないのに,
実際参照すると,start()を内包するクラスが見つからないと
実行時エラーが起こり,
携帯のエミュレータが一瞬だけ出現してきえてしまいます.

外部Jarの追加はプロジェクト右クリックの「ビルド・パスの構成」から
外部Jar追加ボタンで参照したのですが.
間違ってたり抜けがありますでしょうか.

どなたかお願いします.

151 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 10:08:39 ]
答えるわよ―!

152 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 15:50:53 ]
>>150
DoJaが外部Jarに対応してない気がする


153 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 15:53:41 ]
ドージョ ドージョ

154 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 17:43:37 ]
>>149
それは携帯での動作?
エミュだとPCによると思うけど処理速度ムチャクチ遅いときあるわよ
音楽に限らず画像の処理速度も携帯とPCじゃ大違いだわ




155 名前:149 mailto:sage [2007/09/13(木) 21:08:08 ]
>>154
実機です。エミュだと変なピアノ曲が出るんですよね・・・


156 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 01:21:15 ]
Eclipse 3.3でも使えてる?

157 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 17:31:51 ]
>>155
ドコモとしては、効果音はmldを使え、勝手アプリ作者はシラネだろう。

158 名前:155 mailto:sage [2007/09/14(金) 19:21:57 ]
>>157マジすか・・・
ADPCMだと3gpより容量食うくせに音質死ぬほど悪いんすよね。
Doja5携帯ってADPCM何Hzまで使えるんですか?

159 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 22:06:10 ]
あくまで携帯なんだから低機能を生かしたアプリ作らんと


160 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 03:24:00 ]
>>158
ADPCMはたしか音源チップに依存していて、DoJa5.0でここまでという決まりはないはず。
でも勝手アプリなら、wav2mldやYamahaのツールの制限を考えて、モノラル、16bit、16kHzくらいじゃね。

161 名前:155 mailto:sage [2007/09/15(土) 13:30:59 ]
>>159
とあるスーファミソフトを移植中でして・・・忠実に再現したいんですよ・・・。

>>160
回答ありがとうございます。
そうですか・・・いっそwav2mldを自前で とも思ったんですが、ツールでやってみます。
お世話になりましたm(_ _)m

162 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 19:13:50 ]
忠実に移植して著作権侵害にならないんですか?


163 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 20:18:54 ]
AFO?

164 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 22:22:00 ]
坂田師匠のことかー!



165 名前:その1 [2007/09/18(火) 12:11:17 ]
エミュ上でOpenGL ESを試しているんですが、なにやってもプリミティブが描画されません。
かといってエラーが出たりはしていません。クリアは指定された色でクリアするんですが。
なんかやんなきゃいけないことあります? 

初期化メソッド内
float[] meshArray = new float[ 5*3 ];
meshArray[0*3+0] = 0; meshArray[0*3+1] = 40.0f; meshArray[0*3+2] = 0;
meshArray[1*3+0] = -40.0f; meshArray[1*3+1] = -40.0f; meshArray[1*3+2] = 0;
meshArray[2*3+0] = 40.0f; meshArray[2*3+1] = -40.0f; meshArray[2*3+2] = 0;
.. VertexBuffer = DirectBufferFactory.getFactory().allocateFloatBuffer( 5*3 );
VertexBuffer.put( 0, meshArray, 0, 5*3 );
...


166 名前:その2 [2007/09/18(火) 12:12:02 ]
public void paint( Graphics g ) {
GraphicsOGL gl = (GraphicsOGL)g;
gl.beginDrawing();
gl.glViewport( 0, 0, 240, 240 );
gl.glDisable( GraphicsOGL.GL_CULL_FACE );
gl.glDisable( GraphicsOGL.GL_DEPTH_TEST );
gl.glDisable( GraphicsOGL.GL_LIGHTING );
... gl.glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
gl.glClear( GraphicsOGL.GL_COLOR_BUFFER_BIT );
gl.glEnableClientState( GraphicsOGL.GL_VERTEX_ARRAY );
gl.glDisableClientState( GraphicsOGL.GL_NORMAL_ARRAY );
gl.glEnableClientState( GraphicsOGL.GL_COLOR_ARRAY );
gl.glDisableClientState( GraphicsOGL.GL_TEXTURE_COORD_ARRAY );
gl.glVertexPointer( 3, GraphicsOGL.GL_FLOAT, 3*4, VertexBuffer );
gl.glColorPointer( 4, GraphicsOGL.GL_FLOAT, 0, ColorBuffer );
gl.glMatrixMode( GraphicsOGL.GL_PROJECTION );
gl.glLoadIdentity();
gl.glMatrixMode( GraphicsOGL.GL_MODELVIEW );
gl.glLoadIdentity();
gl.glTranslatef( 100, 100, 10 );
gl.glDrawArrays( GraphicsOGL.GL_TRIANGLES, 0, 1 );
gl.glDrawElements( GraphicsOGL.GL_LINES, 2, GraphicsOGL.GL_UNSIGNED_SHORT, IndexBuffer );
gl.endDrawing();

}


167 名前:165 mailto:sage [2007/09/18(火) 20:12:44 ]
自己解決しました。


168 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 20:36:40 ]
プリミティブってなんですかぁ?


169 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 20:39:08 ]
点と線とポリゴンのことです

170 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:28:28 ]
>>167
よく読んでないけど何がどう解決したのか知りたい。

171 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:44:56 ]
どう考えてもこれだろw
>gl.glMatrixMode( GraphicsOGL.GL_PROJECTION );
>gl.glLoadIdentity();


172 名前:165 mailto:sage [2007/09/19(水) 12:37:32 ]
正解:
・指摘されている通り、射影変換マトリクスが単位行列なら、Viewport変換のためにメッシュデータは[-1,...,1]に正規化されてなければなりません。
・DrawArray() と、DrawElements() の int count パラメータが、プリミティブ数でなく頂点数でした。
ついでにもう一つハマッタのが、glBindTexture, glTexImage2D やっただけではテクスチャーが貼られず、glTexEnvfやTexParameterfでテクスチャーステートを設定しないとだめ。


173 名前:デフォルトの名無しさん [2007/09/22(土) 16:53:30 ]
Graphics2 に対応している機種って、もしかして相当少ないんでしょうか。
機種依存ないつもりが、結構起動できない機種があるようなんです。
誰かご存じないですか。

ちなみにこんなアプリです。 ttp://wave.no-blog.jp/iapp.html

174 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:06:06 ]
機種依存のAPIの情報は、公式サイトにあります



175 名前:デフォルトの名無しさん [2007/09/22(土) 18:49:49 ]
ありがとうございます。
灯台もと暗しですね。問題はGraphics2ではないみたいですね。
しかし、他に機種依存な部分は見あたらないんですが・・・。
もう少しソースを見直してみます。

176 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 19:20:08 ]
内容からいっていろいろ計算使ってそうだけど、CLDC1.1の機能使っていながら
1.0機種を対象OKにしてるとかそんなことないの?
つまりfloatとかdoubleとかMath使ってないか、ということだけど

177 名前:デフォルトの名無しさん [2007/09/22(土) 20:33:57 ]
いえ、floatもdoubleもMathも使わず、intとlongと自前関数のみで作ってます。

178 名前:デフォルトの名無しさん [2007/09/22(土) 20:37:36 ]
なぜだか、P903iはOKで、SO903iやF904iなどでエラーが出るようなんです。

179 名前:デフォルトの名無しさん mailto:age [2007/09/22(土) 21:46:35 ]
東大元暮し

180 名前:デフォルトの名無しさん mailto:age [2007/09/22(土) 21:54:00 ]
// エラー デバッグ ブラウザ ツール
// www.mozilla-japan.org/
// シンプル プログミング ツール
// proforceone.web.fc2.com/
// 素因数分解サンプルプログラム
// Calculation processing にコピーして[RUN]

MAX=1000;br();
for(x=2;MAX>=x;x++){write(" "+x+" ⇒");
 for(i=2;x>=i;i++){if(0==x%i){k=0;
  for(j=2;(i>=j)&&(1>=k);j++){
   if(0==i%j){k++;}
  } if(1==k){write(" "+i);}
 }} br(); 
} br();


181 名前:デフォルトの名無しさん mailto:age [2007/09/22(土) 23:00:35 ]
anti.bne.jp/neta/yamada2.swf

182 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 02:31:41 ]
>>178
勘なんだけど、Javaヒープとネイティブデータヒープにメモリーが分かれてる機種って
リソース不足になりやすくてエラーが出るんじゃないかな?
なぜメモリーに余裕があるはずなのにメモリー不足になるのかは意味不明

考えられる対策は a[50000] まで使う配列なら余裕もって int a[]=new int[60000] と宣言してみるとか
ガーベッジコレクションを使う手とかあるけどこちらは重くなるから実用的じゃない
でもこれらで解決するかは不明

そもそも端末の仕様のバグなのにいつまでも修正しないメーカーが悪い



183 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:19:09 ]
>>174
公式には900の一部の機種までしか情報が開示されてないんだよね


184 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 11:12:38 ]
>>178
起動エラーとアプリ(aマーク)エラーは別なんじゃない?
プロファイル定義ミスで、ダウンロード対象から外れて怒られるとか
そういう類のエラーを想像してた

まあ173はもうちょっと自分で具体的に何のエラーかぐらいは突き止めんと無理だわな



185 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 11:13:57 ]
すまん
× >>178
>>182

186 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:06:15 ]
そっか
起動できないってあるからな
だとするとスクラッチパッドにlengthつけてないとかか?
いずれにしてもヒープフラグメントとかいうメモリの問題だけど

187 名前:デフォルトの名無しさん [2007/09/23(日) 14:22:35 ]
起動直後に「エラーが発生しました」と表示されるらしいのですが、
この場合、@対応していない命令が含まれていた。
もしくはAヒープメモリ関係。
が原因と言っていいんでしょうか。

188 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 14:37:49 ]
っ 例外をcatchして表示させてみる

189 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 15:18:39 ]
catch出来ない部分で落ちてる予感

190 名前:デフォルトの名無しさん [2007/09/23(日) 15:33:19 ]
当方の機種(P903i)ではエラーが出ないので、
catchもできないんです。

191 名前:デフォルトの名無しさん [2007/09/23(日) 15:40:03 ]
起動できない機種だけでも、もう少し分かるといいのですが・・・。
(SO903i,F904iでは起動時にエラー)
このアプリです。→ ttp://wave.no-blog.jp/FallS.html

192 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:02:21 ]
>>190
そりゃ当然catch入りバージョンをエラーの出る機種で動かさなきゃ意味ないでしょ

193 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 19:00:34 ]
トレースの結果はどう出てるんだ?
それ次第って気がするが

194 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 20:44:09 ]
俺の勘がソースを良く読んだら解決しちゃう系
なんじゃねーかと告げてるw



195 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 20:51:41 ]
コンストラクタかstart()の中で無茶なことしてんじゃねーかなに1票

196 名前:デフォルトの名無しさん [2007/09/23(日) 23:00:29 ]
ソースの読みがまだ足らないようです。(反省)
ソースの最初の部分はこんな作りですが、
どこか まずい所があるのでしょうか。
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import java.util.Random;
import javax.microedition.io.*;
import java.io.*;

public final class FallS extends MApplication{
public void start(){
Can ca=new Can();
ca.setSoftLabel(ca.SOFT_KEY_2,"help");
Display.setCurrent(ca);
Thread thread=new Thread(ca);
thread.start();
}
final class Can extends Canvas implements Runnable{
private int 〜;
private int[]x=new int[20];
〜//同様な配列宣言
private Random rnd;

public Can(){
rnd=new Random();
〜//変数初期値代入
load();
if(mem!=1){mem=1;psave=1;bg=1;balln=10;zn=0;}
}
〜〜〜
}}

197 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 02:17:01 ]
>〜//同様な配列宣言

ここで大きい配列用意してるとか
トータルで大きい容量になっちゃってるとか

198 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 03:00:45 ]
エラー状況をもっと詳しく調べるんだ!
「起動時にエラー」じゃ曖昧すぎる。
D902iだとFallSは普通に動くが、WaterPが「毎回、起動して5秒後」に落ちる。


199 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 18:32:51 ]
質問
環境Eclipse3.2.0,Doja5.0
Inputは通常通りに開けるけれども,
try {
  OutputStream out = Connector.openOutputStream("scratchpad:///0");
  DataOutputStream dos = new DataOutputStream(out);
  out.close();
}catch (IOException e) {
}
この処理で
java.lang.NullPointerException
  at ClassName.closeIApplication(+6)
ClassName
ってなるんだが・・
SPsizeの設定とSPファイルの書き込みも許可墨

200 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 18:54:32 ]
>>199
196もだけど、ちゃんと原因の切り分けをしないとだめ。
ClassName.closeIApplicationのメソッドの中身を確認する。

あと、例のソースでは、outはcloseされるけど、dosがcloseされていないから、リークするかもしれない。

201 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 19:13:24 ]
アドバイスd,これからはdos閉じてからout閉じるようにします

自分なりに切り分けたつもりで検証した結果
OutputStream out = Connector.openOutputStream("scratchpad:///0");
の時点でぬるぽらしく,そのままcatchされている模様

ClassName.closeIApplicationの中身はすっからかんで
public void closeIApplication(){
  saveIApplicationData();
  IApplication.terminate();
}
という具合です

202 名前:199,201 mailto:sage [2007/09/24(月) 19:16:05 ]
あ,saveIApplicationDataというのが199で書いたソースのあるメソッドです

203 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 20:03:26 ]
posやlengthを指定してみるとか。
スクラッチパッドのcloseし忘れがないか確認するとか。

204 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 20:56:44 ]
closesし忘れてもビルド時にエラー出ないんですか?




205 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 22:09:52 ]
ロジックの追跡と妥当性を検証してくれるビルドツールか
プログラマは種まいて見てるだけー

206 名前:デフォルトの名無しさん [2007/09/24(月) 22:49:18 ]
>>198 「毎回、起動して5秒後」に落ちる。
メモリ周りしかないですかね。
自機でエラーが再現できない以上、とりあえず
白ロム買ってみようかと思います。

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の基本って事?それとも携帯アプリでの基本って事?






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

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

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