iモード携帯電話用Jav ..
[2ch|▼Menu]
170:デフォルトの名無しさん
07/09/19 01:28:28
>>167
よく読んでないけど何がどう解決したのか知りたい。

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


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


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

ちなみにこんなアプリです。 URLリンク(wave.no-blog.jp)

174:デフォルトの名無しさん
07/09/22 18:06:06
機種依存のAPIの情報は、公式サイトにあります

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

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

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

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

179:デフォルトの名無しさん
07/09/22 21:46:35
東大元暮し

180:デフォルトの名無しさん
07/09/22 21:54:00
// エラー デバッグ ブラウザ ツール
// URLリンク(www.mozilla-japan.org)
// シンプル プログミング ツール
// URLリンク(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:デフォルトの名無しさん
07/09/22 23:00:35
URLリンク(anti.bne.jp)

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

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

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



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


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

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

185:デフォルトの名無しさん
07/09/23 11:13:57
すまん
× >>178
>>182

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

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

188:デフォルトの名無しさん
07/09/23 14:37:49
っ 例外をcatchして表示させてみる

189:デフォルトの名無しさん
07/09/23 15:18:39
catch出来ない部分で落ちてる予感

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

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

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

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

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

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

196:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/24 02:17:01
>〜//同様な配列宣言

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

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


199:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/24 18:54:32
>>199
196もだけど、ちゃんと原因の切り分けをしないとだめ。
ClassName.closeIApplicationのメソッドの中身を確認する。

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

201:デフォルトの名無しさん
07/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
07/09/24 19:16:05
あ,saveIApplicationDataというのが199で書いたソースのあるメソッドです

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

204:デフォルトの名無しさん
07/09/24 20:56:44
closesし忘れてもビルド時にエラー出ないんですか?


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

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

207:ラgたくまチャン
07/09/24 23:01:07
簡単簡単

208:デフォルトの名無しさん
07/09/24 23:47:03
つーかそこまでする必要あるか?商売でやってるわけじゃなし
はっきりいって規格を統一しないメーカーが悪いんだし
売り上げに響くからか ろくに機種依存情報も出さないし(901以降は全然出してない)
ハードに問題あるならどうしようもないよ





209:198
07/09/25 03:01:59
>>206
900シリーズとかならともかく、最近の機種でメモリ不足って考えにくくないかな。
例外をcatchするバージョンを実機で試すくらいは手伝うよ。
そもそもD902iでWaterPが落ちるのと、FallSの問題は無関係かもしれないが。

210:デフォルトの名無しさん
07/09/25 04:55:05
>196
Canのコンストラクタにあるload()って何やってるの?
このタイミングでスクラッチパッドにアクセスしちゃダメだよ。
コンストラクタでは通信やリソースへのアクセスとかの複雑な処理をしちゃダメ。
機種依存で上手くいくこともあるけど基本的にはやらない。

コンストラクタはエラー返さないし例外が発生してもcatchしようがないから
これが原因ならシステム側でエラー処理されるよ。

211:デフォルトの名無しさん
07/09/25 10:47:51
>>210
いやコンストラクタの中でだってcatchは出来るだろ
まぁ処理にしくじったら即terminate()呼ぶなり変数で場合わけして内部を状況表示に切り替えるなり色々やりようはある

俺としてはスレッド使ってるからちゃんとsynchronizedするのを忘れてて各種変数が壊れてるってのを予測してるけど
特に特定の割合や特定個所で出るけど例外補足に失敗するってパターンはそれが多いよ
自分ではスレッドを使って無くてもCanvas.processEvent()とかをsynchronizedで括り忘れると
実機ではもうどんなバグが出てもおかしくないし
まぁprocessEvent()系を全く使ってなかったら判らんけど

212:199
07/09/25 15:00:16
>>203
dクス!
read側で201同様DataInputStreamをcloseしてなかったのが原因でした

言い訳するとDoja3.xの頃に作った頃はこれで動いてたんです・・

213:デフォルトの名無しさん
07/09/25 23:32:00
>>209
ありがとうございます。デバッグver.はほんの少し時間を取れたら作ります。
ところで、落ちたのは何か表示がされた後なのでしょうか?

>>210
load()はsaveした変数値を読み込んでいるだけです。(それほどボリュームはないかと。)

>>211
うむむ、key処理でprocessEvent()は使ってますが、synchronizedは全く使ってないですね。

214:デフォルトの名無しさん
07/09/26 00:40:39
>213 load()について。
>saveした変数値を読み込んでいるだけです。

