[表示 : 全て 最新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/


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

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()よりは軽くなったはず。(多謝)






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

前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