iモード携帯電話用Java(iアプリ) Part10
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/11/10(木) 15:11:53※DoCoMo以外は下記スレへ。
CLDC+MIDP+携帯電話用Javaスレッド part 4
http://pc5.2ch.net/test/read.cgi/tech/1108781476/
■ iアプリ特有ではなくJava一般に関する質問はこちらへ
【初心者】Java質問・相談スレッド68【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1119115837/
■ iモード携帯電話用Java(iアプリ)まとめサイト
http://ton.my-sv.net/
■関連スレ
【日本携帯】Mascot Capsule/Micro3D【標準】
http://pc8.2ch.net/test/read.cgi/tech/1117773530/
過去スレ
Part 1 http://piza2.2ch.net/tech/kako/975/975428633.html
Part 2 http://pc3.2ch.net/tech/kako/1000/10007/1000723476.html
Part 3 http://pc2.2ch.net/test/read.cgi/tech/1040898596/
Part 4 http://pc5.2ch.net/test/read.cgi/tech/1067139509/
Part 5 http://pc5.2ch.net/test/read.cgi/tech/1084246226/
Part 6 http://pc5.2ch.net/test/read.cgi/tech/1091286071/
Part 7 http://pc5.2ch.net/test/read.cgi/tech/1102844217/
Part 8 http://pc8.2ch.net/test/read.cgi/tech/1110946222/
Part 9 http://pc8.2ch.net/test/read.cgi/tech/1120411353/
0348デフォルトの名無しさん
2006/01/01(日) 02:57:120349デフォルトの名無しさん
2006/01/01(日) 04:19:080350デフォルトの名無しさん
2006/01/01(日) 04:40:54W-ZERO3上で動くSkypeみたいなことができないかってこと?
0351デフォルトの名無しさん
2006/01/01(日) 16:55:460352デフォルトの名無しさん
2006/01/01(日) 17:11:59そうなんですか?
回答ありがとうございます。
変数名全て一文字にしたり、いろいろテクニックが必要なんですね。
0353デフォルトの名無しさん
2006/01/01(日) 17:35:01変数名を短くするとかいうのは、最後にProGuardに任せればOK
開発時は気にする必要ないよ
0355デフォルトの名無しさん
2006/01/02(月) 01:23:52今年もデスマ決定だなw
0356デフォルトの名無しさん
2006/01/02(月) 08:05:47動きません。このやり方ではまずいですか
JarReader(String name) {
int jsize;
int offset = 0;
int size;
byte[] data = new byte[20480];
HttpConnection c = null;
InputStream in = null;
OutputStream out = null;
in= Connector.openInputStream("scratchpad:///0");
jsize = in.read() * 256 + in.read();
in.close();
if(jsize == 0) {
c = (HttpConnection)Connector.open(
IApplication.getCurrentApp().getSourceURL() + name,
Connector.READ, true);
c.setRequestMethod(HttpConnection.GET);
c.connect();
in = c.openInputStream();
out = Connector.openOutputStream("scratchpad:///0;pos=0");
out.write(jsize/256);
out.write(jsize%256);
while((size = in.read(data, offset, data.length)) != -1) {
out.write(data);
offset += size;
}
in.close();
c.close();
out.close();
}
0357デフォルトの名無しさん
2006/01/02(月) 08:44:49コンパイラがエラーを言うなら、そもそもコードが間違ってるし。
というかヒープより多きいんじゃ読めなくても当たり前と違うの?
(直接スクラッチパッドに書き込むつもりでも内部でどうやってるか
わかったもんじゃないし)
0358356
2006/01/02(月) 09:14:45Exceptionが派生しているのは
while((size = in.read(data, offset, data.length)) != -1) {
の部分です。
そもそもHTTPでoffsetを設定したreadをしていいのかが気になっています。
もしかしてJavaヒープとスクラッチパッドって同じメモリ領域を共有しているのですか?
とりあえずJavaヒープに収まる
byte[] data = new byte[20480];
で分割しながらスクラッチパッドに書き込もうと思っていたのですが…。
0359デフォルトの名無しさん
2006/01/02(月) 09:43:23>while((size = in.read(data, offset, data.length)) != -1) {
>out.write(data);
>offset += size;
>}
ヒープサイズなんて関係ないだろ。
これだと、offsetが20480バイト超えた途端にArrayIndexOutOfBoundsException出ないか?
おまけに、size見ないで毎回20480バイトwrite()してるし。
0360デフォルトの名無しさん
2006/01/02(月) 13:17:020361デフォルトの名無しさん
2006/01/02(月) 13:47:180362デフォルトの名無しさん
2006/01/02(月) 13:53:441回の通信で取得できるデータの長さには制限がある
それにひっかかってんじゃないのか
0363デフォルトの名無しさん
2006/01/02(月) 20:06:24>>357と同じく、なんのExceptionが発生しているのか
書いてくれんと、原因を特定しずらい。
0364デフォルトの名無しさん
2006/01/03(火) 01:52:55http = (HttpConnection)Connector.open(url,Connector.READ);
http.setRequestMethod(HttpConnection.GET);
http.connect();
int contentLength = (int)http.getLength();
inputStream = http.openInputStream();
data = new byte[contentLength];
int readBytes = 0;
while(readBytes < contentLength) {
readBytes += inputStream.read(data,readBytes,contentLength - readBytes);
}
上記のようなソースを書いているのですが、contentLength>=10240の場合に
inputStream.readで例外が出てしまいます。IndexOutOfBoundExceptionです。
最初の1回で10240バイト読んで、その次のループで例外を出してしまいます。
1000バイトずつ読むようにしても、
どうしても10240バイトを超えて読もうとするとそこで例外が発生します。
(おそらく最後の1回で240バイト、その次のループで例外が出るのだと思います)
実機はP504iです。もちろんエミュレータ上では問題なく動いているのですが、
DoJa 2.0ではInputStream#read に読み込みバイト制限でもあるのでしょうか?
0365デフォルトの名無しさん
2006/01/03(火) 03:15:01初歩中の初歩だぞ・・・
http://www.saturn.dti.ne.jp/~npaka/ibook2/izon.html
ココのHTTP受信/送信データサイズ参照。
0366356
2006/01/03(火) 05:28:41offsetの値は関係ありません。毎回dataを上書きしていますから。
>おまけに、size見ないで毎回20480バイトwrite()してるし。
確かにサイズ考慮していなかった…鬱
端末のスペック表、読み違えてた…。
Javaヒープの容量読み間違えていた、Byteだと思っていたら、KByteだった。
スクラッチパッドのサイズより十分大きいいや…鬱
一回のreadで読み込むようにして、読めるようになりました。
0367デフォルトの名無しさん
2006/01/03(火) 05:37:25printStackTrace()は使えないみたいだし
Eclipse2.1.2でトレースデバッグもできないみたいだし…。
0368デフォルトの名無しさん
2006/01/03(火) 06:06:450369デフォルトの名無しさん
2006/01/03(火) 07:37:07情報ありがとう。やはり制限があったのですね。
どうしても10Kbyteを超えた容量のファイルをダウンロードしたいのだけれど、
DoJa2.0では1回の通信では出来ないことがわかりました。
では、どのようにこの制限を回避してダウンロードすればよいでしょうか。
一般的な方法などありましたら是非教えてください。
0370364, 369
2006/01/03(火) 08:09:06Connection#SetRequestPropertyはRangeが設定できない仕様で失敗しました。
サーバ側で分割送信するCGIを用意すれば良いのでしょうが、
出来ればサーバ側の細工無しで実装したいところです。
0371デフォルトの名無しさん
2006/01/03(火) 08:27:20ファイル自体を分割する
面倒ではあるが確実
0372デフォルトの名無しさん
2006/01/03(火) 08:31:54ユーザーがアップロードしたファイルをダウンロードさせたいので、
それをやるならばアップローダで分割させる必要があるんですよね。
また、そのファイルはPCからも見られるようにしたいので、困っています。
0373デフォルトの名無しさん
2006/01/03(火) 09:38:29>>>359
>offsetの値は関係ありません。毎回dataを上書きしていますから。
offset関係しまくりじゃねーか。そのつもりなら、
in.read(data, offset, data.length)
じゃなく、
in.read(data, 0, data.length)
と書けよ。
0374デフォルトの名無しさん
2006/01/03(火) 10:18:061GETの10KB制限が仕様である以上、
クライアント側でRange指定するか、サーバー側で小細工するしか選択肢はないと思うのだが。
CGIで分割送信させれば済む話なんじゃないの?
0375デフォルトの名無しさん
2006/01/03(火) 12:13:47サーバ側で小細工すると要らぬ負荷がかかる上にメンテナンスも面倒だ、というだけです。
ところで、クライアント側でRange指定できるんですか?
0376デフォルトの名無しさん
2006/01/03(火) 13:24:56面倒と言っているが方法が分らないだけだとry
0377デフォルトの名無しさん
2006/01/03(火) 14:25:49windowsしか使えないんじゃない。
サーバは大抵UNIX系だからね。
splitですむのにね。
0378366
2006/01/03(火) 20:45:05offsetってストリームへのoffsetだと思っていた。
byte配列へのoffsetだったのですね…。
猛省します。
0379364
2006/01/03(火) 23:41:31結局、split.cgi?filename=hoge.bin&from=10240&length=10240みたいなの作りました。
クライアントでHTTP1.1のRange指定があれば言うことは無かったんですけどね。
0380デフォルトの名無しさん
2006/01/04(水) 00:34:39splitコマンドでファイルを分割しておくだけで済むのに。
シェルは使えないの。
>>Windowsサーバは別に否定しませんが
自分は否定します。
手間ばかり掛って、さらに危険度も高くデメリットだけだと思うけど。
windowsしか使えない人達にとっては、唯一の選択だろうが。
0381デフォルトの名無しさん
2006/01/04(水) 01:53:19例えばファイルをいくつダウンロードしなければいけないのかクライアントがどう判断するのかとか、
ファイルの上書きやら、分割サイズはどうすのかとか、正直おまいのはていどの低い解決策に見えるんだが
linuxにこだわってシェルに傾倒するのは自由だが、364の携帯用に分割するcgiを書く方が100倍マシな解決策だろ
それくらい直感でわかってから人の質問に答えろよ
まぁ出直して来い
0382デフォルトの名無しさん
2006/01/04(水) 02:15:05特に素人客が運営することになると面倒。
しかしファイル自体を分割するのも手ではあるし、場合によっては(cgiなどを客が使いたがらないとか)使うのだから381は言い過ぎ。
0383デフォルトの名無しさん
2006/01/04(水) 02:20:360384デフォルトの名無しさん
2006/01/04(水) 02:23:17しかしそれ以外の状況では分割のデメリットが大きすぎる
381が言いすぎなのは間違い無いが、380の頭も固いな
0385デフォルトの名無しさん
2006/01/04(水) 10:12:230386デフォルトの名無しさん
2006/01/04(水) 11:29:540387デフォルトの名無しさん
2006/01/04(水) 12:03:48アップされるデータ形式が分からないんだけど、ものによっては圧縮したら回避できるとか、
そういうアプローチは可能? あとはいっそ携帯でダウンロードできるものを制限して表示とか。
目的が分からないと手段を探すだけになってしまって解決に結びつかないかも知れない。
0388デフォルトの名無しさん
2006/01/04(水) 12:12:30この手のCGIは
split.cgi?filename=/etc/passwd&from=0&length=10240
のように使われて、意図しないファイルを読まれてしまってセキュリティホールに
なるものばかりなのだが。
ちゃんとファイル名のパスをチェックしているのか、えらく面倒だぞこれは。
../../etc/passwdとか、色々な書き方があるから。
普通こういうCGIは書かない。
プログラムを書けるようになったぐらいの駆け出し(または素人)っぽいやり方だ。
>>ファイルを分割すると、管理が面倒になるからなぁ。
そんな事無い。いちいち手でsplitしたら面倒だろうけど。
makeとかを使う。ちゃんとMakefileつくって置けば、ファイルをサーバに置いて
makeを動かせば更新(split)が必要なファイルは全て更新されるようにする。
あと大抵バージョンコントロールプログラムと併用する。
手が掛らないように、さらに安全に運用できるようにするもんだ。
0389デフォルトの名無しさん
2006/01/04(水) 12:56:44ああ・・・
お前は本当に何も考えてないアホだったんだ・・・
> ちゃんとファイル名のパスをチェックしているのか、えらく面倒だぞこれは。
…
> そんな事無い。いちいち手でsplitしたら面倒だろうけど。
………
もう黙っていていいよ
0390デフォルトの名無しさん
2006/01/04(水) 13:04:40ただ馬鹿馬鹿喚いてるだけの>>389じゃ説得力が違うぞ
煽るだけじゃなくて理由も書けや
0391デフォルトの名無しさん
2006/01/04(水) 13:07:300392デフォルトの名無しさん
2006/01/04(水) 13:10:14それにしたって「パスチェック」なんてプログラマのイロハのイだし、
更新の度いちいちMakefileを走らせるなんてプログラマの思考じゃないだろう。
特に素人客なんぞ、Makefile走らせ忘れて夜中に「なんかダウンロードできないんですよ!!なんとかしてください!!」とかTELしてくる馬鹿ばかりだし。
0393デフォルトの名無しさん
2006/01/04(水) 13:11:440394デフォルトの名無しさん
2006/01/04(水) 13:17:51携帯に制限無くたって、どの道サーバ側で制限するでしょうが。
おし、俺から提案。
人任せでもダメ、プログラム任せでもダメ。
ならば・・・
↓よろしく
0395デフォルトの名無しさん
2006/01/04(水) 13:20:470396デフォルトの名無しさん
2006/01/04(水) 13:22:500397デフォルトの名無しさん
2006/01/04(水) 14:05:570398デフォルトの名無しさん
2006/01/04(水) 14:23:33タダ。
定額だけ相手にすればよし
0399デフォルトの名無しさん
2006/01/05(木) 00:49:40一応言っておくが、CGI書くのに入力値のチェックしないなんて有り得んよ。
0400デフォルトの名無しさん
2006/01/05(木) 04:30:28Win鯖つってもIIS+ASP(.NET)はApache+Tomcatより速くなるケースもある。httpdが落ちてもIISは速効復旧するし。ベンチは自宅鯖板で探してくれ。
mod_PHP/Java使うならUNIX+Apacheしかない罠。
>>388
明日出社したらSuEXECをOnにしておいてくださいね。
0401デフォルトの名無しさん
2006/01/05(木) 12:17:08>>明日出社したらSuEXECをOnにしておいてくださいね。
apacheの設定を知っているからと、あまり変に口出ししないほうがよいかと。
http:://hostname/~username/cgi/xxx.cgi
のような使い方するのは、レンタルサーバを使っているケースだけ。
CPの場合はhttpのユーザやグループを適切に設定してあるはずなので
SuEXECなんて関係ない。
他にも392のような、素人向のホスティング・サービスの話をしている人も
いるけど、ここはCPっていないの?
趣味でiアプリ作っている人向けのすれ?
0402デフォルトの名無しさん
2006/01/05(木) 14:14:54そのあたりは自分で考え、自分に役にたつ情報を取捨択一せい。
0403デフォルトの名無しさん
2006/01/05(木) 14:46:46ガンバレ('A`)
0404デフォルトの名無しさん
2006/01/05(木) 17:26:45apacheの設定を知っているからと、あまり変に口出ししないほうがよいかと。
0405デフォルトの名無しさん
2006/01/06(金) 02:13:34ガンバ(´д`)
今度はうまくやろうな
0406デフォルトの名無しさん
2006/01/06(金) 02:20:16なんか必死だな…
0407デフォルトの名無しさん
2006/01/06(金) 10:32:210408デフォルトの名無しさん
2006/01/06(金) 23:23:520409デフォルトの名無しさん
2006/01/08(日) 15:06:56起動時にstartが呼ばれますが、終了時には何が呼ばれますか?
0410デフォルトの名無しさん
2006/01/08(日) 15:42:110411デフォルトの名無しさん
2006/01/08(日) 15:43:12何も呼ばれない。
終了するのはプログラム自身がterminate()を呼び出したとき。
0412デフォルトの名無しさん
2006/01/08(日) 17:27:29スクラッチパッドに作業内容を書き出したいのですが、何も呼ばれない
とはorz
0413デフォルトの名無しさん
2006/01/08(日) 17:50:100414デフォルトの名無しさん
2006/01/08(日) 21:46:59vodaで3Gになって異様にレコードストアへのアクセスがのろくなったので、
最後に書き込む方式にこっちも合わせようかと思ったのですが。
0415デフォルトの名無しさん
2006/01/09(月) 22:44:170416デフォルトの名無しさん
2006/01/09(月) 23:07:29iDK(DoJa4.0)をインストールしようとしたんですけど
インストール時に「レジストリの書き換えに失敗しました」とか出てしまいます・・・。
OSはWinXP、JDKは1.3.1_17
同じような現象出た方いらっしゃいますか?
解決方法をご存知でしたらぜひアドバイスください。
0417デフォルトの名無しさん
2006/01/10(火) 01:33:40管理者権限ある?
0418416
2006/01/10(火) 01:57:26Admin権限のユーザでやってますね。
同じユーザで他のアプリをインストールする分にはまったく問題ありませんでした。
他に思い当たる原因ありますでしょうか?
0419416
2006/01/10(火) 11:26:27Doja3.5用のiDKまではすべて正常にインストールできますが、
4.0と4.1ではインストール時に「レジストリの書き換えに失敗しました」と出て、
それを気にせずに起動してみると、プロジェクトの新規作成や、ビルドボタンを押した時に
「レジストリの設定に失敗しました」と出てしまいます・・・。
4.0用のアプリを作りたいので、どうしても4.0用のツール使いたいんですが・・・
0420デフォルトの名無しさん
2006/01/10(火) 11:40:140421416
2006/01/10(火) 11:43:18アドバイスありがとうございます。
ウィルス対策ソフトはノートンアンチウィルスを使ってますが、
DoJa3.5用まではノートン起動中でも正常にインストールできましたし、
ノートンを切って4.0用をインストールしてみても、結果は同じでした。
0422デフォルトの名無しさん
2006/01/10(火) 16:43:440424デフォルトの名無しさん
2006/01/10(火) 21:27:19OutputStream out=null;
try
{
out=Connector.openOutputStream("resource:///test.txt");
String stuck = strbuff.toString();
byte[] playerDeck_data=stuck.getBytes();
out.write(playerDeck_data);
out.close();
}
であってますか?
同名のファイルがある場合って上書きされたりするんでしょうか?
0425デフォルトの名無しさん
2006/01/10(火) 21:35:54まずエミュレータで動かしてみることをすすめてみる。
0426デフォルトの名無しさん
2006/01/10(火) 21:39:18コンパイルは通ってるんですが
out=Connector.openOutputStream("resource:///test.txt");
の部分でIOException:Cant open output stream directlyとでます;
なんか開けないらしいんですが、参考になるページとかありませんか?
txtファイルの読み込みのサンプルがあるページは見つかるのですが
txtファイルの書き込みはFileoutputとかしか見つからないんですorz
0427デフォルトの名無しさん
2006/01/10(火) 22:11:500428デフォルトの名無しさん
2006/01/10(火) 22:17:57ガーン、ということはスクラッチパッドですか;
0429デフォルトの名無しさん
2006/01/10(火) 22:35:56実装状況キボン。
今は大人しくスクラッチパッドへ。
0430デフォルトの名無しさん
2006/01/10(火) 22:38:38regeditで以下のキーにゴミないかい?
HKEY_LOCAL_MACHINE\SOFTWARE\NTT DoCoMo\doja4.0
0431416
2006/01/10(火) 22:53:03それも疑って、NTT DoCoMo以下のキーは強制的に削除して
試してみたことあるんですけど、結果は同じでした・・・。
ちなみに、インストール後、C:\iDKDoJa4.0\の下に
DoJa.regというファイルができてるんですけど、
これは正常にインストール完了した場合でもできるものですか?
それとも、レジストリの書き込みに失敗してるからできるものなんですかね?
0432427
2006/01/10(火) 23:38:20データをminiSDに書こうとしているみたいなんだけど、
これは偽装GIFか何かなのかなぁ?
って調べてみたらDoJa-4.xのiアプリオプションに「第17章 外部メモリ」ってのがあったわ。
これでminiSDにファイル作れるっぽい。
0433デフォルトの名無しさん
2006/01/11(水) 02:21:060434デフォルトの名無しさん
2006/01/11(水) 12:24:580435デフォルトの名無しさん
2006/01/11(水) 12:44:24スクラッチパッドにデータ入れたときにスクラッチパッドにどこかにフラグを保存するw
0436434
2006/01/11(水) 12:51:460437デフォルトの名無しさん
2006/01/11(水) 13:34:50ひでぇ流れだ(;´Д`)
0438デフォルトの名無しさん
2006/01/11(水) 15:14:030439デフォルトの名無しさん
2006/01/11(水) 18:56:122〜Nバイトまでを保存した文字列
というフォーマットでスクラッチパッドに書き込みその後読み込む関数
textはStringで関数の引数
int size;
byte[] data;
OutputStream out=null;
InputStream in=null;
out=Connector.openOutputStream("scratchpad:///0;pos=0");
data=text.getBytes();
size=data.length;
out.write(size);
if(size>0)
{
out.write(data);
}
out.flush();
out.close();
in=Connector.openInputStream("scratchpad:///0;pos=0");
size=(int)(in.read());
data=new byte[size];
if(size>0)
{
in.read(data);
text=new String(data);
}
in.close();
を作成したんですが
なぜか書き込んだときのsizeは312なのに読み込んだときは56になってしまいます;
なんか間違ってますか?
0440デフォルトの名無しさん
2006/01/11(水) 19:03:34http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/OutputStream.html#write(int)
0441デフォルトの名無しさん
2006/01/11(水) 19:41:16・・・・・・・・・・orz
これ256以上書き込むときは分割して複数回書き込めってことですか?
0442デフォルトの名無しさん
2006/01/11(水) 20:40:49全然調べ足りてないよ
APIリファレンスでwriteInt()を調べな
0443デフォルトの名無しさん
2006/01/11(水) 21:45:47次にwriteBytes()で文字列を書き込むって感じでしょうか?
とりあえず試してみます。
0444デフォルトの名無しさん
2006/01/12(木) 15:22:420445デフォルトの名無しさん
2006/01/13(金) 23:26:41マスコットカプセルのページの資料にもサンプルが無く行き詰っています。
3.5のオプションの時は大丈夫だったのですが・・・。
すでにフィギュアを表示していて、地上の表現に使用したいと思っています。
なのでフィギュアが格納されているGroupオブジェクトに入れるわけでもなく、
g3.renderObject3D(primitive,trans);//地面の描画
みたいに別になるんですよね?
そもそもプリミティブ自体を表示できてもいない状態なので
余計な推測でしかないですが、どなたかご教授頂ければと思います。
長文失礼しました。
0446デフォルトの名無しさん
2006/01/14(土) 02:08:340447デフォルトの名無しさん
2006/01/14(土) 11:17:35なにやらアホなことやってまして。
getVertexArray()
で
primitive.getVertexArray()[i]=primitive_data[i];
となるところを
primitive_data[i]=primitive.getVertexArray()[i];
としてました。
ほんとお騒がせしました。m(_ _)m
0448デフォルトの名無しさん
2006/01/14(土) 15:10:39mascot capsuleで携帯向けに変換できるんだろか?
というか、皆さん3Dモデルのモデリングには何を使ってるんでしょか。
■ このスレッドは過去ログ倉庫に格納されています