てことはスクラッチパッドにアクセスしてるんだよね?
>210はそれだとダメじゃないかと指摘している。
処理のステップ数や読み込む量は関係ない。

今回の問題の原因ではないかもしれないが、いかなるコンストラクタでも
デバイス機能の操作(スクラッチパッド、通信、音声、カメラ、描画更新など)は
しないのが常識だと自分では思ってたんだけど…どうなのかな。

215:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/26 04:28:56
> processEvent()をsynchronizedで括っておくのは基本
Javaの基本って事?それとも携帯アプリでの基本って事?

217:デフォルトの名無しさん
07/09/26 10:21:20
>processEvent()から呼んでるメンバは全てsynchronizedである必要がある(まぁこちらは当然処理してるとは思うが)
ちょっと気になったんだけど、processEventがsynchronizedになっている場合
processEventから呼んでいるメンバは自動的にsynchronizedがかかっているのと
同じ挙動にならないの?

218:デフォルトの名無しさん
07/09/26 15:44:51
>>217
ならない。
なぜなら、synchronized修飾子でロックされるのは指定したオブジェクト
(指定しない場合はthis)であって、メソッド本体ではないから

219:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/26 17:06:03
公式エミュレータ(Doja5.0)でストレージデバイスにデータを保存するアプリをエミュレートした場合
ストレージに保存したデータがどこに在るか知らない?

>>219
Doja3.5,4.0はアンインストール済み?

221:デフォルトの名無しさん
07/09/26 17:31:47
>>220
アンインストール済みです

222:デフォルトの名無しさん
07/09/26 18:04:39
>>219
一端アンインストールして、別ユーザーでログインしてそっちでインストールしてもだめ?

223:デフォルトの名無しさん
07/09/26 18:07:30
>>220
公式資料によると、C:/iDKDoja5.0/lib/storagedevice/xxx

224:198
07/09/26 18:18:40
>>213
波が動き始めて5秒後にαエラー。
その間、helpの表示、設定の変更や保存は正常に機能してるっぽい。

225:デフォルトの名無しさん
07/09/26 18:58:25
あった!ありがとう>>223

226:デフォルトの名無しさん
07/09/26 18:59:40
>>222
別ユーザでやってみましたが、やはりダメですね。

227:デフォルトの名無しさん
07/09/26 19:09:53
javacのバージョンは?
DoJa5.0のマイナーバージョンは?Eclipseの場合だけど、特定のバージョンだけ起動できなかったことがある。

228:デフォルトの名無しさん
07/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
07/09/26 19:23:44
>>198
processEventにsynchronizedを付けて、
トレースモードにしたアプリをアップしました。↓
URLリンク(wave.no-blog.jp)
エラー情報頂けるとありがたいです。
(FallSでエラー出る方もいらっしゃれば・・・)

230:デフォルトの名無しさん
07/09/26 20:59:02
>>229
D902iで、WaterP v4、WaterP2ともにαエラー発生。
ALERT: java.lang.OutOfMemoryError

FallS v1は問題なく動きますな。

231:229
07/09/26 23:31:03
>>230
予想通りのエラーですね。
ということで、対策デバッグ版アップしました。(同ページにて)
・System.gc()を初期化後に実行する:WaterP3
・定期的に実行する:WaterP4

232:デフォルトの名無しさん
07/09/27 01:20:56
processEventにsynchronized付けるとキー入力が遅くなると思うんだが。
processEventにはsynchronizedをつける必要ない設計するのがセオリーなんじゃないの?
と公式アプリつくってる者の意見でした。

233:デフォルトの名無しさん
07/09/27 02:32:44
paintをsynchronizedする人なら見たことあるけど、processEventはないな。

234:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/27 18:05:22
ちょっと教えてください
iアプリを作って配付する場合
microSDに入れて配付とかした場合、アプリを起動できないですよね?
ネット上から落としてもらうしかダメなんですかね?

236:デフォルトの名無しさん
07/09/27 18:16:55
うん、そう。

237:デフォルトの名無しさん
07/09/27 18:29:16
なんとかやり方ないのかねえ
まあネット上に置いてあったからってだれかれ構わず見つけて落とされることはないと思うけど
できれば配付した人を特定しておきたいからminiSDなりmicroSDなりで配付したいんだけどなあ

238:デフォルトの名無しさん
07/09/27 18:31:25
DL時に特定できるように会員認証でもつければ良いんでないの?
それくらいのCGIは書けるでしょ

239:デフォルトの名無しさん
07/09/27 19:08:26
>>231
WaterP3は5秒でOutOfMemoryだが、WaterP4は落ちなくなってた。
ただ、2〜5秒ほど動いては1秒以上停止(おそらくGC)するので、
アニメーションがウリのアプリとしては致命的だろうな。


240:デフォルトの名無しさん
07/09/27 19:24:33
> それくらいのCGIは書けるでしょ

241:デフォルトの名無しさん
07/09/27 19:50:56
>>219
doja.exeをダブルクリック等で直接起動させたときに動かないのか?
それとも、バッチファイルやコマンドプロンプトから -i や -j などの
オプションをつけて起動したときに動かないのか?

242:デフォルトの名無しさん
07/09/27 20:59:42
>>237
先に配布予定者の端末IDを聞いておいて、それに適合する場合のにDL可能ってどうよ?

243:デフォルトの名無しさん
07/09/27 21:48:11
じゃあ白ロムにアプリを移すのも無理なんですか?


244:デフォルトの名無しさん
07/09/27 22:33:41
配布した人を特定したいのにminiSDで配布出来たら、その時点で意味ないだろ。
やるならシリアルナンバーでも配るしかないな。

245:デフォルトの名無しさん
07/09/27 22:37:13
>>237
SDにキーデータファイルを入れて、
それがなければ初回起動できないようにするとか。

246:デフォルトの名無しさん
07/09/27 23:08:37
>245
何も知らなければ全部コピーすると思わないのかい。


247:デフォルトの名無しさん
07/09/27 23:45:20
>>245
そこまで自由度のあるSDへのアクセスそのものをiアプリからはできないわけだが

まぁ実用的に落とした人を断定しておきたかったら落とす場所を
携帯でアクセスしか出来ないようにした上にBASIC認証にでもして
落とせる人、一人一人にIDとパスを割り振った上でアクセスログを取って
明らかに不特定多数からそのIDとパスが使われてたらそのIDとパスを停止する形にするとかかな

むしろSDに入れて配布なんて方法の方が中身の全ファイルをzipで固めてどこかにアップされれば
完璧アウトな上に流通を止める手段がないよ


248:デフォルトの名無しさん
07/09/27 23:52:10
>>242 に一票

249:デフォルトの名無しさん
07/09/28 00:49:01
質問させてください。

iアプリでソケット通信をする事は可能ですか?
調べていると出来ないように感じたのですが、その場合自前で用意したサーバにアクセスするにはHTTPで接続しにいくしかないですかね?

250:デフォルトの名無しさん
07/09/28 01:06:57
>>219
関係あるかどうか判らないけど。
うちは1.4.2でDoJa入れたら駄目で、
今は1.5.0_12でチャンと動いてる。

251:デフォルトの名無しさん
07/09/28 02:36:14
>>249
はい

252:デフォルトの名無しさん
07/09/28 03:15:00
URLリンク(www.mitsubishielectric.co.jp)
DってJITしてあの速度? 冗談はよしてくれ。

253:デフォルトの名無しさん
07/09/28 03:38:31
>>251
やっぱりそうですか。

ソケットを使って書いていたので、何かいい方法がないか、それともCGIやJSP等の方がいいのか検討してみます。
ソケット通信でも自分でHTTPヘッダを処理してやれば大丈夫なのかなぁ・・・。
色々調べてみます、ありがとうございました。

254:デフォルトの名無しさん
07/09/28 04:12:32
>>252
これは嘘じゃね?

255:デフォルトの名無しさん
07/09/28 07:52:02
>>249
iモードはソケット通信できないよ

HTTP通信はOK
HttpConnectorとか読んでみ

256:デフォルトの名無しさん
07/09/28 11:51:23
>>252
ほかの機種もJITなんじゃね?

257:デフォルトの名無しさん
07/09/28 13:51:48
まさか

258:デフォルトの名無しさん
07/09/28 14:06:27
>>252
>D505 i,D505 iS,D506 i,D900 iに実装している。
全部糞端末じゃねぇかw

259:231
07/09/28 20:54:05
>>239
ありがとうございます。
もしかすると、メモリ使用量増加の原因が分かったかもしれません。
↓WaterP5で落ちるかどうか試してみてください。
URLリンク(www.i-paradise6.jp)
(サイトがちょっとトラブっているので、別の所にアップしました。)

260:デフォルトの名無しさん
07/09/28 23:00:46
>>259
WaterP5でもOutOfMemoryだった。
計算して線を描くだけならメモリ食わないと思うんだが。。。

261:デフォルトの名無しさん
07/09/28 23:55:16
すみません、Eclipse3.2、または3.3にて、エミュレータが起動した瞬間に落ちてしまうようになりました。
ビルドでエラーは出ず、JARファイルは生成されています。
DoJa5.0ツールで直接ビルド、起動した場合は正常に起動、動作します。j2sdkはは1.42です。
Eclipseを介してビルドした物はDoja5.0ツールから起動しても落ちます。
また少し前まではEclipseでも正常に起動していました。(ただし途中で落ちてました。)

何か設定を弄ってしまったのかもしれませんが、Eclipseに明るくなく、対処方法がわりませぬ。
思い当たる節があれば是非教えてください。

262:デフォルトの名無しさん
07/09/29 00:00:15
Stringの中身を消すとき
str="";とstr=null;
ってどっちの方がメモリ節約できますか?

263:デフォルトの名無しさん
07/09/29 00:58:55
消すという概念自体がjavaに当てはまらない気がするが
ガベコレに拾ってもらう上で""(空文字)オブジェクトが生成されない
str=null;の方が節約って意味では確実なんじゃない?
str="";は結局str=new String("");って事だから古いstrの中身は消えるだろうけど
新しいStringオブジェクトが生まれてるよ

264:259
07/09/29 01:13:49
>>260
そうでしたか。
getImageでImageをpaint内で生成しているのが原因かと思ったのですが・・・。
(描画の重ね合わせに、Graphics2.setRenderMode()と合わせて使用)

色々調べてみたところ、
さらにImageをdisposeしていないのがまずいような気がしたので、
getImage前にdisposeするようにしてみました。(WaterP6)どうでしょう。
あと、このgetImageをスイッチできるようにしました。

265:デフォルトの名無しさん
07/09/29 01:40:57
>>263
文字列リテラルはクラスがロードされたときに生成されて、
str = "";
は str がそれを指すようになるだけ。
そのたびに新しい String オブジェクトが生成されたりはしない。

266:261
07/09/29 02:06:39
すみません、自己解決しました。
デバッグの仕方を勉強して実行したたところ、
ALERT: java/lang/ClassFormatError: Bad version information.
が出てて、JRE1.5でビルドされているのが問題のようでした。コンパイル設定変えたら動きました。
1.4のbinフォルダにパス通したのはエミュレータ動作用だったのかな。
スレ汚しすまそ

267:デフォルトの名無しさん
07/09/29 02:07:10
>>261
3、4回、マイナーバージョンの違うDoJaを交互にインストール・アンインストールして直ったことがある
Eclipse 3.2.0 + Windows Vista + JDK 1.6

268:デフォルトの名無しさん
07/09/29 02:46:53
>>264
D902iでWaterP6テスト。
blurをonにした瞬間、NullPointerExceptionで落ちることがあるのはご愛嬌として、
OutOfMemoryは起きなくなったみたい。
たしかに毎フレームGraphics2#getImage()はメモリ食いそうだなぁ。




269:デフォルトの名無しさん
07/09/29 03:46:10
>さらにImageをdisposeしていないのがまずいような気がしたので、

脱力系のオチかよ

270:264
07/09/29 09:01:18
>>268
よかった。
getImageで上書きされるものと考えていたのが問題でした。
普通の使い方ならば、ガーベージ自動処理のタイミング的に大丈夫なのでしょうね。

他のアプリにも同様の処理をしているものがあるので、
アプリの機種違いによるエラーは、これで解決しそうです。
(アプリ_FallSのエラーは、現行ver.では起きないようなのでOKです。)

お手伝いいただき、ありがとうございました。

271:デフォルトの名無しさん
07/09/29 13:53:15
毎回getImageするより、オフスクリーンバッファを2枚用意したほうがいいんじゃないか?
Imageの描画コンテキストはGraphics2にキャストできないんだっけ?

272:デフォルトの名無しさん
07/09/29 14:42:06
Imageに対して直接Graphics2の描画(加算レンダリング)をするって事ですよね?
確かにその方法は良いと思います。
できるのであれば、どなたか教えてください。

273:デフォルトの名無しさん
07/09/29 15:29:39
>>272
確かにその方法は良いと思ったんなら、まず自分でやってみろよ。
良いと思うほどなんだから実現の可能性があることは自分でも分かってるんだろ?
教えてくださいじゃなくて、コード書くのが面倒なのでかわりに書いてくださいじゃないのか?

274:デフォルトの名無しさん
07/09/29 18:36:19
ってか、いきなりレベル低くなったな

275:272
07/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:デフォルトの名無しさん
07/09/30 02:24:48
他人のアプリのそんな細かい部分を語られても
さっぱり分からないが、動いたのならおめでとう。
それにしてもモーションブラーが実装できる時代になったんだなぁ。

277:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/01 16:10:25
うん?どこでスレッドを作ってるんだ?スレッドを作ってるようには見えないが・・・

279:デフォルトの名無しさん
07/10/01 16:31:08
>>277
スレッドが作れて無いようだが?
基本的にThreadクラスから継承するんじゃないならRunnableインタフェースを実装しなきゃだし
スレッド実行開始はThreadクラスのstart()だがスレッドの実体はどっち方法で実装してもrun()だぞ?
後Canvasのpaint()はabstractだから省略できんだろ、例として書くならそこも簡単でイイから書きなさい

一応IApplicationのstart()とCanvasのイベントメソッドが別スレッドになるかも?というのを使って
IApplicationのstart()でCanvas内の無限ループメソッドを使ったメインループ作成方法はあるけど
これはスレッドを自分で作ってるとは言わないし機種に依存するはず(動く場合が多いけど)

280:277
07/10/01 17:35:39
あれっ、本当だ…。Runnableが実装されてませんね…。
よく考えたらスレッドを作成して動かしてるのはVアプリ用の方でした。
こちらの方法はスレッドじゃないですね…失礼しました。
しかも279さんの仰る通り簡略化しすぎてました…。

とは言えせっかくなので教えて頂ければ幸いなのですが
(改行エラーが出たのでソースは次に書きます)
→ソース
という感じで作っています。この場合、自分は a_test.start(); によってtestCanvas内のstart()メソッド
が一回だけ実行され、その中の無限ループでグルグル処理をするっていうイメージで作ったんです。
しかし実際にはtestCanvas内のstart()メソッドが何度も実行されているようなのです。
物凄い勢いで”実行中”というトレースを吐き出します…。
質問自体分かりづらくて申し訳ないのですが、なぜtestCanvas内のstart()メソッドが何度も呼び出される
のか、ご教授願えれば幸いです。

281:277
07/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:デフォルトの名無しさん
07/10/01 17:38:37
>IApplicationのstart()でCanvas内の無限ループメソッドを使ったメインループ作成方法
Fの505,506,900でこれやると、processEventとmediaActionに処理こねぇ(ノд`)

283:デフォルトの名無しさん
07/10/01 17:41:25
Eclipseのデバッグモードで確認すれば一発

284:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/01 18:02:28
あ、後当然ながらstart()とprocessEvent()の両方からアクセスしてるメンバは全部synchronizedになってるよな?


286:デフォルトの名無しさん
07/10/01 23:20:27
>>282
マジ?
ずばりこのやり方で作りまくりなんだけど、、
Fの901以上とか700は大丈夫なの?

287:デフォルトの名無しさん
07/10/02 00:09:24
>>286
この手法って機種依存じゃないの?
IApplication.start()がCanvas.processEvent()とは必ず別スレッドで呼ばれることが保証されてるってどっかドキュメントに書いてある?


288:282
07/10/02 02:51:23
>>286
実は端末がなくて、そこまで調べていない。
とりあえずデバッグ時に、手元にあった上記の三つは動作しなかったので
直した。その他の端末は、修正後に検証センターで端末チェックしたので
その他のF機についてはわからない。

289:286
07/10/02 06:45:39
>>282
>>287
10K制限の時から気にせずやってたけど、
今は容量制限もゆるいし普通のやり方が一番安全ですね。

290:デフォルトの名無しさん
07/10/02 11:26:51
俺もstart()で無限ループやりまくってるw

リリース前にゃ全端末チェックして貰った事もあるけど
問題なかったなぁ。ユーザからクレームも上がってない。

んまぁ音鳴らすアプリが殆どない上processEvent使ってないし
気づかなかっただけかもだけど。


291:デフォルトの名無しさん
07/10/09 11:45:28
過疎ってる(゜Д゜)


292:デフォルトの名無しさん
07/10/09 14:12:31
おうよ

293:デフォルトの名無しさん
07/10/09 20:59:45
ネット上のAPIリファレンスの見方を教えて下さい
全然分かりません

294:デフォルトの名無しさん
07/10/10 10:43:16
ネット上にDojaのAPIリファレンスなんてあったっけ?
ここからダウンロードして使ってえば。
URLリンク(www.nttdocomo.co.jp)


295:デフォルトの名無しさん
07/10/11 01:17:55
このHPなんだけど(Doja5.0)
URLリンク(www.rcdtokyo.com)

例文が全然ないから書式が全然分かりません
できるだけ詳しく教えてください

296:デフォルトの名無しさん
07/10/11 01:20:24
それはまず Java の勉強をするべきでは?

297:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/11 22:08:04
初心者用のjavaの勉強は5年もしました
しかしDojaのAPIリファレンスは難解すぎて理解できません
もうやめます

299:デフォルトの名無しさん
07/10/11 22:59:52
Java で5年間何をやってたのか気になるところだな。


300:デフォルトの名無しさん
07/10/12 00:44:16
5年間ずっとjava初心者用HPのサンプルコードのコピペを続けてたのだろうか?
それはそれで根気があるが……

301:デフォルトの名無しさん
07/10/12 00:45:41
ネタだろ。
数年前に一週間程度java勉強しただけの俺でも何とか分かる。

302:デフォルトの名無しさん
07/10/12 21:54:18
しかしそれは本来のJavaでなく携帯向けJavaだったのだ

303:デフォルトの名無しさん
07/10/13 02:10:42
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――‐┬┘
                        |
       ____.____    |
     |        |        |   |
     |        | ∧_∧ |   |
     |        |( ´∀`)つ ミ |
     |        |/ ⊃  ノ |   |
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |    ミ [本来の Java]



304:デフォルトの名無しさん
07/10/13 03:35:34
>302
携帯向けのJavaが偽物みたいにいうな禿

305:デフォルトの名無しさん
07/10/13 03:57:13
携帯向けのJavaなんて存在しないんだけど?w

306:デフォルトの名無しさん
07/10/13 05:14:54
JavaME

307:デフォルトの名無しさん
07/10/13 07:53:16
CLDCとMIDPの立場って一体……

308:デフォルトの名無しさん
07/10/13 07:53:21
携帯向けのJavaってソースに
#ifdefとか#defineとか入ってる奴?w

309:デフォルトの名無しさん
07/10/13 08:02:59
無知だな

310:デフォルトの名無しさん
07/10/13 08:36:07
>>308
30Kに収めようと思ったり機種依存APIを使うために場合分けが必要な場合(Unable to load class回避)には
必要に応じてプリプロセッサも使うけどな
まぁそれも初心者にはあまり関係ない話だ

311:デフォルトの名無しさん
07/10/13 08:53:40
>>307
世界で使われている

312:デフォルトの名無しさん
07/10/13 12:13:12
プリプロセスできれば、と思うことは何回もあった

313:デフォルトの名無しさん
07/10/13 12:19:52
30KiBの壁にあたったとき、プリプロセッサ使って3KiBくらいちんまく
なったときには、純粋なJavaと決別しようと思ったさ。

314:デフォルトの名無しさん
07/10/13 12:48:26
KIBだんご

315:デフォルトの名無しさん
07/10/14 00:05:44
プリプロセッサってクラスファイルを小さくしてくれるの?
あ、でもなんか単位が違うなぁ

316:デフォルトの名無しさん
07/10/14 01:53:14
Kを1000じゃなくて1024であることを明確に示したいときにはKiって書くのよ。

317:デフォルトの名無しさん
07/10/14 01:59:05
それ何業界で使われてるの? ストレージ関連?
こっちでは単に KB て入ったら 1024 bytes 以外の可能性はないなあ。
M が 1000^2 じゃなく 1024^2 であると示したい場合は MeB?

318:デフォルトの名無しさん
07/10/14 01:59:33
でもあんまり浸透してないよなぁそれ・・・
キビバイトとかメビバイトとか言いにくいからかな

319:デフォルトの名無しさん
07/10/14 02:05:58
>>317
Wikipedia項目リンク

320:デフォルトの名無しさん
07/10/14 02:20:10
KIBだんごが正しくてワロタ

321:デフォルトの名無しさん
07/10/14 03:32:02
純粋なJavaなんてこだわってるのは信者だけ
そろ信者と頭の古いsunのせいでそれはいるだろって機能でさえ
C#がでるまで入れようとしなかったくらいだから迷惑な話だよな

322:デフォルトの名無しさん
07/10/14 03:35:49
いきなりどうした?

323:デフォルトの名無しさん
07/10/14 03:48:33
つまり、プリプロセッサを公式にサポートしろと言いたいのですよw

324:デフォルトの名無しさん
07/10/14 04:01:43
>>315
組み方によるがプリプロセッサに頼った方が小さくなる
例えばstatic finalは#defineに置き換えれば大抵の場合クラスファイルを縮小できる
まぁ色々あるんで一概にどうこうとは言いにくいんだが読みやすさを損なわないレベルで小さくなる場合が多いのは事実だな
ただ初心者にはお奨めはしないけどな
Obfuscatorを2〜3個と7Zipも使ってもどうにもならない場合の最後の最後の手段だな

325:デフォルトの名無しさん
07/10/14 04:06:34
>318
言いにくいからというより、単純に通じないからだろうな。
メディアや様々なドキュメント類が一斉に変えない限り普及しないんじゃないだろうか。

現状、ドキュメントなら大抵「1キロバイト=1024バイト」とか注意書きがあるんで混乱しないし、
1キロバイトが1024バイトなのはファイルサイズやメモリ容量、
1000バイト(というか1メガバイト=1*1000*1000バイト)なのはストレージ(大抵HDDを指して)、
としてまず問題なく会話できるし。

326:デフォルトの名無しさん
07/10/14 07:31:01
最近の人は「キロ」と「ケー」の区別をつけないのか

327:デフォルトの名無しさん
07/10/14 07:45:38
HDDさえ1024単位にしてくれりゃ会話でまぎらわしいことは
かなり減ると思うけどな。

328:デフォルトの名無しさん
07/10/14 18:14:45
通信速度が10進数だから,そっちを基本にするしかないだろ

329:デフォルトの名無しさん
07/10/14 19:38:04
10進数で通信速度を測定するのって何の通信?

330:デフォルトの名無しさん
07/10/14 21:29:29
話切って申し訳ないですが、質問させてください。。

904iシリーズで追加されたオプションAPI、
「動作認識」を実装しようとしてるのですが上手くいかず困ってます。。

最初はとりあえず、ケータイの傾き(rolldata)を取得し、
その値を画面に表示させるコードを書こうとしています。

プログラミング初心者のため、かなり汚いコードだとは思いますが、
指摘いただけるとうれしいです。

331:330
07/10/14 21:33:46

public class Gesture1 extends IApplication {

public void start() {
GestureCanvas c = new GestureCanvas();
Display.setCurrent(c);
c.exe();
}


332:330
07/10/14 21:35:22
//続き
class GestureCanvas extends Canvas {

void exe() {
RollReader rollreader = RollReader.getRollReader(0);
Graphics g = getGraphics();
float zahyo[] = new float[2];

while (true) {
//動作認識処理
rollreader.start();
RollData roll = rollreader.getRollData();
zahyo = roll.getAccumulatedMotion();
rollreader.stop();

g.lock();
g.setColor(g.getColorOfName(g.WHITE));
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(g.getColorOfName(g.BLACK));
g.drawString("x座標 : " + zahyo[0], 5, 20);
g.drawString("y座標 : " + zahyo[1], 5, 40);
g.unlock(true);

333:330
07/10/14 21:36:04
//最後

try {
Thread.sleep(200);
} catch (Exception e) {
}
}
}
public void paint(Graphics g) {
}
}
}

//長々とすみませんでした。。。

334:デフォルトの名無しさん
07/10/14 22:06:48
機種は?
確かDだけ何か違ったとか報告受けた覚えがある。

335:330
07/10/14 22:16:48
SH904iです。。
エミュレータで試験できないので、実機にアプリをDLして実行してみているのですが、エラーの表示と共に強制終了されてしまい原因もわかりません。。。

336:デフォルトの名無しさん
07/10/14 22:28:07
Exceptionでエラー確認してみ

337:330
07/10/14 22:32:37
330です。何度もすみません。
Dだけなにかが違うという件ですが、、
Dには加速度センサが、SHとPにはgesturetek mobileが搭載されているということだと思います。
前者ではその名のとおりセンサを使って、後者ではインカメを用いた画像検知によりケータイの動きを認識します。

ドコモ提供のAPIリファレンス(オプション・拡張編)
URLリンク(www.nttdocomo.co.jp)
では、最後の章に加速度センサの、19章に動作認識(インカメ使用)の説明があります。

私は、shですので、インカメを用いた動作認識を実装したいと考えています。

338:330
07/10/14 22:35:00
>>336
Main :com.nttdocomo.device.gesturereader.GestureException Gesture1
com.nttdocomo.device.gesturereader.GestureException
at com.nttdocomo.device.gesturereader.RollReader.getRollData(+80)
at Gesture1$GestureCanvas.exe(+22)
at Gesture1.start(+17)
com.nttdocomo.device.gesturereader.RollReader

このようなエラーが出ますが、未熟者のため解決できず。。。

339:デフォルトの名無しさん
07/10/14 22:35:14
とりあえず、運良く会社から持ってきてた俺自作のソース見ると

m_RollReader.start();
m_RollReader.recenter();

はwhile() の上に出して1回だけにした方が良さそう
それでもダメなら

m_RollData.getImmediateMotion();

の方のパラメータも変なの来てるか確かめれ。
もちろんExceptionもなw

340:330
07/10/14 22:41:44
>>339
ありがとうございます!
がんばってみます。

341:330
07/10/14 22:48:11
>>339
一つ質問なのですが、
rolldata.start()
をwhile外に出すとすると、
rollreader.stop();
の位置が問題になると思いますが、

一回一回の処理ごとにstopかける必要はないのでしょうか?
というか、もしかしてstop()自体なくても、動作に支障はないのですか?

342:デフォルトの名無しさん
07/10/14 23:32:23
大きい範囲で1回であればいるかもしれんけど、
枚フレームする必要は無いな。

まぁ、経験上カメラとか外部のインターフェース使う奴は
動作が遅いのが普通だから毎フレーム呼び出しは
無理な場合が多い。

343:デフォルトの名無しさん
07/10/15 00:40:55
マナーモードや受話音量の制御ってアプリ側からは出来ないですかね?

344:デフォルトの名無しさん
07/10/15 04:12:01
できちゃったら本末転倒
アプリや本体の挙動を制御するための機能なんだから

345:デフォルトの名無しさん
07/10/15 11:07:19
>>341
JSや加速度センサは、start()時の位置を(0,0(,0))として、
次フレームでゼロ地点からの相対位置を元に何かを求めるモノなので、
基本動きっぱなしを想定してる。
なので止めちゃダメ。

あとDoJa5.0 Ver3.0のiαppliToolで、エミュレーションにも対応してる。
ツール→動作認識データ編集と、ツール→加速度センサデータ編集がそれ。
使い物になるかは少々疑問だけど、とりあえずの動作確認だけならエミュで十分なハズ。
パラメータを設定しなくても、エミュで例外は出ない。
ゼロが帰ってくるだけ。

たしか移動量の定義がShake以外不明だったと思うんで、
実機でやってみないとわからない部分が多いと思うがガンガレ。


346:デフォルトの名無しさん
07/10/15 11:20:19
何か酷いな…

JS→ジェスチャーテックのことで略してJSと何処かに書かれてて
  そう覚えてしまった(´д`) ゴメン。
帰って→返って

ちとマグロでも釣ってくるわ。


347:デフォルトの名無しさん
07/10/15 13:12:40
なあ、@アプリで再生できる動画サイズって500KB以上は無理なんか?

348:デフォルトの名無しさん
07/10/15 13:31:43
確かDojaのバージョン依存とみせかけて機種依存だったと思った。
俺の仕事じゃなかったから適当に聞いてたんでうろ覚えw

349:デフォルトの名無しさん
07/10/15 13:36:29
お、機種依存なのか


350:デフォルトの名無しさん
07/10/15 14:07:36
>>347
URLリンク(www.nttdocomo.co.jp)
「4.4.5 FOMA 携帯電話によるVisualPresenter でのiモーションの再生」
を熟読するんだな

351:デフォルトの名無しさん
07/10/15 14:17:48
機種によっては500kb以上いけるかもしれないが
Doja5.0では500kbまでしかだめだ

って書いてあるようなないような

352:デフォルトの名無しさん
07/10/15 15:11:30
500KBまでは全機種で動くことを保証してそれ以上のサイズを放り込んだ時動くかどうかは機種依存ってことだろ?

353:330
07/10/15 15:42:57
>>345
ありがとうございます。
エミュレータの動作認識設定を行い、何とかエミュ上で立ち上がるまでになりました。
しかし、実機に移すと、エラーが起こり、アプリが立ち上がりません。。。

どうしてでしょうか。。。。。




次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4869日前に更新/253 KB
担当:undef