CLDC+MIDP+携帯電話用Javaスレッド part 3
>>1 乙。
AUのPhase3.0対応のエミュレーターまだ〜?
まぁ、出ても激遅で使えんのでしょうが。
>3 噂によると出ていることは出ているらしい。 ただ、Phase3.0自体こけたも同然の仕様なので、一般には配布されてないそうな。 あうと契約を結んだベンダーにはこっそり配布されるらしいが、 遅い早い以前に描画がメチャクチャでどーしよーもないとか……
へぇ。あうJAVAは破綻ぎみか・・
>>7 そのサイトの「MascotCapsuleツールの配布」→「Micro3D Tools (Win専用)フリー」→
「マニュアル」欄の「2Dスプライト プログラミングガイド」をダウンロードすれば多分解決。
>>9 ありがとうございます
Windows BMP なんですね
>>10 そうなのか。
なら、JSCLもVSCLになったり・・・・ヽ(`Д´)ノ ウワァン
13 :
デフォルトの名無しさん :04/08/08 06:32
Vで質問です。 StorageConnectionを使って作ったInputStreamでInputStreamReaderを作るとなんか変です。 ちゃんと文字が読めません。(System.out.printlnすると□ばかりに化ける) 開きたいファイルをそのままjarに入れておいて、getResourceAsStreamから作ったInputStreamだとちゃんと読めます。 原因何かないでしょうか。JSCL1.2対応のエミュで実行しています。 StorageConnection conn = (StorageConnection)Connector.open( "file://"+textfile); InputStream in = conn.openInputStream(); //in=getClass().getResourceAsStream(filename)だと読める InputStreamReader reader = new InputStreamReader( in, "SJIS"); char[] buf = new char[8192]; reader.read(buf); System.out.println( new String(buf));
textfileがパスを含んでないとして "file:///ms/"+textfile とやるんじゃない?
>>14 いや、パスが違うとかそういうレベルじゃないです・・・
InputStreamReader使わずにInputStreamから直接byteで読み込んでStringに変換するとうまくいってるわけです。
素直に、InputStreamReaderを回避するしかないんだろうか。。
>いや、パスが違うとかそういうレベルじゃないです・・・ だってtextfileやfilenameの文字列が具体的に書いてないから分からないじゃない。
>>13 文字エンコーディングがおかしくなってそうだけど。
なんでだろ。
忘れてなけりゃ、あした調べとく。
>>17 元のテキストはShift_JISです。
getResourceAsStreamから読む場合やInputStreamからbyte読んでnew String(byte[],String)する場合は
SJISコンバータで読めてます。
new InputStreamReader(InputStream)の方のコンストラクタ使ったりUTF-8コンバータにしたりもしてみたんですが
やっぱダメでした。デフォルトのエンコーディング指定だとSJIS指定時と同じ感じに、UTF-8の場合は完全に化け化けな文字になりました。
InputStreamからbyteで読み込んで変換する方法でうまくいってるんで、とりあえずこっちで対処することにします。
ダライアス難しいよなぁ。 easyでもきつい。 故意に死んで球かせぐ必要あり?
ごめん、誤爆です誤爆w;Vodafoneのダライアスの話
21 :
デフォルトの名無しさん :04/08/10 15:33
アプリゲットに開発者として登録しようと思うんですけど、 HelloWorldプログラムみたいな、明らかにふざけてるだろ、っていうプログラムは審査に引っかかりますか? あ、公開ではなくテスト領域の方へのうpです。
テストには審査無いはずです。
審査っつぅか JADとJAR(MANIFEST)がマッチしてかつ必要な情報書き込まれてるか 機械的にチェックするだけなんで エローワールドでもハローC#でも通りまする。
>>21 FTPで必要なファイルをアップロード
→機械的なチェックのみ。
→作者宛にダウンロードのためのURLがメールで送られてくる。
これにかかる時間はだいたい30秒。
>>18 =13
おそくなってごめん。
StorageConnectionから生成したInputStreamで、InputStreamReaderを
生成すると、やはり文字エンコーディングがおかしくなってるね。
解決策は、InputStreamReaderを使わない。ってことになる。
26 :
デフォルトの名無しさん :04/08/11 03:03
>>22-24 おお、サンキュです!
機械チェックだけだったんですね。早速登録してみます。
>>25 どうもありがとうございます。
やはり再現しましたか・・・ここはInputStreamからbyte読み込んで処理することにします。
余裕があれば実機でも試してみることにします。
>>27 試すまでもなく、実機も同じ動作になるよ。
だって、.....。
#守秘義務のため、これ以上は言えない。
29 :
デフォルトの名無しさん :04/08/11 20:37
携帯アプリの開発でソースレベルデバッグは出来ないんですかね?
ふつうにできる
31 :
デフォルトの名無しさん :04/08/12 04:28
Vアプリのスプライト処理で質問です。 以前、C4でACanvasを使ってゲームを作っていたのですが、 同様の手順でP5対応のアプリを作成したら、ものすごく遅くなりました。 P用にSpriteCanvasを使用するよう変更しても、遅いままです。 Sprite機能を使わず、drawImageで過去座標キャラを背景で消し、 書き直すという処理にしたら速度が出るようになりました。 一般にP5でのSprite処理は重い物なのでしょうか? それとも効果的な使い方があるのでしょうか?
32 :
デフォルトの名無しさん :04/08/12 09:51
>>30 どうやってやるんですか?
探してもそれらしいものが見当たらないのですが。
Vアプリの2Dスプライトって、任意の角度での回転や 拡大縮小はできるんでしょうか。 資料読んだところ、90度単位でしか回転できなさそうですが……。 ひょっとしてMicro3Dで板ポリ作って表示しなきゃいけないのでしょうか?
>>33 90度単位の回転と左右反転のみだね。
拡大縮小もなさそう。
というか、8*8固定だし。
>34さん そのようですね。 ezplusのPhase3.0でならSplite2Dでできるようなんですけどねぇ。 ありがとうございます。
36 :
デフォルトの名無しさん :04/08/13 18:18
KJX作成ツールでKDDIのサンプルソースそのままコンパイルすると CreateProcess: c:\jdk1.3.1\bin\javac -encoding SJIS -g:none -d C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses -bootclasspath c:\J2MEWTK\lib\midpapi.zip;c:\ezplusTools\Tools\KDDI-P\kddip.jar -classpath C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses C:\ezplusTools\Tools\CmdTool\project\HelloWorld\src\HelloWorld.java error=3 とか出てきてKJXが出来ないんですけれども理由がわかんないです。。。
HelloWorld.javaのソース貼ってちょ。
ああ、ごめん貼らなくていいや。そのままなのね。
と思ったけどやっぱり貼ってちょ。
40 :
デフォルトの名無しさん :04/08/13 18:47
一応はりますね import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class HelloWorld extends MIDlet implements CommandListener{ Command exitCommand; Display display; public HelloWorld(){ display = Display.getDisplay(this); exitCommand = new Command("Exit",Command.SCREEN,2); } public void startApp(){ TextBox textbox = new TextBox("HelloWorld","Hello World!",256,0); textbox.addCommand(exitCommand); textbox.setCommandListener(this); display.setCurrent(textbox); } public void pauseApp(){} public void destroyApp(boolean unconditional){} public void commandAction(Command command,Displayable screen){ if(command==exitCommand){ destroyApp(false); notifyDestroyed(); } } }
41 :
デフォルトの名無しさん :04/08/13 18:49
それとエラーの全文です compile start... c:\jdk1.3.1\bin\javac -encoding SJIS -g:none -d C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses -bootclasspath c:\J2MEWTK\lib\midpapi.zip;c:\ezplusTools\Tools\KDDI-P\kddip.jar -classpath C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses C:\ezplusTools\Tools\CmdTool\project\HelloWorld\src\HelloWorld.java build failed. exception:java.io.IOException: CreateProcess: c:\jdk1.3.1\bin\javac -encoding SJIS -g:none -d C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses -bootclasspath c:\J2MEWTK\lib\midpapi.zip;c:\ezplusTools\Tools\KDDI-P\kddip.jar -classpath C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses C:\ezplusTools\Tools\CmdTool\project\HelloWorld\src\HelloWorld.java error=3
MIDPかなんかのパスがまちがっとる。 c:\J2MEWTK\lib\midpapi.zip ほんとにこんなもんあるけ?
43 :
デフォルトの名無しさん :04/08/13 19:03
>>42 あります・・・
それを解凍して中身をみたら
com
java
javax
ってフォルダが入っていてその下にいろいろ入ってました。
ほんとにjavaのバージョンは1.3.1だか?
45 :
デフォルトの名無しさん :04/08/13 19:22
javaのバージョンが間違っていたので全部直しました。 全てのフォルダを確認しながら設定しました。 それでも動きません。。 javac path c:\j2sdk1.4.2_04\bin\javac jar path c:\j2sdk1.4.2_04\bin\jar preverifypath c:\WTK104\bin\preverify other after process path java -jar c:\ezplusTools\Tools\CmdTool\KJXArchiver.jar -c %PROJDIR%\bin\%PROJ%.jad %PROJDIR%\bin\%PROJ%.jar %PROJDIR%\bin\%PROJ%.kjx class path C:\WTK104\lib\midpapi.zip;c:\ezplusTools\Tools\KDDI-P\kddip.jar
今のエラーメッセージだしてみるとよか。 パス貼られても確かめようないぞなw
あと、設定なおしたらKJXは再起動。反映しなかったりしる。
なんていうのは嘘で。。。 プロジェクトの設定も直さないとダメぽ。
あう開発のちうい点
@パスは間違えるな!
Aプロジェクト名はエントリのクラス名にしとけ!
B環境を直すときはデフォルトの環境だけでなくプロジェクトの環境も直せ!
Cパスは間違えるなってば!
できたべ?
>>45
50 :
デフォルトの名無しさん :04/08/13 19:41
現在のエラーです プロジェクトは最初から作り直しました・・・・ compile start... c:\jdk1.3.1\bin\javac -encoding SJIS -g:none -d C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses -bootclasspath c:\J2MEWTK\lib\midpapi.zip;c:\ezplusTools\Tools\KDDI-P\kddip.jar -classpath C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses C:\ezplusTools\Tools\CmdTool\project\HelloWorld\src\HelloWorld.java build failed. exception:java.io.IOException: CreateProcess: c:\jdk1.3.1\bin\javac -encoding SJIS -g:none -d C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses -bootclasspath c:\J2MEWTK\lib\midpapi.zip;c:\ezplusTools\Tools\KDDI-P\kddip.jar -classpath C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses C:\ezplusTools\Tools\CmdTool\project\HelloWorld\src\HelloWorld.java error=3
エラー時に1.3.1のディレクトリが表示されるちうことは デフォルトの環境は直したけどこのプロジェクトの環境は元のまま ちうことだべ。
ほらな〜。
53 :
デフォルトの名無しさん :04/08/13 19:47
プロジェクトの設定直しました・・・ すいません。でも動きません(ノД`)ノ KJXのコンソールに出力されたメッセージです。。。 C:\ezplusTools\Tools\CmdTool>c:\j2sdk1.4.2_04\bin\java -jar CmdTool.jar java.io.IOException: CreateProcess: c:\jdk1.3.1\bin\javac -encoding SJIS -g:none -d C:\ezplusTools\Tools\CmdTool\project\HelloWorld\tmpclasses -bootclasspath c: \J2MEWTK\lib\midpapi.zip;c:\ezplusTools\Tools\KDDI-P\kddip.jar -classpath C:\ezp lusTools\Tools\CmdTool\project\HelloWorld\tmpclasses C:\ezplusTools\Tools\CmdToo l\project\HelloWorld\src\HelloWorld.java error=3 at java.lang.Win32Process.create(Native Method) at java.lang.Win32Process.<init>(Win32Process.java:66) at java.lang.Runtime.execInternal(Native Method) at java.lang.Runtime.exec(Runtime.java:566) at java.lang.Runtime.exec(Runtime.java:428) at java.lang.Runtime.exec(Runtime.java:364) at java.lang.Runtime.exec(Runtime.java:326) at jp.co.aplix.micro.toolbar.model.Project.exec(../src/model/Project.jav a:322) at jp.co.aplix.micro.toolbar.model.Project.access$100(../src/model/Proje ct.java:13) at jp.co.aplix.micro.toolbar.model.Project$Builder.run(../src/model/Proj ect.java:373)
めにうの <tool>のdefault env...が全体の環境、 <Project>のedit envがこのプロジェクトの環境だべさ。 もうちっとだ。ガンガレ
('A`)えー・・
javacんとこ1.3.1て書いてあるジャン
57 :
デフォルトの名無しさん :04/08/13 19:51
プロジェクト一回全部消して作り直したら動きました 大変ありがとうございました、助かりました!
よかたね(○´ー`○)なっちもよろこんでるべさ
>>3 ,4
Phase3エミュは一般にも一瞬だけ公開されましたよ。一般でも一部の人は持ってます。
確か携帯アプリ板でちょっとだけアップしてくれた人もいました。
エミュの速度はVodaのP5エミュと大差ありません。安定性はVodaのほうが上な気がします。
でも、KJX作成ツールからダブルクリックでエミュに行けるのが便利です。
遅いPCでやると画面の更新が変になって崩れます。
おお、ほんとだ。何故こんな所に・・。
大きな画像を読み込むとき読み込み完了前に データにアクセスしてNullPointerExceptionとなります。 読み込み完了まで待機したいのですがどうすればいいのでしょうか? au Phase2.5です。
img1=null; img1に画像読み込み; while(img1==null){ }//空ならずっと何もしないで繰り返す どっかでこういうの見かけて、ずっと真似してるんだけど、これで効果あるのかな?
>62 より堅い手を使うとすれば適当なオブジェクトでsynchronize掛けるとか。 まぁ、Phase2.5機なら、「読み込み中」「描画中」のフラグで管理しても 問題ないと思うが。
createImageってブロックされるんとちゃう?
それとも違う話かえ?
>>62 の画像は
ほったらかしてからアクセスすると見れる画像なわけかい?
読み込み自体失敗してないかい?
66 :
デフォルトの名無しさん :04/08/16 16:25
mainclass.java、 subclass_1.java、 subclass_2.java と言うファイルがあってmainclass.javaでは public class mainclass extends MIDlet { public void startApp(){ subclass_1 s1 = new subclass_1(this); Display.getDisplay(this).setCurrent(s1); } public void pauseApp(){} public void destroyApp(boolean b){} } とやってsubclass_1を動かしています そしてsubclass_1からsubclass_2へ画面の制御を完全に移したくて subclass_1のコマンドアクションでCurrentに表示されるクラスを変えたいのですが public void commandAction(Command c,Displayable s){ if(c==next){ subclass_2 s2 = new subclass_2(this); Display.getDisplay(this).setCurrent(s2); } } とすると シンボルを解決できません。 シンボル: コンストラクタ MainMenu (Intro) 場所 : MainMenu の クラス MainMenu m = new MainMenu(this); javax.microedition.lcdui.Display の getDisplay(javax.microedition.midlet.MIDlet) は (subclass_1) に適用できません。 Display.getDisplay(this).setCurrent(s2); となってしまいs2のクラスを表示できません、どうすればいいんでしょうか・・・
getDisplay(this)に何が入っているでしょうか、てことです。 mainclassで呼んだgetDisplay(this)のthisはmainclass、 subclass_1のコマンドアクションで呼ばれたgetDisplay(this)のthisは subclass_1が入っておる、と。 そりゃーJavacも悲鳴あげます。 mainclassを入れてあげて。
というか、Javacの報告を無視してはイクナイです。
ありがとうございます! えっとMIDPのインスタンスのappをthisに入れたら動きました subclass_2 s2 = new subclass_2(app); Display.getDisplay(app).setCurrent(s2); ちゃんとコンソールにでるjavacのメッセージを確認します。。。。 ありがとうございます!
よかたね。なっち(○´ー`○)もよろこんでるべさ。
新しくPC買いたいんだが、オススメある? TVチューナー+アプリ作成しやすい奴。
>>71 広いディスプレイと打ちやすいキーボードがあれば、
あとはソフトウェア次第なんでどうでもいい。
あ、メモリは1GBね。
73 :
デフォルトの名無しさん :04/08/18 16:47
HttpConnection でネットに繋ごうとすると IOException例外が発生して 詳細メッセージはout of service とだけ出ます。 これって何がいけないんでしょうか? サンプルのソースでやってみてもどれも同じエラーが出てしまいます。 どなかた分かる方ご教授下さい。
環境かいてちょ
75 :
デフォルトの名無しさん :04/08/18 19:55
Win2K, LAN接続 J2SE 1.4.2_04 JSCL 1.07.00 WTK 1.04 preverifyのみ利用 .jad ファイルのMIDlet-Network は Y になってます。
うーん・・・ 何のサンプル? 公式と手持ちの本のconnectionまわりのサンプルを いくつかP5とc4のエミュで 試したけど失敗した例ないわ〜 公式マニュアル概要編によればout of serviceは ネットワークサービスに問題がある場合とあるから LAN環境とか串がどうとか、接続先とかそのあたりのことが問題なのでは と妄想したけど。 ちなみにJSCL 1.07.00って何型の端末用?
>>76 知り合いから貰ったもので元々なんのサンプルかは分からないのですが
極めてシンプルなサンプルでただテキストフィールドに
入力されたURL(JPEG,PNGのファイルを指してる)に繋いで
その画像ファイルを表示するだけのものです。
URLは
http://localhost/1.pngとなってます 。
なのでhttpサーバー起動してます。
試しにブラウザからこのURLにアクセスするときちんと表示されます。
LAN環境はWWWへはNATで繋いでいて
ファイアーウォールは使わず串も通してないです。
>ちなみにJSCL 1.07.00って何型の端末用?
P4型です、JavaDoc開いた時のブラウザのタイトルバー見たら
1.07.00 とあったので、あ、これかと思って書きました。
>>78 すいません、質問しておいてなんなのですが
ちょっと諸事情あってアップは出来ないんです。
本当に特別な処理はなく
HttpConnection hcon = null;
hcon = ( HttpConnection )Connector.open( "
http://localhost/1.png ", Connector.READ );
と普通にオープンしてByteArrayOutputStreamでバッファに書き込み
Image.createImageでイメージを作成、表示してるだけなんです。
ただApachと聞いてちょっと思い当たる節があるのですが
マニュアルのどこかにApach以外のサーバーとの接続保証はしない、
とあったような・・・
ちょっとApach試してみます、どうもです。
>>73 エミュレータはプロキシを使用しない場合は通信したいサーバのIPとポートを
JTProp.datのProxyとProxyPortに設定しておかないと通信できなかったような
気がしたけど、試してみましたか?
質問させてください。 tempIはInteger型。 byte[] b = (tempI.toString).getBytes; というコードで、 シンボルを解釈処理できません。 シンボル: 変数 toString 位置 : java.lang.Integer の クラス byte[] b = (tempI.toString).getBytes; ^ compile failed エラー 1 個 と、エラーが出てしまいます。 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.rms.*; import java.lang.*; import java.util.*; を読み込んでいるのですが、なにか足りないものでもあるのでしょうか? コンパイルはezアプリ用のcmdToolを使ってます。
>>82 プロパティじゃなくてメソッドだから
byte[] b = (tempI.toString()).getBytes();
じゃなくて?
>>83 ありがとうございます。お陰様でできました。
多言語からJava乗り移ってきたけどつらいorz
85 :
デフォルトの名無しさん :04/08/20 10:01
携帯画像ファイルを取得して上にお絵かきして表示するアプリを作成しています。 vodafoneのC4、P4型(JSCL 1.0)でResourceOperatorで取得した画像データを Imageクラスに読み込む方法を知りませんか? MediaPlayerでは表示した上に描画できないようなので何か別の方法を知りませんか?
>>85 ちょっと前にオレがjavadocを熟読した感じでは、たぶん無理。
StorageConnection使え。。
ん〜、でも今読んでみた限りは、
データフォルダ上のJPEGをImageに変換できないような気がする。。PNGならできると思う。
つーことで、JPEGデコーダ頼んだ。
Image->JPEG(data[])はImageEncoderで
データフォルダ->JPEG/PNG(data[])はStorageConnectionで
PNG(data[])->ImageはImage#createImageで
↑素人のオレがJavadoc眺めて想像しているだけで、ホントにできるかどうかは知らん。
>>86 StorageConnectionはJSCL1.2からなのでC4、P4型では使えないです。
データフォルダからデータを取得するのはResourceOperatorしか無さそうで、
ResourceOperatorのデータはMediaPlayerでしか扱え無さそう。
何か方法は無いでしょうか?
ちなみにJSCL1.2でStorageConnectionを使えばデータフォルダのJPG、PNG
のどちらでもImageに読み込めます。
g.drawString("ぬるぽ",0,20,g.LEFT|g.BOTTOM);
>>87 方法は無い。
JSCL 1.0 の時代には、そのようなことは想定されていなかった。
ちなみに、方法がないのは著作権保護の理由があって、 保護されているファイルを読み取って送信するとか、そういう用途に使えないようにするため。
>>88 g.drawString("ガッ",0,40,g.LEFT|g.BOTTOM);
>>89 画像データの上に描画して表示したいだけだったら、MediaPlayerのpaintをオーバーライド
すれば実現できないのかな?
俺もちょびっと調べてみたけど どうもC4・P4ではできそうにない。 それに近いことをしてるアプリって存在するのだろうか。
>>91 javadoc見たけどC4型のMediaPlayerはCanvasからの派生ではないので無理。
P4型はできるかもしれない…
以下のようなコードは
ネットワーク上のファイルに書き込みだよね?
うまく書き込めないんんだけど
なぜかわかる人いる?
環境は
MIDP1.x系全般のエミュ、
ローカルサーバで実行して
レスポンスコードは200
hc = (HttpConnection)Connector.open("
http://localhost/test.log ");
os = c.openOutputStream();
os.write(data);
os.close();
res = hc.getResponseCode();
hc.close();
そんなんでネットワーク上のファイルに書きこめたら ((((;゚Д゚))))ガクガクブルブル
え、違うのか!?www ごめんよかったら教えてちょ
>>96 サーバーにHTTPリクエストを送ってるんでしょ?
「ネットワーク上のファイルに書き込み」は
サーバー側の仕事。
あああ、なんとなく納得。
WebDAVなら直接書いたりできるんだろうか。。
まぁオレには関係ないか・・
>>87 ちょいと裏技になるんだが、
ACanvas(SpriteCanvas)でのフレームバッファの転送は、
ACnavas(SpriteCanvas)が画面として設定されていないときにもできる。
つまり、com.j_phone.media.MediaPlayerを画面に設定しつつ、
裏でflush(drawFrameBuffer)とかすれば重ねて表示できる。
まぁ表示したところで、表示後ごにょごびょしたものをImageなりbyteなりで取得できないんで、
>85 の目的のお絵かき用には使えないと思う。
SH53で 20x20のチップ敷き詰めてループまわすと FPS10で限界チック。 早くするために君ならどうする?
処理速度の速い端末が出るのを待つ
SpriteCanvas使ったらはやくなるもんかい?
/***001.java public class 001 extends MIDlet { static MIDlet current; /** コンストラクタ */ public 001() { current=this; main canvas=new main(); Form form=new TextFieldForm(); Display.getDisplay(this).setCurrent(canvas); Thread thread=new Thread(canvas); thread.start(); } /***main.java class main extends Canvas implements CommandListener, Runnable { public void commandAction(Command c,Displayable s) { if (c==soft2) { Display.getDisplay(this).setCurrent( from ); repaint(); } } }
/***TextFieldForm.java /** テキストフィールド(フォーム) */ class TextFieldForm extends Form implements CommandListener { public void commandAction(Command c,Displayable s) { if (c==soft2) { Display.getDisplay(this).setCurrent(canvas); repaint(); } } } でmainからTextFieldFormへの切り替えはできたのだがその逆ができない・・ 教えてエロイ人!
>>105 TextFieldFormクラスの
Display.getDisplay(this).setCurrent(canvas);
のcanvasってどっから来るのさ。
>>106 書き換え忘れです・・・。
そこの部分をなんと書けばいいのだろうか・・・
何か所か出てくるDisplay.getDisplay(this).setCurrent(…); のthisがそれぞれ何を指しているか考えれば誤りに気付くと思う。
>>108 Display.getDisplay(001.current).setCurrent(form);
Display.getDisplay(001.current).setCurrent(canvas);
にしたところ、thisのところのエラーは無くなったけど
setCurrentのところが分からない・・・
オブジェクト指向が理解できていない様子。 formとcanvasのインスタンスはどのクラスが保持しているのか考えてみて。
>>109 基本的なJavaの決まりごとをおさらいするのも必要だと思うよ。
よくわからないまま動いても応用きかないから
つまづいてばかりでかえって遠回りかも。
あわてずにガンガッテ。
となっち(○´ー`○)さんがおっしゃっています。。。
112 :
デフォルトの名無しさん :04/08/24 10:42
vodafoneのVSCL2.0ではStorageConnectionは無いのでしょうか? せっかくJSCL1.2で携帯内部データが使えるようになったのに VSCL2.0からは使えなくなってしまうのでしょうか?
113 :
デフォルトの名無しさん :04/08/24 18:58
MIDPのhttp接続について質問させてください。最初にソースです。finallの処理は省略してますy
public String setHTTPConnection( String service, String dat, int len )
{
String url = "
http://localhost/test/test.php&dat= ";
HttpConnection con = null;
InputStream in = null;
try{
con = (HttpConnection)Connector.open(url,Connector.READ,true);
con.setRequestMethod(HttpConnection.GET);
in = con.openInputStream();
int length = (int)con.getLength();
if(length<0) {
ByteArrayOutputStream _o = new ByteArrayOutputStream();
byte[] buf = new byte[len];
int t = 0;
while((t=in.read(buf))!=-1){
_o.write(buf,0,t);
}
_o.close();
str = new String(_o.toByteArray());
}else{
byte[] buf = new byte[length];
in.read(buf);
str = new String(buf);
}
} catch(Exception e){}
return str;
}
114 :
デフォルトの名無しさん :04/08/24 19:02
>>113 の関数にURLを渡して
サーバーのphpで処理をして返り値を取る関数を作りたいのですが
httpに接続が全く出来ません。。。
ADFのOtherKeyWordには
MIDlet-X-AllowURL-1:
http://localhost/test/ と設定してあります。
どなたか有効な対処法ご存知でしたらお願いします。
115 :
デフォルトの名無しさん :04/08/24 20:04
DB系のプログラムって具体的にどういったものでしょうか。
調べてみたところ con = (HttpConnection)Connector.open(url, Connector.READ, true); の時点で java.lang.NullPointerException が帰ってきてしまいます。 サンプルどおりに作ったんですけども・・・
>115 まずその「DB」が何の略語かはっきりさせれ。 脊髄反射で「データベース」の略語と思いそうだが いくらなんでもJDBCドライバ同梱してDBとやりとりするようなアプリを 携帯向けに作るとは思えんし。つーかJ2MEで使えるのかJDBC。
|つーかJ2MEで使えるのかJDBC。 CDCなら聞いたことあるが、CLDCはしらんな。
Form form; main canvas; を追加したらコンパイル出来たのだが切り替わらない・・・。 うーむよく分からない・・・・ 誰か教えてくれぇー・・・・
public class test extends MIDlet { public static MIDlet mid; public test(){ Display.getDisplay(this).setCurrent(new TestCanvas("0")); } class TestCanvas extends Canvas implements Runnable, CommandListener{ public TestCanvas(String pt){ mt_Select = pt; } TestCanvas a1 = new TestCanvas("1"); Display.getDisplay(test.mid).setCurrent(a1); } 細かい処理は削らしてもらいましたけど、 今、a1 への表示切替で困っています。 Display.getDisplay(test.mid).setCurrent(a1); が悪いのは何となくわかってるのですが、 どのように書けば良いかわかりません。 どなたかヘルプお願いします。 同じようなネタあったけど...(汗) エラーは... Uncaught exception java/lang/NullPointerException at com.jblend.display.DisplayManager.getDisplay(+13) at javax.microedition.lcdui.Display.getDisplay(+4) destroy Old Emulator.... By M
class TestCanvas …{ }
122は書き途中で送信しちゃったミス
>>121 class TestCanvas extends …{
…
TestCanvas a1 = new TestCanvas(…);
}
クラス定義の中で自分自身を生成しちゃってるのがダメ。
a1はTestCanvasクラスの定義の外でnewして引数で渡すなり何なりして。
皆様のおかけで無事動くようになりました! 特になっち(○´ー`○)さんアリガト!(´▽`)
>121 test.midにtestのインスタンスをセットする文が見あたらないが ここへカキコするときに省略しただけ?
g.drawString("ぬるぽ",0,20,g.LEFT|g.BOTTOM); って書いてもガッされないのは仕様ですか??
>126 >88-91
(○´д`○)ウーム・・ Javaの入門書とか読まないで MIDPはじめちゃうものなのかしら。
public class test extends MIDlet { public static MIDlet mid; public static TestCanvas sc1; public test(){ SetCanvas sc1 = new SetCanvas("1"); mid = this; Display.getDisplay(this).setCurrent(new TestCanvas("0")); } } class TestCanvas extends Canvas implements Runnable, CommandListener{ public TestCanvas(String pt){ mt_Select = pt; } Display.getDisplay(test.mid).setCurrent(test.sc1); } 変更かけてみたんですけど、やっぱりうまくいかないようで... ご教授をお願いします...m(._ .)m by M
>>129 厳しいこと言うけど、現時点の知識でソースをいじくり回しても無駄でしょう。
先にJavaの基本的な文法や構文の書き方を修得してください。
変数の有効範囲とかが理解できてないようだから、仮に今の問題を解決
してもらってもこの先何度もつまずくと思う。
>>129 急がば回れ。
まずはJavaの基礎からだ!
がんばれ
たびたびすみません。 /*main.java*/ static int test=0; /*TextFieldForm.java*/ textField=new TextField("Test",main.test,150,TextField.URL); のとき、main.testの値を変えてもテキストフィールドに反映されません。。 テキストフィールドを更新?するにはどうやったらいいのでしょぅか?
よくわからんがset〜ってメソッドがあるんじゃないの? APIリファレンスを熟読してくれ
staticで宣言してるからじゃないの?
パッケージ java.net は存在しません。 import java.net.*; と言われたが 携帯のjavaにはjava.net.URLEncoder ってないのか? 無いのならURLエンコードする方法はないのか??
あうだとcom.jblendあたりにURLエンコーダがあった希ガス。 KDDIプロファイルのAPI docをご覧あれ。
Javaの基礎を飛ばしてMIDPをはじめるのは別にいい。
ただ、そこから出てくる困難を俺らに押し付けるのはハッキリ言って迷惑。
困ってる人は助けてあげたいけど、何ていうか努力の跡が見えん。
実際に、1時間ぐらい分かりやすい説明考えて教えてやっても
五分くらいで「できました!でも次は〜が・・」みたいな奴がいる。
しかもその五分を「いろいろやってみたけど」とか言いやがる。
相手の時間より自分の時間を大事にするような奴は最低だと思うが・・。
>>104 まず、TextField( String , int , int , int ) はおかしくねーか?
とりあえず textField.setString( "NEW_TEXT"); とかやってみ。
>>129 104で、ものすごい近い事やってるとか思わなかったか?
ボダホンだと com.j_phone.io.URLEncoder これかのぅ
>>139 > JSCLはオプション扱いとなるため
>112 の話とつながったか。
つまり、JSCLはいったん全部葬り去られる可能性大か。んで、MIDP2.0へと。
ドコモもMIDP2.0にして欲しいな
最近Vアプリの開発をやり始めましたが、 Vアプリエミュレータ(P5)を直接起動する方法が 分かりづらくて結構手こずってしまった・・・。 とりあえず 「emulator.exe -classpath ○○.jar -Xdescriptor:○○.jad」 で直接起動できる事は分かりましたが、 これで起動すると、アプリで描画する領域が Vアプリエミュレータの携帯ディスプレイ領域 からはみ出してしまいます。(エミュレータ側の Displayサイズ設定が変わってしまうから?) 何かいい解決策はないでしょうか?
MIDP2.0のリファレンス見てたんだけど 3D関係はないのかな? 結局は国内外の各キャリアが それぞれ独自にAPI追加したんじゃ 国際標準の迫力にかけるねぇ
>>142 emulatorは起動されたディレクトリに
参照できるmachine.profileが存在しない場合に
デフォルトの設定で起動されるみたいなので
こんなバッチファイルで起動するのはどうでしょか・・
[run.bat]
copy C:\V-appli_SDK_121\bin\machine.profile
C:\V-appli_SDK_121\bin\emulator.exe -Xdescriptor:test.jad
正当な手段は
>>146 が教えてくれる見込みです。
145 :
デフォルトの名無しさん :04/08/28 11:24
>>144 情報サンクス!
少し邪道な手段ですが、machine.profileを
あらかじめemulatorを起動するディレクトリに
コピペして解決しました。
>>143 Mobile 3D Graphics API for J2ME がオプション規格としてあるそうな。
J2ME Wireless Toolkit 2.2を落としてみるといろいろデモが入っているよ。
>>146 お〜・・・・そうなのね
さっそく落として見ます
148 :
デフォルトの名無しさん :04/08/28 15:23
Vアプリのエミュレータ起動すると、 起動時のフラッシュ(っていうのかな?タイトルロゴみたいな) が「最前面」で表示されるのどうにかならないですかね。 起動が遅いんで、その間ブラウザを見ようとしても「最前面」にしつこく出てきて、 しかもキーのフォーカスも奪っていくものだから、起動完了するまで待たされる罠。 OS:Windows2000 JDK:J2SDK 1.4.2_05 エミュレータ:P5型の最新 オレだけかな、この現象?
>>148 WinXP、AthlonXP 2200+(1.80GHz)、256MB RAM環境だと
スプラッシュウィンドウの表示は1秒未満だから気にならないみたい。
>>142 のまねっこするか、パソコン買い換え・・
>>146 Mobile 3D Graphicsのサンプル見てみました。
エミュで見る限りは重い感じだけど
オプションも導入すれば
大抵のことはMIDP2.0で出来ちゃうってことだね〜
>>148 スプラッシュウィンドウってそういうもの(それが当たり前)だから放っておくしかない。
起動が遅いアプリ(Vエミュに限らず一般的に)が、起動完了まで画面に何も出ないと
ユーザーは「あれ?起動してるのかな?固まってるのかな?」と不安になるので、
ただいま起動中ですよ、の印代わりに1枚絵の画面を出しておく。
そしてアプリ本体が起動すれば消える。
これがスプラッシュ(ぱしゃっと水がはねる→現れてすぐ消えるの意味)ウィンドウの役目。
アプリの作りでスプラッシュウィンドウからフォーカス外せたり最前面から後ろへ回せたり
できないようにしてあるなら、ユーザーはどうしようもない。
>>149-150 スプラッシュウインドウでしたねw
やはりどうしようも無いんですねぇ--;
我慢します。ありがとうございました。
>>139 その記事は妄想ではないですよ。
アプリは国内外問わずに流通されるようになる。のかなぁ。
>>139 ただ、ライブラリがMIDP準拠のとか、
Vオリジナルとか出来ちゃって動作検証で泣くカモ知れない。
1Mアプリやるからには定額制導入するだろうケドも、
テスト面倒と思われ。
キャリア・端末でマチマチになっちゃうと 国際標準である意味が曖昧になるよね。 完全準拠であうとがんばってくれたら 市場活性化すると思うんだけど。 あうはどうなんだっけ、Javaとは決別の方向性なのかな。
auはJAVA捨て。今売られてるもの以降は出ない。 アプリ目的でキャリア換えする人は少ないから、BREWがよっぽどこけない限り、 JAVAを積極的にやろうとは思わないはず。 BREWにして困るのはCPだけだし。
なるほど。ということは、 docomoはDojaで制約がないので好きにできる。 auはBREWでパフォーマンスを追及できる。 VodafoneはMIDP2.0とJSRで自らに足かせ。 ・・・ん?
足かせ じゃなくて、コンテンツの流通市場が広がる。 と好意的に解釈しなくちゃ。 同じアプリを世界中にバラまけるようになるはずだし...。
159 :
デフォルトの名無しさん :04/08/30 20:40
HttpConnection con = null;
con = (HttpConnection)Connector.open(url);
この時点で例外が投げられるってのはどういう場合に考えられますか。
ADFの設定の
MIDlet-Network: Y
MIDlet-X-AllowURL-1:
http://localhost/ は書いてあります。
ブラウザでURLにアクセスするとちゃんと見れます
161 :
デフォルトの名無しさん :04/08/30 22:02
すいませんでした、エラーの内容を書きます。 catch(Exception e){ System.out.println("HTTP接続に失敗しました"); System.out.println(e); HTTP接続に失敗しました java.lang.SecurityException: access denied
162 :
デフォルトの名無しさん :04/08/30 22:15
>>160 例外の内容を書いたのに答えが無いのはなぜ?
163 :
デフォルトの名無しさん :04/08/30 22:27
それが分からないから質問してるんですけども
164 :
デフォルトの名無しさん :04/08/30 22:33
access denied って言われたって ブラウザから全く同じアドレスで確認できる ADF設定は上に書いたとおりに行っている その上でエラーになるので質問をしているんです。
質問者本人のレスかわからないけど 例外を教えてやったんだから 答えろって態度はおかしくないかい? 実行環境すら書いてないし。 例外が java.lang.SecurityException: access denied とわかっていれば、 この場合はezplusエミュで MIDlet-X-AllowURL-1属性とマッチしないホストへ 接続を試みているのではないか、 早い話、接続先のURLがおかしいのではないか、 なんて見当もつけられるけど。
質問者は端末(エミュレータ)がauなのかvなのか、それとも他のMIDP端末なのか、
auならPhaseいくつか、vならC4型かP4型かP5型かとか書かないと
回答者も困ると思うんだが。
>>159 を見てもそれがわからん。
>MIDlet-Network: …これはvでは書くがauでは書かないもの。
>MIDlet-X-AllowURL-1: …これはauでは書くがvでは書かないもの。
と俺は認識してるんだが、回答できる人はこれを見て何の端末か分かるもんなの?
>>167 >>159 だけだとエミュとしか。
定義されてない属性をつけてはいけないわけではないから
WTKすらありえるし。
>>161 の情報があればこの場合に限っては
接続先がlocalhostなので普通に考えたら
ローカルサーバを接続先にしたエミュ。
Vの場合MIDlet-Network: Y が設定されてない場合に、
auの場合MIDlet-X-AllowURL-n: で指定されていないホストの場合に、
SecurityExceptionを吐き、前者は指定済みなので後者の可能性が高い。
auが通信に対応したのがPhase2以降とどこかに書いてあったので、、、
結論:多分phase2以降のezplus Emulatorじゃないかなぁ?
とかかなんとか推理はできるけど、
無駄な過程だし回答が不正確で遅くなるだけと思いますわん
JavaHzで同じような時間帯にそっくりの質問がソース付きで投稿されてる
同じ香具師かどうかはわからんが
>>166 多分正解
>>168 ezplusらしい。ナイス勘
>>168 さんきゅ。そういう推理の仕方、俺も参考にしてみる。
お騒がせしました。 通信の方はなんとかなりました。 大変ご迷惑をかけたことをお詫びします 実行環境はphase2のezplus Emulatorです・・
原因は tool→default envのotherkeywordだけしか設定してなかったためです project→edit envの設定したら動きました。。。
ezplusの設定はまぎらわしいからねぇ。 とりあえずよかったね。
なんか、質問のためのテンプレでも用意しなきゃいけないような話題が続くとイヤだな。
うお、MIDPリファレンスの日本語版を 紹介しているサイトが存在したのか・・・。 ないものだとあきらめてからマジで嬉しい。
>>176 うん、そう。
J2SEとVodafoneの日本語版リファレンスは
持ってたけど、MIDPのは持ってなかったから
ゲットできてよかったあるよ(○´ー`○)
そこの機種別スペック表も重宝するよね。 ありがたいことです。
>>なっち wgetとかでローカルに保存しとけばイイ
んーそうだねぇ。そうしようかな。
902SHがJATE通過したね。 MIDP2.0に乗り換えるかな。
まぁ、モトローラもノキアもVoda向け3G端末出してくる訳だが。
185 :
デフォルトの名無しさん :04/09/02 16:06
質問です ezplusの2.0でアプリを作っているのですが aクラス→bクラス→cクラス ↑ ↑ ここで再生している音楽を調整したい ここで音楽を再生 この場合aクラスからbに移るときはMIDlet本体ごと渡しているのでカレントも完全に移動しています cクラスからaクラスで再生した音を操作したい場合はどうすればいいのでしょうか たとえば再生を停止したり、ボリュームを調節したり
186 :
デフォルトの名無しさん :04/09/02 16:18
やっぱり全てのクラスにMediaPlayerBoxのインスタンスをわたさなきゃダメでしょうか
>>185 >この場合aクラスからbに移るときはMIDlet本体ごと渡しているのでカレントも完全に移動しています
説明がまるで意味不明なんだがMediaPlayerBoxのインスタンス(mとする)を
オブジェクトa,b,cからいじりたいってことか?
だったらa,b,cでmの参照を保持するのが妥当だろう。(多分
>>186 で言ってること)
a,b,c,mを包含するオブジェクトxを用意してそこで制御するって案もある。
ていうか別にこのスレ向きの質問でもないような気が。
>>186 インスタンスを渡せない複雑な家庭の事情でもありまっするか?
操作するためには、なんらかの形でインスタンスを渡す必要は
あるんではないですかね。
コンストラクタが長くなって嫌だというのであれば
○専用のデータ保持クラスを用意して渡したいものはまとめて渡す
○abcがDisplayableで
必ずMIDletのインスタンスを渡しているというような設計なら
MIDletの中でMediaPlayerBoxを宣言・生成してやる。
○専用の初期化メソッドで渡す。
○staticでなんとかかんとかする。
というとこですかねぇ
結局は渡すわけですけど。
ひねってあまり珍妙なことをすると実機でトラブルかも。
189 :
デフォルトの名無しさん :04/09/02 20:40
>175 英語版見てから日本語版見たほうがいいよ。日本語版は情報が欠落しているから。
190 :
デフォルトの名無しさん :04/09/02 20:58
EZアプリ(java)で、赤外線通信はできますか? プログラミングガイドで見つけれなかったけど、バンドルアプリで赤外線リモコンやってるみたいなんで。 できるときは、どこに資料がありますか? 同様に、VodafoneのVアプリで赤外線通信できますか?
Vアプリの方は、すぐ資料がみつかりました。
192 :
デフォルトの名無しさん :04/09/02 23:12
さっきまで動いていたアプリがバージョンアップした途端に起動すると ezplusを続行できません となって起動できません ソースを元に戻して再アップしてみたのですがそれでも動きませんでした
という大変な話があったとさ。 とっぴんぱらりのぷぅ。
>>190 そもそもEZアプリ(Java)が使える機種の中に
赤外線通信機能を持った機種がない。
ワロタ
>>194 スレ違いになりますが、BREWアプリだとできますか?
197 :
デフォルトの名無しさん :04/09/03 13:37
知的障害者がいるスレはここですか
>>199 すでにそっちでも質問してるんですが・・・
>>200 あっちで質問していればここで聞いてもいいってもんじゃないだろ
>>186-188 話それちゃうけど、
オレの場合は、すべてのインスタンスへの参照を記憶する専用のクラス(インスタンス)を作って、
そいつへの参照を全員が知ってる、っていう形で適当に仕上げちゃうことがあるなぁ。
勝手に操作されちゃ困るほどの規模のアプリ組んだことがないからこそなせる技ではあるけど。
>>203 共通して参照するデータをまとめて扱うのって
むしろ定跡なんじゃないかなぁ。
ゲームのプログラムとか読んでると
ポコポコそういう構造体でてくるでそ。
メモリとかサイズ節約できるなんて副作用もありえるし
MIDPでは積極的にやった方がいいのかなってチラっと思いましたワ。
3個以上のクラスを作る余裕のある藻前らがうらやますぃです。
オシゴト ゴクロウサマデス・・・
オナヂク ゴクロウサマドス 某ビューア5クラスドス
本音を言うと仕事で携帯アプリ作れる人がうらやましいです。 MIDletとCanvasだけで我慢するので誰か雇ってください。
なんでプロの人はオブジェクト指向したらいけないの?
>>209 そんな容量の余裕はありません。
あと、クラスを定義しないからオブジェクト指向ではない、というわけでもありません。
なるほど。
ちょっと待って。 仕事でやってる人誰もが容量で苦しんでるわけじゃない。そこら辺勘違いしないで。 iアプリの30KB制限のやつでもクラス3つ4つ定義してたりする。 結局作るものによる。(それを言っちゃぁおしめーか)
容量との戦いは1Mアプリになっても続くのだろうか(;´Д`)ハァハァ
ちょっと想像したんだが、 状態変数やらフラグやらが山盛りあって、 状態をそこら中でチェックしまくりで、 しかも変数名が2文字とか、 そんな世界なんだろうか。。。 keyPressedの中身が5重ifとかで、 「横に長いディスプレイほすぃ」とか・・・ 変数名が10文字から2文字に変わったとしても、 ちっさなpngファイル1つで埋まっちゃう。 ゲームアプリは、しょせん グラフィックデザイナ>>>(越えられない壁)>>>プログラマ とか。
変数名の長さ切りつめは流石に…… そこを削りたければProGuardとかオブファスケータ 噛ませればいいだけだから気にしてないでつ。 メソッドを手動インライン展開するのも可能な限り最後の手。 でも、 >状態変数やらフラグやらが山盛りあって、 >状態をそこら中でチェックしまくりで、 これはそのたうりです、はい。漏れがヘボなだけってこともありえるがOTL > keyPressedの中身が5重ifとかで、 これはキープレス・キーリリースのイベントハンドラでは それこそビットフラグ立て下ろしするだけにして、 必要なときにフラグ見て処理、で何とか片付けてますた。
スレッドの数に制限ってあるの?
>>215 メソッドのインライン展開などは、Eclipseにやらせなさい
グラフィックデザイナっていうか、ドッターも、圧縮のこと考えて点打つ必要あり。
メモリ割り当てに関しては、プログラマの方が発言権が強いし。
ようするにゲームアプリ・ビジネスアプリ関係なく
金出す人・旗振り役 >>>(越えられない壁) >>>>しもじもの手動かす人
>>215 キー入力の話なんだけど
すぺて押下状態チェックで済ませてるの?
つまり、いついかなる状況でもキーを離すと
フラグが倒れて、押していると立っている感じ?
自前リピートチェックというか。
あんまり上手に説明できないけど。
>>218 > いついかなる状況でも
んなわけないだろ。
>218 実は前任者のソース使い回しだからあんまし理解できてないんだけどw Pressのときは「押された」フラグを上げる。そのとき「押し離し」フラグは下げる。 Releaseのとき、「押された」フラグを下げて、「押し離し」フラグを上げる。 で、実際にキーの状態で処理を分けるときは、 ・押したor押しっぱなし -> 「押された」フラグを見る ・押したけど押しっぱなしではない -> 「押し離し」フラグを見る てな感じですた。あと、「離し押し」フラグとかもあったけど使わなかったので忘れた(爆) あ、RepeatはPCのキーと一緒で最初のPressのワンテンポ後に発生するので 「押しっぱなし」の判定には使えないっす。
>>220 ああ〜「押し離し」は離したときに反映されるわけだね。
やっぱりリピートタイミング制御できない以上
みんなだいたい同じような処理してるのかな。
キーイベントとポーリングの折衷式というか。
222 :
デフォルトの名無しさん :04/09/05 23:04
最近Vodafone(P5型)のVアプリ作り始めて、 やっとJPEG画像(データフォルダ内)を 表示するところまで作れました。JAVA自体 触るの初めてなので、ここまで作るのにかなり 時間を使ってしまった・・・。しかしJPEG画像は 表示されたのですが、QVGAサイズの画像を 表示させると、もろに携帯ディスプレイから画像が はみ出してしまいます。 Imageファイルを携帯のディスプレイサイズで表示 する簡単な方法はないでしょうか?
>>222 jadに
MIDlet-Application-Range: 0,0
記述してますかいな?
>>223 はい、記述しています。
というかこれ、エミュレータ側のDisplaySize設定が
240×260の場合なら、画面いっぱいにQVGA画像が
表示されるということですか?
しかしどちらにせよ、「MIDlet-Application-Range: 0,0」
を記述していても、記述していなくても見た目変わらない
ように見えるのですが。
>>224 > MIIDlet-Application-Range: 0,0
の記述は確かに、エミュには関係しないな。実端末で影響する。
いわゆるQVGAサイズとは240*320(W*H)のこと。
画面サイズは240*260なので、はみ出して当然。
Javaから扱える画面はQVGAマックスではないので注意。
>>225 エミュでは「MIIDlet-Application-Range: 0,0」の
記述は関係しないのですか。謎は全て解けました。
Javaから扱える画面はQVGAマックスではないのは
もちろん知っていましたが。
情報ありがとうございました。
227 :
デフォルトの名無しさん :04/09/06 17:58
ezplus からブラウザの起動ってどうやるんですか phase2.1 です
アプリ自体を停止しないでスレッドの停止って出来たっけ? たとえば app1からthread1 thread2を開始させる そしてthread2を停止してthread3を開始。 みたいな。
>>228 オレも、他のスレッドを直接停止させることはできない、ってどっかで見たような気がする。
thread2は常時自分が生きるための権利を表すフラグをチェックしつつで、
app1がthread2を生かすためのフラグを下げて、
てな感じで対処すればいいと思う。
MIDP2.0使えるようで使えねーーーーーーーーーーーーーーーーー
232 :
デフォルトの名無しさん :04/09/07 16:21
まちがいた(2)だね
235 :
デフォルトの名無しさん :04/09/08 11:09
(ノД`)ノ かいけつしましたなっちありがろー
au 5407CAで、テキストフィールドに入っている改行がすべて 空白に変換されて表示しまうのですが、どうすれば良いでしょうか。 同じソースコードでvodafoneの601SHでは改行が反映されて 表示されました。 問題の部分のソースは、 textbox =new TextBox("コピー",stringdata,200,TextField.ANY) Display.getDisplay(aapaste).setCurrent(textbox) stringdataは、改行入りstring型データ(5文字×5行程度) 例) hogehoge aaaaaa bbbbb って入れたはずデータが、「hogehoge aaaaaa bbbbb」と 改行がすべて空白になって表示されます。
>>236 例)のデータってどうやって入力してるの?
Phase3のエミュだとエスケープシーケンスで
普通に改行されて表示されるけどん。
なお、実機依存の話だと
なっち(○´ー`○)には
手のほどこしようがありません。
>>237 テキストファイルから読み込ませてます。
kjx作成ツールと一緒についてきたエミュレータ上では、
問題なく改行が表示されています。
もしかしたら実機依存の問題かもしれません。
>>238 確かに改行できない実機はいくつかありますよ。
A5403CAでも改行できなかったから、その後継(?)の5407も同様かも。
ちなみに5403では文字入力画面に入る際に、
使用できない文字があるのでスペースに置き換えます
とかいうダイアログがでて置換されます。
自分の場合、頻度の少ない記号(~とか)を改行文字の代わりに使ってます。
byteデータの段階で改行コードに当たる数値を代替記号のコードに入れ替えて
その後でStringに変換して使ってます。
実際の改行を含んだデータにしたい場合は逆の操作で。
結局入力画面では改行されないので解決と言えるかはわかりませんが・・。
\nエスケープも効かず? まぁ効いても同じことかな。
auのテキストフィールドの改行は機種依存だってJavaDocに書いてあるよ。
>>239-241 返事遅くなりました。ありがとうございます。
やはりカシオ機の機種依存ですか。レスを読んだ後、気になったので、
実機を貸して貰って、テストしましたが、上に書かれているように
「使用できない文字があるので、、」となりました。
>>241 そうだったんですかorz
代替記号を使ってなんとかしてみるかなあ。
TextBoxとかラベルとかをGUIベースで配置できる フリーの開発環境ってありますか? 前はJBuilderでしこしこ手書きしてたんですが。 ちなみにKDDIPです
そんくらい手書きしろ。
>>243 配置も何も、上から順に並んでくだけなのに必要ないだろ。
URLエンコードってどうにかしてVodaとAU 同じアプリで動かす方法ってないですか?
>>246 誰かしら作ってそうだけど、自前で実装ですかな。
ちょっと、お聞きします。 m3DPrgV_201.pdfにある First3D.java siba.mbac siba.mtra siba.bmp siba_sphere.bmp ...はどこかでダウンロードできますか?
自己レスです。 SDKに.javaファイル以外はありました! .javaファイルはpdf見ながら打ち込みます。
>249 ……おーい。PDFって大概コピペできるの知らないのかー? まぁ久々にタイピングの練習をしようってんなら止めないけどさ……
そういや、VodaのPDFはセキュリティでコピー不可に設定されてるな。 不便だろ。
m3DPrgV_201.pdfはテキスト出力できるpdfだったので、 どうにか助かりました。
>>247 自前で実装・・・
自分でそのソースを書くってことですか?
それともどこかからひっこ抜いてくるってことですか?
>>253 J2SEのソースのぞいてみて。java/net/URLEncoder.java
>>254 レスサンクス
これでさらにimportに書かれてるやつもコピーすればいいのですか?
よく分からなくてスミマセン。。
>>255 コピーはライセンス上いかん。
と一応いっておく。
まあ、誰が書いても大差ないコードができるけどw
VS.netでMobileWebApplicationとか作ると てがっきーから解放されてあまりの楽さにうつつを抜かしてました。 最悪コピペするかな…?
259 :
デフォルトの名無しさん :04/09/12 20:31:55
Vodafone(P5型)のアプリでリストを作成し、 そのリスト表示する処理を作ろうとしています。 MIDPでListというクラスがあったので、使ってみた のですが、リストの表示画面が白黒でショボイので 使い物になりません。 みなさんはリストの表示処理を、どんな方法で行って いますか?自分でリストの文字列やカーソルを作成し、 描画をしているのでしょうか?
>>259 >使い物になりません。
と思ったら、自分で作れば良いだけのこと。
>>255 >これでさらにimportに書かれてるやつもコピーすればいいのですか?
てなことをやっていると
とんでもないサイズのライブラリが出来かねないので
あくまで参考にして自分で書き起こすのがよいのでは。
>>259 > 自分でリストの文字列やカーソルを作成し、
> 描画をしているのでしょうか?
やってますが何か?
>>262 やはりみんな自分でリストを作成していましたか。
僕も自分でリストを作成してみます。
質問です。 ネット上のBMP画像を取り込んで、 それをテクスチャに使うことは可能でしょうか?
すくなくとも、自分でレンダリングエンジンを作れば可能だな。
現在、待ち受けアプリを製作しているのですが、 C4型にて奇妙な現象が起こりました。 あるアプリダウンロードサイト(A)ではダウンロードできるのですが、 別のサイト(B)では落とすことができません。 最終的にはBのサイトにアップする必要があるので、困っています。 状況として、、、 ・ほぼ同等の機能を持つP4、P5版のアプリはA・B両方のサイトから問題なく落とせる。 ・C4版のJAR、JAD、レコードストアの合計サイズは50000バイト以下。(容量の問題ではなさそうです) ・ある端末ではダウンロード選択後、何も出てこない。 ・別のある端末では、ダウンロード選択後に"JARが見つかりません"みたいなメッセージが出る。 (もちろん、JARファイルもJADと一緒にアップしました) いったい何が原因なのでしょうか?
>>266 MIDlet-OCLが書いてないとおかしくなるような仕様変更があったとかいう話が過去ログにあったような気がする。
とりあえずこれ書いて再度テストしてみて。
MIDlet-OCL: JOCL-1.0.0
ちなみに、あるアプリダウンロードサイト(A|B))とか書かれても、
どうせ一般向けのは2つしかないんだし・・・
アプリゲットなら 審査通知メール見る方がはやいね。 多分はじかれてるよ。
レスありがとうございます。 >267 それは書いてあります。 確認しました。 >268 アプリゲットはダウンロードできるほう(A)です。 週刊ゲーム&アプリLiveにアップしたものがうまくいきません。 追記ですが、他のC4アプリは問題なくアップ&ダウンロードできます。
今EZアプリをつくろうと試みてはいるもの どうにもアクションなどのMAPの書き方がわからないのですが どなたか教えてもらえないでしょうか? int[][] map={ {0,0,0}, //省略 {1,2,3}} コンストラクタで画像の取得 画像の表示の仕方が不明… public void paint(Graphics g){ int no; for(int j=0;j<3;j++){ for(int i=0;i<3;i++){ no = map[j][i]; g.drawImage(img[no], 64*i,64*j,?); } } こんな感じでやっていたのですが
>270 基本的な枠組みはそれで合ってると思うんだが 何が問題なんだ?
すみませんorz コンストラクタ内の画像取得のところでミスをしていました try{ for(int i=0;i<=8;i++){ img[i]=Image.createImage("/"i.PNG"); } }catch(Exception e){} としていてi.PNGしか読み込んでなかったです お騒がせしました
273 :
デフォルトの名無しさん :04/09/16 21:52:53
ちょっと質問させてください。 レコードストアのsetRecordって、対象のレコード全体を書き換えるものなんですか? 1レコード内でデータを分割して、必要な部分だけ保存しようと思ってるんですが、 レコード用のバッファを別に用意しなきゃだめですか?
JSR172ってもう実装出回ってたのか...
>>273 そういうことになるね。
俺がやってるやり方だと
byte[] rs_bufferで長さはレコードの長さだけ
んでこのrs_bufferにSystem.arraycopy()を使えば部分的なデータの書き込みは簡単にできる。
あとはrs_bufferを第2引数に指定してsetRecord。
他にいいやり方知ってる人いたら教えてくださいな。
276 :
273 :04/09/16 23:41:32
>275 勉強になりました。 ありがとうございます。 System.arraycopy()の使い方勉強しなくちゃ…
現在Vodafoneの待ち受けアプリを作成しているのですが テスト中にどうも対応の仕方が不明な不具合が出てしまいました 【現象】 自作待ち受けアプリを待ちうけ設定にして携帯を閉じた状態にしておいて アラーム、メール着信時に携帯を開くとアプリがうまく動作しない 着信を止めるとアプリがエラー終了する 着信が終わるのを待つとアプリが起動し正常動作する ちなみに開いた状態で着信を受けたとき、閉じ状態でも電話着信のときは 正常動作します 同じような現象を確認したかたいらっしゃいましたら 回避方法を教えてください
Vアプリの256kはマスカプver3だというのを、んぱかで見たのですが、 Vアプリってプリミティブ(点・線・三角とか)使えます? 開発ツールのJavadoc、サブクラスとかには入ってなかったのですが、 com.jblend.graphics.j3dにEZのm3dのを入れてコンパイルできたら 実は実機では動くとかってありますか? 今プリミティブだけでちょっとした3D作れないかと考えてるんですが・・。 モデリングツールとか手が届かないですし・・。
>>277 P4型、P5型、P6型、W型のどれ?
実機で確認していると思うんだけど、
どのメーカーのでも発生するの?
>>279 実機はSH53を使用しています
他の機種ではまだ確認していないです
身近に別の機種を持ったテストを頼める人間がいないもので...
一応 MIDlet-Resident: Y ↓ MIDlet-Resident: S とすることで回避はできることがわかりました が、私はP4,P5機種をターゲットで考えていたので 上記設定で問題回避することはできません...
何度もすいません 仕方なくユーザーが任意の一時停止動作(閉じるor電源ボタン押下) の場合はアプリを終了するようにしました 終了状態の場合開ける動作による復帰よりも早く ネイティブの着信処理が走るため一応形としてはエラー終了がなくなりました
イベント発生タイミングで、ぬるぽができてるだけじゃないのかなぁ。 「エラー終了」って、要するに例外が発生して、それを捕まえてないってことでしょ? なんか「エラー終了」って言葉使うあたりで例外ハンドリングの甘さが漂うんだけど。
一時停止時の処理からの復帰に変なのを書いてるだけのような気がするんだけど、どうかな。 大まかには > アプリがエラー終了する から、例外スルーで間違いないでしょ。 たとえば、アドレス帳登録されてないとこからの着信時は名前がnullになるとか。
285 :
デフォルトの名無しさん :04/09/18 21:31:08
シューティングの背景のスクロールはどのようにしたらいいのでしょう? 画面を少しずつずらしていくものなのでしょか
それをスクロールと呼ぶのではないのかね
>>285 サーバ側のContentLength設定次第なので普通に起こりえることだよ。
byte[] data;
int len = (int)c.getLength();
if (len == -1) data = new byte[256];
else data = new byte[len];
とでもすればいいかと。それでin.read()をループ。
>>286 RPGのマップのようなマス目単位の背景をスクロールさせるなら
>>288 のURL先へ。
1枚の長ーい背景をスクロールさせる場合は、その背景を適当な長さで分割しておき、
読み込み→ずらして表示→画像の端まで来たら続きを読み込み→…と繰り返していく。
>>283 例外処理をおろそかにしていたのでちゃんとやってみます
>>284 具体的には一時停止状態にする場合Threadを停止していないせいだと思います
とりあえず閉じ状態からの着信があった場合のイベント処理順番は
依然として不明のままです...
できました! 多謝 多謝!
MIDPって正規表現使えないのか… orz
>>288 ,289様
なんとかできそうです。
ありがとうございました。
当方java初心者です。 質問があります。 LISTのカスタマイズ(継承)の話が上であったと思うのですが、 javadocをみながら継承している流れを追ったりしてみましたが、 イマイチどう、カーソルやリストを作成すればいいのかイメージが わきません。 LISTを継承して拡張するような方向で考えているのですが、 背景を変えたりすること自体がCanvasクラスでの方法しか思いつかず 四苦八苦しています・・・ ヒントをいただけたら幸いです
>>294 Listなど、MIDPのUIクラスの描画は実装によって行われる。
つまり、実装依存であり、その描画内容などをプログラムから取得したり変更したりするすべはない。
というか、リストなんて一から自分で書いても大して難しくもないと思いますが。
ああ、UIコンポーネントはみな実装依存か、、、 分かりました。一から作成するほうで考えて見ます。 どうもありがとうございました
298 :
デフォルトの名無しさん :04/09/20 22:03:45
short型の数字をbyte[]に変換したいのですが、どうすればいいでしょうか? byte[]に変換したいのはRecordStoreに保存したいからです。
>>298 ビット幅気にしないのなら無理矢理キャストすればいい。
気にするなら、たとえばオレのやってるの
(int valueをtmpに入れる場合)
byte[] tmp = new byte[4];
tmp[0] = (byte)value; value>>=8;
tmp[1] = (byte)value; value>>=8;
tmp[2] = (byte)value; value>>=8;
tmp[3] = (byte)value;
>>300 さん
ありがとうございます。
これって符号もオッケイなんでしょうか?
一応±32000くらいまでを扱うつもりなので。
shortなので、
tmp[0] = (byte)value; value>>=8;
tmp[1] = (byte)value;
でやってみます。
ありがとうございました。
#とはいえちょっとしばらくは手がつけられなかったり…
こっちは一般公開されなさそうな気がする。
304 :
デフォルトの名無しさん :04/09/22 22:52:44
shortで間に合う範囲を intでやるのとlongでやるのだとやっぱり実行速度も short > int > long になるんですか?
それは実機で計ってみないとなんとも。 32ビットWindowsなら理屈ではintが有利なはずだ(エミュでも多分そうだろう)が
vodaのMIDP2.0+VSCLは一般公開できないの?
何度もすいません。
int value=123123; //数字は適当
temp[0] = (byte)value;
value = value
>>8 ;
temp[1] = (byte)value;
value = value
>>8 ;
temp[2] = (byte)value;
value = value
>>8 ;
temp[3] = (byte)value;
int a_value = ((int)temp[3]<<24) & ((int)temp[2]<<16) & ((int)temp[1]<<8) & ((int)temp[0]);
としてもa_valueと元のvalueが一致しないのはどこが悪いんでしょうか…
> int a_value = ((int)temp[3]<<24) & ((int)temp[2]<<16) & ((int)temp[1]<<8) & ((int)temp[0]); これが悪いんじゃないの? (temp[0] & 0xFF) とかやんないと駄目でしょ byteの0xFF(10進で-1) をintにしたら0xFFFFFFFFだよね?
>>307 オレはこんな風に元に戻してる。
value = 0xFF&tmp[3] ; value<<=8 ;
value |= 0xFF&tmp[2] ; value<<=8 ;
value |= 0xFF&tmp[1] ; value<<=8 ;
value |= 0xFF&tmp[0] ;
もうちょっとマシな書き方がある気もするけど、
ビット操作好きじゃないからまぁちゃんと動けばいいかなと思ってる。
みなさんなんどもありがとうございます。 おかげさまで以下のようにし、無事動作しました。 public long bin2long(byte[] b){ long j=0; j |= (long)((b[0] & 0xFF)) << 56; j |= (long)((b[1] & 0xFF)) << 48; j |= (long)((b[2] & 0xFF)) << 40; j |= (long)((b[3] & 0xFF)) << 32; j |= (long)((b[4] & 0xFF)) << 24; j |= (long)((b[5] & 0xFF)) << 16; j |= (long)((b[6] & 0xFF)) << 8; j |= (long)((b[7] & 0xFF)); return j;} public byte[] long2bin(long l){ byte[] b = new byte[8]; b[0] = (byte)(l >> 56); b[1] = (byte)(l >> 48); b[2] = (byte)(l >> 40); b[3] = (byte)(l >> 32); b[4] = (byte)(l >> 24); b[5] = (byte)(l >> 16); b[6] = (byte)(l >> 8); b[7] = (byte)(l); return b;} public int bin2int(byte[] b){ int j=0; j |= (b[0] & 0xFF) << 24; j |= (b[1] & 0xFF) << 16; j |= (b[2] & 0xFF) << 8; j |= (b[3] & 0xFF); return j;} public byte[] int2bin(int i){ byte[] b = new byte[4]; b[0] = (byte)(i >> 24); b[1] = (byte)(i >> 16); b[2] = (byte)(i >> 8); b[3] = (byte)(i); return b;}
えーと、どこ探しても見つからなかったんで質問します 今StorageConnectionで外部メモリのテキストファイルを読み込もうとしてるのですが何度やってもエラーが出てコンパイルできません。 自分じゃあ分かりそうに無いし書籍探してもHttpConnectionのソースしか書いてないしでどうしようもなくなったんで どなたかStorageConnection使ってテキストファイルを読み込む簡単なソース貼ってくれないでしょうか あと、ついでなんで画像もHttp使うのしか分からないんで外部から読み込む簡単なソースお願いします。 なんか頼みばっかなんですがスンマセン宜しくおねがいします
13のソースを適当にぶっこんでみたけど動かんかった。 で、今のソースが下の import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import java.io.*; import javax.microedition.io.*; public class CCanvas extends Canvas { private String info="null"; public interface StorageConnection{} CCanvas() { }
13のソース適当にぶっこんでみたが動かんかった もしかしてJ2ME Wireless Toolkit 1.0.4_01じゃ無理とか? 始める時にこのバージョンでやれって言われたのだが・・・
315ミスっぽ
318 :
デフォルトの名無しさん :04/09/25 10:47:06
byte[] → Stringって String hoge = new String(byte[]) って方法でいいんですか? なんか方変換したいだけなのにnewするのに違和感があって。 Byte.toString(byte[0])+Byte.toString(byte[1])… とかのほうがいいんですか?
>>316 >>13 以降に続くレスも読んだ?そこでは結論出てるようだけど。
>>318 示した2つの方法で得られるものは違う。結果としては何が欲しいの?
byte[]に文字コードが入っててそれが示す文字列にしたいなら上の方法で。
byte[]1つ1つの要素が表す数値を数字としてつなげたいなら下の方法で。
それから
>>318 は基本的な理解が不足してる模様。
byteやintはプリミティブ型、対してStringはクラス。クラスを生成するには
Canvasなどと同様でnewするものだろう?
文字列を+でつないでいくのも内部的にStringBufferが生成されてaddが
行われているだけ。詳しくはCLDCのAPIリファレンスでStringのとこ読んで。
補足。 Byte.toString(byte[0]) …こんな書き方のものはない。
>>319 すまん漏れの頭悪すぎて分からん
一応、P5型のアプリ作成する時のソフトウェア環境どなたか書いてもらえます?
ヴァージョンも。
Vアプリ作って見ようかと思ってその辺で拾ってきたソースをコンパイルしようとしてみたら パッケージ com.j_phone.io は存在しません。 って出るんだけどこれどうすりゃいい?
323 :
13 :04/09/25 23:18:13
322だす -bootclasspathでstubclasses.zipを指定してみたのだが エラー: *.java を読み込めません。 エラー 1 個 って出る・・・・何故だ・・・。
>324 コマンドラインそのまま晒してみれ。
bootclasspathのとこだけでいい? C:\j2sdk1.4.2_05\bin>javac -bootclasspath c:\v-appli_sdk_121\lib\stubclasses.zip -g:none *.java エラー: *.java を読み込めません。 エラー 1 個
……うゆ? コンパイルするソースもC:\j2sdk1.4.2_05\binに置いてるん? それともカキコ用に適当なパス書いただけ? まさかとは思うけどカレントディレクトリ間違ってない?
むむ パスってjavac.exeが置いてあるとこじゃないの? set path=c:\j2sdk1.4.2_05\bin\;C:\wtk104\bin; てしたから始めはjavac.exeの場所じゃないと思ったんだが、c:\j2sdk1.4.2_05以外だとjavacが見つかりませんてエラーでたし・・・ えーと、パスはコンパイルするソースが置いてあるところなわけだな。 もう一回set pathからやり直して見る
set pathし直したらjavac動いた。 が、試しにmyMIDletってのをコンパイルしてみたんだが myCanvas.classとmyMIDlet.classってのが出来て、outputてフォルダの中に同名でサイズが違うのが出来た んで、jar cmf MANIFEST.MF myMIDlet.jar -C output . て実行したらMANIFEST.MFが見つからんとか これって手書きで作成? あと、コマンドラインでコンパイルするのとJ2ME Wireless Toolkitのビルドとどう違うん?
む。漏れは普段はant使ってる人なのでWireless Toolkitがどうなってるか忘れた(汗) ただ、環境変数PATHにjavac.exeの位置が入ってなくても 絶対パスで動かすんで無問題だったかな > Toolkit 後はコマンドラインだと手作業、Toolkitは一括でjarまで作る、くらいかな、違いは。 (手作業っつっても、バッチ作るなりそれこそant入れるなりすればさして手間はかからん) MANIFEST.MFは手書き……だと思う。一回書いたらそうそう書き換えることもないっしょ。
331 :
13 :04/09/26 00:51:49
質問ばっかりでごめん Wireless Toolkitだとcom.j-phone.ioは存在しませんってエラーになってビルド出来ない コマンドラインでやればエラー出ずコンパイルできたけどjad手書きしてエミュで実行してみたら MicroEdition-Configurationの項目が存在しません ってエラー出てロード出来ん jadの中身↓ MIDlet-1: FileSystem, FileSystem.png, MIDlet-Name: FileSystem MIDlet-Vendor: sun MIDlet-Version: 1.0 MIDlet-Application-Range: 0,0 MIDlet-Network: Y MicroEdition-Profile: MIDP-1.0 MicroEdition-Configuration: CLDC-1.0 MIDlet-Jar-URL: FileSystem.jar MIDlet-Jar-Size: 1843 antっての使ったほうがコンパイルとかなの?
うちではantもコマンドラインも使わずにWTK104でボーダのビルドやってるが。 WTKのlibディレクトリのmidpapi.zipには当然ボーダ固有のAPIは含まれてないので com.j-phone.*を使うようなアプリではコンパイルでエラー。 WTK使ってる限りは-bootclasspathの指定とかできないからstubclasses.zipを midpapi.zipにリネームして置換してる。 au/docomoでコンパイルする場合は元のmidpapi.zipを使ってる。
両方のファイル開いてみると、midpapiに含まれてるファイルが全てstubclassesに含まれてない感じ。
だから、多分
stubclasses.zipにmidpapi.zipの内容が全部含まれてないからリネームだけじゃ駄目かと思う。
多分だから間違ってたら指摘よろ
・・・と、漏れはstubclasses.zipの内容をどうやってmidpapi.zipに統合しようか悩んでるわけだが。
>>13 & 他の人
stubclassesの統合でWirelessToolkit使ってjad/mfの生成できそうです
親切に教えてくれて多謝多謝!
WTK使ってコンパイル出きるようにがんばる
>>335 確かにmidpapiが全てstubclassesに含まれているわけではないが
midpapiのうちボーダの開発には不要なAPI(サポートしていない機能)が省かれている
だけのようなので、自分では単純にリネームしたものを使っている。
何ら保障するわけではないが、これで不都合は起きていない。
ちなみに2つを統合するならこれでOK
1.midpapi.zipとstubclasses.zipを解凍する
2.midpapi側を全てstubclasses側に上書きコピーする
3.stubclasses側を無圧縮zipで固めて、midpapi.zipにリネームする
はじめ自分はこれでやってたんだが、統合したもの(自分で作ったもの)を使うってのが
逆になんか気持ち悪くて今の方法(リネームして置換)に変えた次第。
337 :
デフォルトの名無しさん :04/09/26 11:49:53
Canvasで何かを描く時、 getWidth()をよく使うんですが、 これって起動してすぐにint width = getWidth() とかしてその後は毎回getWidth()する代わりに、widthを使った方が 早かったりしますか?
>>334 統合したらWTKで今までcom.j-phone.io見つかりませんってエラー出てたの出なくなりビルドできました。
これでJSCL使ってもいけそうです
んで、JSCL使ったテストアプリを色々と試してみてるのだけど313と同じくStorageConnectionがうまく動きません。
サンプルソースがどこ探しても無いしHttpConnection使ったサンプルソースのHttpの部分をStorageに書き換えて試して見たが、ビルドエラー無いけどエミュで実行してみても読み込み出来ず。
ちょいとソース上げたので、見てやってもいいぞって人いれば間違い部分指摘して下さい
ttp://namihei.zone.ne.jp/cgi-bin/up/upload.cgi の、21945
ちなみに読み込むテキストはV-appliエミュレータがインストされてるフォルダのbin内IntStorageの中に置いてあります。
あんまりしょっちゅう呼び出す(ソースに記述する箇所が多い)なら変数に代入して 保持してていいんじゃないかな。あくまで見やすさと記述の手間を省くという点で。 その程度で速さは稼げないから。
>>337 速さは稼げないけど、ファイルサイズが小さくなるのと見やすくなるって利点はある
・・・と思う
あ、でもアプリを使う機種が限定されてたりするなら値で入れといてもいいかもね
・・・多分
170x130程度からQVGAまで対応したいので、 変数に代入する方で行きます。 ありがとうございました。
やっぱどうやってもStorageConnectionで読み込めん。 JSCL1.2.xの参考書でいいのとかあります? 手持ちの書籍じゃJSCL1.1までしか対応(書いて)してない(´д`;)
>>344 このサンプル前ダウンロードしたけどエラーで動かなかったから諦めてたんだけど
今動かしたら動いた(´д`;)
ちょっくら分解してきます…。
346 :
デフォルトの名無しさん :04/09/26 17:25:06
質問ですみませんが 前スレ36氏の発言KJXカッター ezplusの実行形式KJXファイルを簡単にJADファイルとJARファイルに戻せる ↓ jarはzipと同じなので、適当なツールで伸張 ↓ Java逆コンパイラ(沢山あるからググれ)にかける と書いてあり逆コンパイラしたファイルのバグを修正してコンパイラすると エラーが必ず出ます。 インターフェイスファイルが無いなどで まぁ一回無視してclassファイル(12個)や画像ファイルをzip圧縮して kjx結合君で無理やりkjxにしたのですが起動できませんでした しかも通信機能がついているのに通信が無効になってしまいました 何か解決方法は無いでしょうか?
Vアプリ作成中で、レコードストアにデータをaddしたりsetして、 それをgetRecordして表示させようとしているのですが、 どうもうまく表示できません。 どの過程をしくじっているのかなかなか把握できないのですが、 Vエミュ(P4型)ではレコードストアの状況とかみれないのでしょうか? あと、setRecordを使うことで、特定のIDに新規書き込みすることは不可能なのでしょうか?
>346 逆コンパイルした*そのままの*ソースはコンパイル通る? 通らなかったらその逆コンパイラが腐ってる可能性があるから別のを探そう。 起動できないetc.はそれを確認・対処してから考えましょう。 通信が無効ってのは……kjx作るとき元のと同じMANIFEST.MF使ってる?
エラーを画面に表示させて、細かくステップごとに見ていくと、 どうやらOPEN時点ですで引っかかっていたみたいです。 で、いろいろ検討して、レコードストア処理をしているサンプル探してきて 実行すると、ちゃんとしているものなら *.rmsというデータができること を発見し、そこから調べていった結果。MANIFESTと.jadの問題だったようです。 MIDlet-data-sizeは登録しておいたと思ったんだけど、、動いてるものから コピペして書き換えたら処理できるようになりました。 setも既出のものしかできないこともわかりましたので・・・ お騒がせしました。
350 :
デフォルトの名無しさん :04/09/26 23:51:49
>>348 逆コンパイラはDJ Java Decompilerで逆コンパイラしたファイルを
そのままコンパイラしようとすると
「シンボルを解釈処理できない」
と出ます。
一度.classを読み取り.javaにしたファイルをそのまま.classに戻す時点で
このエラーが出ます。
また他の.classを読み取り.javaにしてまた.classに戻そうとすると
「このファイル名はpulicです宣言ファイル名.javaで宣言しなければなりません」
と出てしまいます
やはり逆コンパイラが腐っているのでしょうか
MANIFEST.MFは同じものを使っていますMETA-INFというファイルに納めてあります
連レスすみませんsageをずっと忘れてました あとMANメッセンジャーでご指導して頂ける方は指導希望と書いてくれませんか?
354 :
デフォルトの名無しさん :04/09/27 14:09:58
Vアプリで質問します。 J2ME Wirless Toolkit でビルドを行ったのですが、 com.j_phone.* は存在しません。と出てしまいます。 com.j_phone一式がインストールされてないということと思いますが、 その入手先と、設定方法を調べていますが、どうもみつかりません。 教えていただけますと助かります。
355 :
デフォルトの名無しさん :04/09/27 14:11:41
354です。補足します。 J2ME Wirless Toolkitのバージョンは、1.0.4です。 VアプリのP5型の開発をしております。
356 :
デフォルトの名無しさん :04/09/27 14:33:55
JSCLが足りないのかな?
357 :
デフォルトの名無しさん :04/09/27 14:57:21
354です。
ttp://java.cocolog-nifty.com/blog/2004/03/ を読んで、JSCLのインストールを
試してみたところ、次のようなエラーが出てしまいました。
----------------------
ERROR: native methods should not appear
Error preverifying class com.jblend.graphics.j3d.ActionTable
com.sun.kvem.ktools.ExecutionException: Preverifier returned 1
Build failed
----------------------
意味がよく分からないのですが、ネイティブメソッドを使ってはいけない。
と出ているようです。ネイティブメソッドは使用していないのですが、
何故こうなるのでしょうか?
>>346 自分じゃアプリ作れないけど改造だけなら出来そうとか思ってるんだろうな・・。
そもそも逆コンパイル自体グレー的(おそらく他人のアプリだとして)な行為なのに、
コンパイル等の仕組みを良くわからないまま手を出して「腐ってる」は無いだろ。
「シンボルを〜」とか「〜で宣言しなければ」なんて超基本的なことで、
少し自分でソースチェックすれば解決できそうなもんだけどな・・。
たぶんそのアプリの作者がサイズ削減かコード閲覧回避のためオブファスケータ使ってて、
その時ファイル名と異なるクラス名が付いたから、とかじゃないかとか思うけど。
まぁ逆コンしたものであるかは別にして、ソースがコンパイルできるかどうかの問題だから
ソースとBuild設定さえ見れたらアドバイスできるが、他人のなら無理だな。
とりあえずアップできるソースならアップして、他作なら許可もらうか直接聞いたら?
359 :
デフォルトの名無しさん :04/09/27 15:40:19
Vアプリで、 JConnector.class を入手したのはいいのですが、 どこに置けば良いのでしょうか? 分かる方いらっしゃいますか?
>>359 JConnector.classってなんだ?
>>358 確かにおっしゃる通りです。
一応eclipseで逆コンパイラしてソースを見てみると
たくさんエラーが表示されますね
おそらくコード観覧回避目的だと思います。
企業のアプリなんでアップや直接聞くことはできませんが
一からJAVAを勉強し直して自分でコンパイラできるようになり
アプリを制作できるようになりましたらまた挑戦してみます。
>>353 甘えもありますが、板をあまり質問で汚したくなかったので
そのような書込みをしました。
362 :
デフォルトの名無しさん :04/09/27 21:02:05
みなさんに質問させてください。 今、純MIDP2.0 のみ( VやAUのクラスを使用しない )でアプリを作っています。 で、今行き詰まっているのは ランチャーのように『アプリA』 から 『アプリB』や『アプリC』 を呼ぶことは可能か? という事についてです。 別スレッドということではなく、あくまで別アプリを呼ぶという事で。 他のアプリを呼ぶ事自体が非常識なんでしょうか? セキュリティ上ダメかな・・・と、少し諦めてはいるのですが 可能ならば容量制限などを気にせず作れるかな〜と思っています。 『そんなの普通にやってるコトだよ!』とか『できるワケね〜だろ!』といった 内容でもよろしいので、ご意見下さい。
>>362 アプリAに終了命令出して、アプリBとかCに開始命令出せればいけるかも
でもレコードストアのデータとかは引き継げないから結構使いにくいかもね。
>>362 MANIFST.MFにMIDlet-1, MIDlet-2とか書いて、
1つのjarの中に複数のMIDlet詰めることはできたと思う。
そういうアプリの場合、起動時に詰め込んである複数のMIDletから(ユーザが)アプリを選んで起動できる。
レコードストアを共有できるかどうかはシラネ。MIDPのドキュメント読んで。たぶんできると思うけど。
でも、今のケータイ向けのアプリでは一般的には使われてないっぽいけど。
365 :
362 :04/09/27 22:06:42
早速のレスありがとうございます!
>>363 さん
別アプリって認識できるのかな?
でも、やってみますね!
>>364 さん
大変勉強になります。
1つのjarに複数のアプリが入れられるとは思いませんでした。
レコードストアに関しては、早速、印刷して読み込んでみます。
>でも、今のケータイ向けのアプリでは一般的には使われてないっぽいけど。
通信速度もメモリも拡大している最近では、複数に分けてみようってのは
イマイチな考え方なんですかね・・・(泣
やはり別jarパッケージの起動は無理っぽいのかな〜。
やれる事は全部やってみて、引き続きがんがってみます。
みなさん、ありがとうございます。
MIDP2.0ではMIDletスウィートは 廃止されたような気がしたけどどうかな。
MIDP2.0でも MIDlet Suiteはありますよ。 MIDlet Suite内のMIDlet間の連携は無理です。 選択画面を経由した手動の切り替えのみ可能。 ってのが建前。 それからレコードストアは共有できる。はず。
レコードストアは、JARに対応して設けられるので、 MIDlet Suite 中で同じレコードストア名を使用すると、同じデータを参照できます。 アプリケーション間連携がないのは、セキュリティリスクの低減と、 設計モデルの問題ですね。
レコードストア関連であった話しなんだけど、 一つのレコードに複数のデータを設けて、split出区切る方式を 考えて、やってみたんですけども、 メソッド split(char) は型 String で未定義です。 でコンパイルが通らないです。j2sdk1.4.2_02です。 split使えないなんて事はないと思うんだけど、、 ご教授いただけますでしょうか・・ try{ rs = RecordStore.openRecordStore("frends",true); byte[] b=rs.getRecord(1); String rec =new String(b); rs.closeRecordStore(); String nlist[ ]= new String[1]; nlist = rec.split("|"); }catch (RecordStoreException e){ feno =9999; fname = "ERROR;"; }
今は メソッド split(String) は型 String で未定義です になってますね。さっきはパラメータに'|'を送ろうとしてたので、 Charだったみたいです。
>>369 そのエラーメッセージの通り。
Stringクラスにsplit()というメソッドはない。
J2ME Wireless Toolkitを使ってビルド→パッケージやってるんですけど パッケージ化するたびにメモ帳でJAD開いてにMIDlet-Networkを追加するのが面倒です この作業をしないで済む方法ってないですか?
>>372 俺はWireless Toolkit使わずにバッチファイルでパッケージしてる。
>>372 パッケージ化のたびに項目消える方がヘン。
マニフェストファイルの方に書いてないってオチでは。
案外マニフェストファイルに書いておけばパッケージ化の時にjadに自動的に書き込まれたりするってことだったりします? 初心なこと聞いちまったぽい。
質問です 現在、JPG画像を表示させるP5向けのアプリを作っています しかしImage.createImateして、drawImageで表示させても何故か減色されてしまいます。 アプリでは256色までしか扱えないのでしょうか? それともJPGはの表示は特別な方法があるのでしょうか? 教えて下さい よろしくお願いします。
>>377 アプリは何で実行してるの?実機?エミュレータ?
256色の制限なんてあったっけ?
すいません、すこし説明不足でした P5用のVアプリエミュで実行してます。 256色で制限されてるのかはよく分からないのですが、256色に落として保存した画像みたいに年輪みたいになって表示されてしまいます。
DOJAでも、 そんな感じに表示されるけど、実機では問題なし。
380 実機で試してみますね。 ありがとうございました。
実機で試してみると、年輪のような表示にはなりませんでした。 それは解決したのですが、また問題が出たので質問です。 エミュでは展開出来たのですが、実機では40k以上の画像等のファイルはエラーが出て表示が出来ませんでした。 テストには602SHを使っていて、601SHならPNGの展開サイズが最高で512kまでと書いてあったのでいけると思うのですが…。 それと、MIDlet-OCLをJSCL-1.2.2に設定しておくと602SH/601TのP6型以外で起動不可になりますか? 質問ばかりで申し訳ないのですが、よろしくお願いします。
エラーの内容が分からんのでとりあえずその例外を描画してみては? catch(Exception e){ while(DeviceControl.getDeviceState(DeviceControl.KEY_STATE) > 0) //キー入力があるまで無限ループ
ごめん、途中で書き込んじゃった catch(Exception e){ Graphics.setColor(0,0,0); Graphics.fillRect(0,0,240,240); Graphics.setColor(255,255,255); Graphics.drawString(""+e.toString()); while(DeviceControl.getDeviceState(DeviceControl.KEY_STATE) > 0) //キー入力があるまで無限ループ }
drawStringの引数Stringだけになってた(汗 x,y,アンカーを脳内で入れといてください。 それと追記 例外とかの文だと長すぎてはみ出す可能性が高いんで 20文字目ぐらいでString#substring()使って文字列を区切って描画したほうがいい。
エラーの内容表示しないでも、それってサイズ制限に引っかかってるだけじゃないか? 確か40KBより大きいファイルは扱えなかったような気がする。
386追記 40KBより大きい画像とかのファイルをSD経由で読み込んでみ? エラーで表示されない 勘違いだったらスマソ
皆さんありがとうございます。
>>383-385 コード追加してみましたが、getDeviceState(int)をstaticコンテキストから参照することはできません。
と出てビルド出来ません…。
すんません、自力じゃ分かりませんでした…。
>>386-387 SDカードにアプリで読み込もうとしていたファイルを入れて開こうとしたところ、「40Kを超えるファイルのため再生できません」と出ました。
40K以上の着メロも同様のエラーで無理みたいです。
>>389 どんなAPIで40KB超えのファイルを開こうとしてる?
StorageConnection#openInputStream()
でなら、40KB制限なんて引っかからないと思う。
FileUtility
は使ったことないのでシラネ、
FileUtility#play
は、「ネイティブアプリケーションで再生します」とか書いてるから、
ネイティブの制限(SHなら40KB/Tなら64KB)の制限を受けるんじゃないかな。
遅くなりました、すいません。
>>390 ファイルの取得はボーダのサンプルを流用してやってます
まず、byte[] data=read(ImgURL+".png")で呼び出して
(長いので必要そうな所だけ。)
conn = (StorageConnection)Connector.open(url);
InputStream is = null;
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
is = conn.openInputStream();
byte[] buff = new byte[(int)conn.getLength()];
int readed = -1;
while ( (readed = is.read( buff )) != -1 ) {
baos.write( buff, 0, readed );
return buff;
}
}
…catch/finallyなどが続く
最後のreturnでbuffの中身を呼び出し元に戻して、viewImg=Image.createImage(data,0,data.length)で画像にしてます。
多分これでいけてると思うのですが…ここに問題無ければ他の部分かな…。
>391
棒打のサンプル見てみますね。
画像サイズがデカイと無理です、多分。 ヒープの問題。
>>382 参考までに聞きたいが、
このソースで実機で40KBより小さいサイズの画像は問題なく読めてるの?
読めてます。
>>394 ピープは1200kぐらいあるはずだからよほど大きくない限り読めるはずだろ
480x640程度でダメなはず。 エミュ確認のみ。
画面カラーが32bitだと、32bitに展開されるとかじゃない?
32bitビットマップね。
>>398 240x320のPNGファイルで、エミュでは問題無く表示されています。
>>399 画面カラーというのは、携帯実機の?PCの?
Imageの画素の深度は機種依存のハズ。元画像のサイズ・深度はあんま関係ないぽ。 240×320がOKだったとかいわずに、Image作成前と作成後でヒープ残量はかってみ。 long memory = Runtime.getRuntime().freeMemory(); 他キャリアで悪いがPhase3エミュでcreateImage(100,100)で20KB程度、 つまり1画素あたり2B使ってる計算。これでいくとヒープ2MBの機種で100万画素まで、 大体QVGA(320×240≒8万)の10倍程度が限界。もちろん画像のみの話だけど。 そのJPGがそれ(QVGA×10)を超えてないか確認してみそ。深度深けりゃもっと小さいが。
>>402 計算ニガテだけどがんばって計算してみますね…。
ちなみに表示させようとしてるのはPNG形式の画像です
ちょい質問。 byte型のデータをint型に変換するのってどうすりゃいいの? 直接代入しただけじゃあたりまえだが無理だった(´д`;)
念押しときますが、V601TでStorageConnection#openInputStream()で制限引っかかることはなかったです。
少なくとも500KB超えたファイルもいけてる。
やっぱ、Image作るところかbyte確保するとこ(byte[] buff = new byte[(int)conn.getLength()];)で
ヒープ不足で引っかかってる気がするんだが。
いずれにしても、どこでどんな例外が出てるかを確認するのが先決だと思う。
>>404 直接代入できますが。
むむむー 直接代入しようとすると互換性のない型って出てビルド出来ん んで、検出値がbyte[]で期待値がintになってる 解釈違いかなあ
>>406 配列じゃない変数に配列が代入できるわけないだろ
どういうことがやりたいんだ?
フェーズプレイヤーで再生するデータを外部メモリから読んで、再生させたい。 393のソース流用したんだけど、int spfdata = read("file:///mc/spf/sound.spf"); ってすると「互換性のない型」ってエラーが出る。 さてどうしたものか…。
>>408 >>393 のソースを参考にread()ってメソッド作ったんなら戻り値はbyte[]型でしょ。
(byte[] buff = new byte[〜]; で return buff; なんだから)
それをint型で受ければエラーは当たり前。byte[]型の変数で受けなきゃ。
んーむ… こんなソースになったけど駄目っぽい…。 2箇所エラーがあるみたいです すいません、よろしければおかしい所の修正お願いします。。。 player=PhrasePlayer.getPlayer(); byte[] spfdata; spfdata = read("file:///mc/spf/sound.spf"); int spffile = spfdata; //ここで「互換性のない型」エラー data=new Phrase(spffile); //ここで「シンボルを解決できません」エラー track0=player.getTrack(); track0.setPhrase(data); track0.play();
>>410 >int spffile = spfdata;
だから、なんでbyte[]型をint型に代入しようとするのさ。
しかもPhraseのコンストラクタでint型を引数に取るものはない。
無意味な int spffile = spfdata; を書かずにspfdataを引数にすればいい。
読み込みエラー、なんとか解決しました本当にありがとうございます
>>411 遅くなった。
どっかでint型のデータを引数として渡せとか書いてあったのが頭の端っこにあったからかなり勘違いしてたっぽい。
spfdataを直接渡してやればちゃんと再生できました。
ところで、2種類の音を再生して、片方の音だけループするようにしたいのだけど
ループの処理は常に再生されるか確認して停止してたらまた再生させる って処理でいいのかな?
>>412 「なんとか」じゃなく、何が原因だったか知りたいぞ!
ピープオーバーが原因でした。 残量は表示させてたのですが取得する場所が悪かったみたいでちゃんと計れていないのが原因でした。
すごく気になるんだが 「ピープ」って……なに?
ピープ…とも読めるな。 ところで、配列にデータが入ってる場合だけ処理したいんだけどデータが入ってるか調べるのってどうするの? if(str[0] != null) で合ってるのかな?
>417 「配列にデータが入っている」という意味がいまいちよく分からんな。 String[] strについて、そもそもstrがnullなのか、 strの要素が1個以上はあるけどその要素がnullなのか。どっちかいな。 String[] str = null; // この時点では前者 str = new String[3]; // この時点では後者
分かりにくくてごめん 配列にjar内のテキストを読みこませてるんだけど、中身の無いテキストと中身があるテキストで処理を振り分けたい。 かなり分かりにくいな・・・・
>>418 String[] str = new String[100]; とかしただけなら str[0]〜str[99] == null;
そこに byte[] b = 〜 ; str[ 0 ] = new String ( b ); とすると str[ 0 ] != null だわな。
こういう感じならif( str[0] != null ) 〜 とすればいいんじゃない?
str[0]=new String( new byte[0] ) の場合も !=null ( str[0].equals("")==true )になるよ。
自分の場合、配列初期化直後 for(i=0;i<str.length;i++)str[i]="";
でそれぞれの要素も初期化して if(str[i].equals("") ) 〜 とかやっちゃう。
結局、未初期化(=null)かそうでないか、空の文字列(="")かそうでないか、
どっちの判定をやりたいのかを明確にした方が吉。
別に if( str[0]!=null && str[0]!="")〜 でもできなくは無いと思うが。
ようするに初期化してない配列は(=null)で 空の文字列とか入れて初期化すると(="")ってことかな… だとすると空の場合実行するってのは if (str[i].equals("") ) { 処理 } でいいの?
>>421 空文字("")とnullは別物だぞ。
String[] str; // この時点ではstrはnull
str = new String[10]; // この時点でstrは実体あり、str[0]-str[9]はnull
for(int i=9; i>=0; i--){
str[i]=""; // ここでstr[0]-str[9]はnullでなく""(0個の文字からなる文字列)を指す
}
""に特別な意味を持たせるのかnullに特別な意味を持たせるのかは、
アンタのアプリの中身次第。
なる。 ちなみに421に書いたやり方で解決できました。 かなりさんきゅうべりーまっち
ezアプリって
>>2 のツールでしかビルドできんのですか?
>2の公開ツールに入ってるコマンドラインツールは必須だけど それらをバッチファイルなりMakefileなりbuild.xmlから呼び出して使うことは普通に出来る。 実際、公式のビルドツールにも、ビルド手順をバッチファイルへ書き出すコマンドあるし。
>>424 Sun以外にもコンパイラやライブラリ売っているメーカー
あるから、別にSunのじゃなきゃ駄目というわけでもないよ。
質問です 4M程度のテキストファイルを一行ずつ読み込ませるにはどのようにすればいいのでしょうか? 一旦ファイルを読み込んで配列データにしてからなら一行ずつ表示させることは出来るのですが、ファイルから直接一行ずつ読み込むのが出来ません。 そもそもそのようなことが可能なのでしょうか?
>>427 1バイトずつ読んで改行文字のところで自分で区切る。
429 :
427 :04/10/04 00:13:31
すいません、改行文字って \n しか知らないのですが…。 具体的にどのような処理にすればいいのでしょうか? 初歩的なこと聞いてすいません。
>>429 \nならバイト値で10のハズ。
try{
InputStream is=getClass().getResourceAsStream("/data.txt");
ByteArrayOutputStream os=new ByteArrayOutputStream();
String[] str=new String[1000];
int line=0;
int data=data = is.read();
while (data != -1){
os.write(data);
if(data==10){
str[line++]=new String( os.toByteArray() );
os=new ByteArrayOutputStream();
}
data = is.read();
}
is.close();os.close();
}catch(Exception e){}
でいいと思うけど。String配列を可変長にするにはVectorでもつかえば・・。
厳密にはWindowsの改行は\r\nで13,10だけど\rが残ってもたぶん大丈夫。
というか4Mのテキストってドコに存在できるわけ?そういう意味では不可能だと思う。
致命的エラー: クラスパスまたはブートクラスパスでパッケージ java.lang を検出できません。 と出るんですけど、何の設定が間違ってるんでしょうか?
>431 書いて有る通り 「クラスパスまたはブートクラスパス」 の指定が間違っとるのと違う?
テキストビューア作ってるオレがアドバイスすると、
4MBのテキスト全部はヒープに収まらない。内部データ構造にもよるが500KBあたりが限度(V601T/V602SH)
どうしても読みたいなら、メモリに全展開しない方式を考えた方がいい。
もちろんSDカードか本体のデータフォルダから読み込む。
あと、Javaは内部処理がすべてUnicode(たぶんUTF-16)なので、
文字コードとバイト数の違いに注意。
ちなみに、ケータイのプラットフォームはMS932でなくSJISっぽい。
絵文字はどうなるのか知らん。
>>430 ByteArrayOutputStream使ってないので何ともいえんが、
一文字ずつ処理するとたぶん読み込みが激しく遅くなると思う。
自前バッファでの環境だと、8192byteごとに処理するとエミュ・実機とも一番読み込みが早かった。
実装により多少前後すると思うが、1K-10Kくらいをまとめて処理した方が早くなると思う。
あと、読み込み中(ストリーム開いてる途中)にOutOfMemoryErrorがでると、
StorageConnectionが使い物にならなくなってしまうという現象に悩んでる。
ExceptionでなくErrorなのでどうにかなるもんではないという結論でいいんだろうか。。
つーことで、>427 ガンガレ
>>430 ソースまで書いていただいてありがとうです。
ちなみに4MのテキストファイルはSDカードに入れてます。
>>433 500KB程度で限界ですか…ピープ制限って結構厳しいですね。
全展開せずに開くとゆうことは、
例えば開こうとしてるファイルが100バイトだとすると、
50バイトから100バイトの範囲を読み込む、みたいな処理にすればいいのでしょうか?
えと、それで、悪いのですがもう一つ質問です。
外部(SDメモリとか)に保存したJARファイルからリソースが読み込めると聞いたのですが、可能でしょうか?
それなら、JARファイルはZIPと同じ圧縮だと聞いたのでZIPで圧縮して拡張子をJARに変えて使えばPCからファイルを送るときに楽な感じなのですが・・・。
>>434 > 50バイトから100バイトの範囲を読み込む
改行で折り返すんだから、たとえば1画面に収まるバイト数は一定でない。
だから、メモリに展開せず必要になったときに常時読み込むような処理を書くのはめんどい。
> 外部(SDメモリとか)に保存したJARファイルからリソースが読み込める
拡張子とかファイルの中身に制限はないので、(厳密にはjpz/pnzとかSD書き出し時.hufの保護されたファイルは読めない)
ZIPだろうがjarだろうがlzhで独自解凍処理組み込もうが何でもかまわん。
何がやりたくてどう楽なのかは知らんが。
理論的には、外部ファイルを解釈するインタープリタ作れるかもな。NESエミュもその一種に該当するか。
ところで、質問ばっかでアンタがどこまで理解してどこまでできてて何をやりたいのがよくわからんのだが。
最初の質問 >427 は >430 ですべて解決してるし。
StreamTokenizerみたいなのが欲しいだけ?もちろんそんなものはJ2ME/MIDPにはないけど。
あとでよく見ると\nも残っちゃってるな。まぁその辺は適当に・・。
>>433 なるほど。軽いファイルばかりでしかやってなかったので特に遅さは感じなかったけど
確かにある程度まとめたほうがよさそうですね。
僕は4Mでも全部開くつもりでソース書いてしもたけどやっぱ一部のみしか使えないよね。
じゃあ430のように1バイトずつ読んで\n探すより、例えば100KB分のバイト列読んで
その分を一度文字列化してindexOf("\n")、substringとか使って区切ったほうがいいかも。
その場合は行の途中から始まったり今何行目なのか分からなかったりだけど。
小説みたいに読めればいいならそれでもいいと思うが、きっちり行を意識するとすれば
例えば100B読んで途中で切れた行の先頭が95Bなら、つぎは95から100B読むとか。
vアプリってコンパイラはどこですか? えみゅれーたしか見つかりません。
>437 コンパイラ自体はJ2SEのjavacでよろし。 ただし最新のを使っていけるかどうかわからんから ボダの公式サイトをもう一辺よく読んでらっしゃい。
あ、ごめんちょっと勘違いしてた。 436みたいな感じで100KB文のバイト列読んで〜 って感じでいってみます。 ZIPから読もうとしてたのはリソースファイルが結構な数あるのでカードに転送する時、一つのファイルだけ転送すればいいので楽になるかなと思ったからです ちょいと色々試してみますね。
440 :
デフォルトの名無しさん :04/10/07 12:31:21
VappliをDLサーバーにアップロードしたのですが ダウンロードHTMLの記述の仕方がイマイチよくわかりません いいサンプルとかありましたら教えてください
おめでとうございます。440様あなた天然記念物・珍獣保護種に指定されました。 by Vアプリ普及委員会
pashe3.0の拡張データストレージって"storage:"でアクセスできるのはわかったんだけど iアプリのpos=みたいにopen位置を指定できないの?
443 :
デフォルトの名無しさん :04/10/07 18:31:29
Phraseプレイヤーで複数の音源を同時再生できるのは分かったんだけど、和音数少なくて使い物にならないので他ので試そうと思ったんですけど 他の音源での同時再生は不可能でしょうか?
携帯java環境でString配列のソートをおこないたいのですが、 Arraysクラスが使えないようで、他の方法を探っています。 みなさんは手作業でソートを行なっているのでしょうか? つかっているクラス、メソッドがあれば教えてください。
>>440 VアプリはコンテンツアグリゲータのサーバでしかDLできませんので、
とりあえずアプリゲットとかその辺に作者登録して指示通りにやるべし。
そのDLサーバがそうだというなら話は別だけど、どうせ自サバかレンタルでしょ?
>>442 storageというかInputStream作るんだから
InputStream.read(byte[] b, int off, int len)
使ったら?
>>443 Phraseはmmfとpcmを合成して音源鳴らすんで、コレも単音源と言える気がする。
合成が必要な分、負担を減らすための和音数削減だと思うし。
解決にはならないでしょうけど、SmafPlayerとHVは同時に鳴らせたよ。
>>444 getBytes()とかでバイト列作って先頭から比較していく。そうすっと文字コード順に並ぶ。
入れ替えは String tmp=str[i]; str[i]=str[j]; str[j]=tmp; って感じの手作業。
446 :
デフォルトの名無しさん :04/10/07 23:54:35
447 :
デフォルトの名無しさん :04/10/09 01:41:04
RecordStoreを使ってゲームの途中データを保存させようとしていて、 セーブする際にレコードIDを指定してい保存したいのですが もし1〜5までのレコードIDを使ったとして、1に保存されてないのに2に保存することは不可能でしょうか?
>>447 setRecordとaddRecordの違いをふまえよ。
>>447 レコードIDが指定出来るのはsetRecordだけだから既にあるIDしか指定出来ない
だから1に保存されてないのに2に保存は無理
IDが指定したいのなら、
起動時にレコードIDの5が存在するか調べて存在しない場合は空のデータをaddして5まで作成する
でもそうするとデータが存在することにはなってるから読み込んだときに何も保存されてない訳だからエラーになるだろうな
こんな感じに処理すれば指定は出来るけどどうやって処理するのかは知らん。
誰か追記してくれ
まず
>>447 が落ち着いて文章を書け。
どんな仮定で何を聞きたいのか意味不明。
>>450 ユーザーがセーブした順番通りにデータを並べたいのです
言葉だと自分でも何言ってるのか分からないので自分なりに説明してみます
[セーブ1空]
[セーブ2空]←ここにユーザーがセーブする
[セーブ3空]
[セーブ4空]
これで、読み込む際に
[セーブ1空]
[セーブ2入]
[セーブ3空]
[セーブ4空]
このように表示させる為に、RecordIDで順番を整列しようと思ってるのです
分かりにくくてすいません。
>>451 こんな処理手順でどうかな。
・アプリの初回起動時に保存データをnullとしたレコードを4つ生成する(IDの1〜4)。
・ユーザーの要求に従ってID1〜4の任意のレコードに保存する。
(レコードはすでに4つ存在しているのでどれでも指定できる)
・画面に表示する際は、レコードID1〜4を順番に読み出していき、
nullなら空、nullでないならデータありと判断して表示処理する。
>>452 初回起動時かの判断ってどうすればいいでしょうか?
私が思いつく限りでは毎回、
起動時にRecordStoreを開いてtry文でID4を読み込みエラーをキャッチしたら1〜4にnullを書き込む方法ですが
この方法で大丈夫でしょうか
MIDPだけでキーの押されているとき、いないときの 判定をしたいのですがどうすればいいのですか?
>454 KeyPress用フラグとKeyRelease用フラグを用意して、 それぞれのイベントで立てたり倒したりする。 で、判定時にはそのフラグを見て処理。 が定石だと思うのですが如何か。
if(getNumRecords()==0)で String moziretu = null; byte[] savdata = moziretu.getBytes(); と、してfor文かなにか使ってsavdataをaddRecordで4回書き込めばいいのかな・・・
ごめん、追記です String moziretu = null; ではなく、 String[] moziretu = null; と言う配列データです。
>>447 レコードストアの有無を気にせずとりあえず読み込みモードでオープンする。
RecordStore rs = RecordStore.openRecordStore(〜, false);
rsがnullなら初回、nullでないなら2回目以降、と判断できる。
初回起動だと判断したらレコードストアを新規作成する。
以下は考え方なので、実際にはtry-catchとかやってくれ。
//レコードストアを新規作成モードでオープン
RecordStore rs = RecordStore.openRecordStore(〜, true);
//内容がnullのレコードを4つ作成する
for (int i = 0; i < 4; i++)
rs.addRecord(null, 0, 0);
//クローズ
rs.closeRecordStore();
この時点で空のレコード(保存内容がnullのレコード)が4つできてる。
>>452 や上記の考えではレコードの内容がnullかどうかで"空"か"入"かの区別と
しているが、nullの代わりに「"空"を示すデータ」をrs.addRecord()のところで
保存しても構わない。やりやすいように変えてくれ。
>>447 ちょっと解決策というわけじゃないんだが、アイデアがあるなら一度やってみてはどう?
456や457を見る感じ、ある程度分かってるみたいだし、書けなくは無いと思うけど・・。
レスが来る前に結果出せると思うし、駄目だったらその時細かく聞けばいいと思うが・・。
個人的な考えかも知れんが「null」を使うのはあまりよくないと思う。
417〜423でも書いてたけど文字列なら「""」の方がいい気がする。
キッチリ if( str[ i ] == null ){ 無い時 } else { 有る時 } と毎回やればいいけど
ウッカリすると「ぬるぽ」が発生しかねない希ガス。
たとえば457を例にして
mojiretu[ 0 ] = null; → byte[] data = mojiretu[ 0 ].getBytes(); で「ぬるぽ」。
byte[] data = null; → addRecord( data , 0 ,data.length ); でも「ぬるぽ」。
となると
if( mojiretu[ i ] == null )rs.addRecord( null , 0 ,0 );
else { byte[] data=mojiretu[i].getBytes(); rs.addRecord(data.0,data.length);
みたいにする必要がある。
「""」なら読み書きは変える必要が無く、空入の区別が必要なときだけ
if( mojiretu[ i ].equals( "" ) ){ 無い時 }else{ 有る時 } でいい。
460 :
447 :04/10/09 23:58:40
すいません、自分なりにソース書いてみました コンパイラとVアプリエミュで試してみるとちゃんと動きましたが、実際に保存出来ているのか謎なので 念の為意見お願いできますでしょうか? catch{}はtry{}が実行出来なかった場合に実行するとゆう意味だと私は思っているので問題はないと思うのですが…。 try { RecordStore rs = null; RecordStore.openRecordStore("test",false); if (rs == null) { rs.closeRecordStore(); RecordStore.openRecordStore("test",true); for (int r=0;r<6;r++) { rs.addRecord(null,0,0); } rs.closeRecordStore(); } else { rs.closeRecordStore(); } } catch (Exception e) {} testと言うレコードストアにIDを6まで作っています。
447へのQ&Aとは直接関係ないカキコになるけど、一応フォローというか…
>>458 の最後に書いたけど、
>>459 が示したようにnullを用いずに
空文("")をもって「データなし」とするやり方も、もちろん普通にありだ。
ただ、
>「null」を使うのはあまりよくないと思う。
からではない。これはアプリによる。
保存するデータがユーザー入力の文字列だったりする場合、もし空文("")
で初期化していると、そこが未使用のレコードなのか、ユーザーが何も
入力しなかった文章を保存したレコードなのか、区別が付かない。
そういうアプリではnullで初期化するとよい。
ここでもnullの代わりに適当な文字列をもって”空”の印にすることもできるが
ユーザーがその文字列を絶対に入力してこないという保障はないので、
その可能性を心配するくらいなら、やはりnullで初期化するのが妥当だろう。
>>447 はどんなデータを保存するか質問内容からは分からなかったので
>>458 の最後はあのような書き方をした。
また、「レコードのデータの初期値としてnullを使う」と自分で分かってて
決めていれば、自然とヌルポを意識したコードを書くから過度に警戒する
必要はない。というか慣れの問題。
>RecordStore rs = null; >RecordStore.openRecordStore("test",false); オープンした戻り値をrsで受けなきゃ。 >if (rs == null) { >rs.closeRecordStore(); rsがnullなのにrs.〜();とメソッド書いたら、これがヌルポだ! ここでchatch(〜){〜}へ直行するハメに。
直してみました。 初めに int selectdata = 1;//これにユーザーが選んだ番号が入る String[] data;//これに書き込む(読み込んだ)配列データが入る を宣言してるものとします // *初回に空レコードを作成する try { RecordStore rs = null; rs = RecordStore.openRecordStore("test", false); if (rs == null) { rs.closeRecordStore(); rs = RecordStore.openRecordStore("test", true); for (int r=0;r<6;r++) { rs.addRecord(null, 0, 0); } rs.closeRecordStore(); } else { rs.closeRecordStore(); } } catch (RecordStoreException e) {} // *セーブ data[0] = "1個目のデータ"; data[1] = "2個目のデータ"; data[2] = "3個目のデータ"; try { RecordStore rs = RecordStore.openRecordStore("test", false);//初回で既に作成されているのでfalse byte[] b = data.getBytes();//dataをバイトに変換(合ってる?) rs.setRecord(selectdata, b, 0, b.length); rs.closeRecordStore(); } catch (RecordStoreException e) {}
463続き // *ロード try { RecordStore rs = RecordStore.openRecordStore("test", false); byte[] b = rs.getRecord(selectdata); data = new String(b);//バイトを配列に変換(変換方法分からず) rs.closeRecordStore(); } catch (RecordStoreException e) {} こんな感じで書いてみたのですがコンパイラが byte[] b = data.getBytes();の部分でシンボルを解決出来ません data = new String(b);で互換性のない型。 と言ってきます。 解決出来ませんのエラーは何故か分かりませんgetByte();ってのがあったはずですし…。 互換性のない型はどうやって配列に直すのかが分からないからです。 多分このエラー以外は間違い無しだと思うのですが…
>>464 >byte[] b = data.getBytes();の部分でシンボルを解決出来ません
配列の要素を個別に扱わないと。
String[] data; としてるんだから byte[] b = data[0].getBytes(); などとなる。
ところで、ズラーッとソース貼るのもなんなので、テキスト形式のファイルで
どっかのアップローダに上げた方がいいかもしれんよ。
String rsName = "test"; boolean existed = false; //レコードストアの存在確認 try { RecordStore rs = RecordStore.openRecordStore(rsName, false); if (rs != null){ existed = true; rs.closeRecordStore(); } } catch (Exception e){ existed = false; } //レコードストアが存在しない場合→新規作成 if (!existed){ try { RecordStore rs = RecordStore.openRecordStore(rsName, true); for (int r = 0; r < 6; r++) rs.addRecord(null, 0, 0); rs.closeRecordStore(); } catch (Exception e){}
>>450 次から長いの貼るときはアップロード使いますね。
ふむふむ、配列の要素個別に扱わないといけないんですね。
とゆうことは配列に3つの要素があるのでIDは今の3倍必要になりそうですね…。
レコードストアの初期化はこっちのほうが短くて綺麗ですね
if(!existed)ってのは初めてみたのですが「trueでなければ」てことですかね?
ソース書き直してみます
既出だったら申し訳ないが、Vアプリの開発情報色々増えてる。
P6エミュも出てる。
http://developers.vodafone.jp/dp/ 2004/10/08 更新情報
Vアプリ開発ツール
・V-appli Emulator(P6型)Ver1.0
・V-appli Emulatorサンプルアプリ(P6型)
・ユーザーズガイド(P6型)
・Eclipse連携マニュアル
を追加しました。
2004/10/01 更新情報
Vアプリ技術資料
・概要編 Ver.1.0.5
・開発編 Ver.1.0.3
・メディア編 Ver.1.0.2
・シリアル制御編 Ver.1.0.2
・Tips編 Ver.1.0.12
・Vアプリ端末情報 Ver.1.0.11
を更新しました。
・新機能導入の手引き2004
〜P6型端末編〜 Ver.1.0.5
・APIリファレンスJavadoc版(P6型)
を追加しました。
一瞬MIDP2.0かと思ったら256k ver2でしたか。
470 :
447 :04/10/11 01:14:01
ソース書き換えてみたのですがコンパイラではエラー出ず、エミュで実行するとエラーは出ませんが表示させたい部分が表示されません。 ソースはこんな感じです // *ロード try { RecordStore rs = RecordStore.openRecordStore(rsName, false); for (r = 0; r < 5; r++) { byte[] b = rs.getRecord(r+1); if (b == null) { rsDate1[r] = "ぬるぽ"; } else { rsDate1[r] = new String(b); } } rs.closeRecordStore(); } catch (Exception e) {} for文使って1〜5のIDに入っているデータを読み出して、ifでbがnullの場合は"ぬるぽ"を代入してるのですが drawString(rsDate[0],〜)で表示させても何も表示されません。
配列b自身はnullにならない。ややこしい話は省略するが if (b == null) を if (b.length == 0) として。
>>450 いや、それで今の問題は直ったが。
でもまた次の問題が出てるわけだがな…。
自分で修正してみて手負えなかったら書き込みま
>>468 サンクス。
ITMediaあたりでニュースになってなかったから気づかんかった。
まぁ先がないJSCLですが。
>>470 その部分におかしな所はないと思う。表示できないなら表示部分を疑ってみて。
例えばrsData[0]がnullとか""の時がありうるのか、その時はdrawするのか、
単に背景色と同色で描画とか、画面外にdrawとか、後に上書きしてないか、とか。
コンストラクタの段階で適当な文字列 rsData[0] = "てきとー"; とかで表示を確認して
レコード読み取り後どう変わったのかを確認するといいと思う。
あと、エミュで実行するなら、tryでエラーが出てないかの確認のため
}catch(Exception e){ System.out.println( e.toString() ); }
とかした方がいい。特にレコード関連はコード以外にもエラー原因があるし。
>>476 e.toString()でエラー書き出したらrsDate1[0]に何も入ってないのが原因だった。
byte[] bなんで、if(b==null)じゃelseになってしまい、bに何も入ってないのにrsDate1[0]に代入して表示させてるからぬるぽ
ところで、open〜close内でgetRecord();を何度かに分けて使ってるんだけど、
2回目のgetRecord()でデータがちゃんと読み込めてないみたいなのですが
open〜closeを3回に分けて書くと正しく動きました。
もしかしてopen〜close内でgetRecord()は一回までって制限ある?
>>447 だ〜か〜ら〜、e.toString()したらエラーの原因が分かるでしょや。
メッセージの意味が分からんならそれを調べるか聞くかしなっせ。
ソースが470+471のままなら(違うなら言ってね)、r=1の時何が起こってるか、
いっそ一行ごとにprintln使ってどの行まで行けてるか、ifでどちらに飛んでるか、
めんどうでも細かく調べてみることをオススメ。理解への近道。
やはりnullかどうかが面倒になってきそうだからもう一度459を奨めてみるテスト。
なんなら保存したいデータの変数が分かればsaveとroadメソッド書くよ。
あと細かいけど
・getRecord() なんてメソッドは無い。
・rsDate1て、日(date)は関係無いだろ。
・所々敬語を混ぜるくらいならいっそ全部普通語のほうがいいと思う。
>>478 e.toString()でエラー書き出したらnullPointerExceptionになってたってことを書いたのですが・・・。
原因は空(null)のrsDate1[0]をdrawStringさせようとしたからです
これはif(b.length==0){}で空の場合は適当に文字列代入させることで解決出来ました
getRecord()はレコードストアの指定IDからバイトデータで読み込むやつ
確か、byte[] getRecord(int recordID)
rsDate1[0]はString rsDate1[]って配列データの要素で
date=日じゃなくてデータ=dataを間違ってdateにしてた。
>>44 nullをdraw、int id、data、そんなことは分かってた。
今回の問題は
>getRecord()でデータがちゃんと読み込めてないみたいなの
でしょ?じゃあソコでe.toString()使おうとか思わなかったの?
使ってたけど何もメッセージが無いなら、一つだけ読んで終わるようにしてたんだろ。
ソース変わったなら言って、と書いたが何も無いってことはそのままか。
じゃあ470の最後のcatchでメッセージをださせてみて。
>>480 すまんちょっと勘違い
getRecord()でデータがちゃんと読めてないと思ってたのは、
>>466 のをID10まで作成するようにして使ってたのを途中で20変えたが既にレコードは存在するのでIDが追加されずに読み込もうとしたのがエラーの原因だった。
コンパイラもエラー吐かないしエミュでe.toString()使ってもNullPointerExceptionって出るしでgetRecord()でちゃんと読めてない物だと思ってた
けどそれは妄想でIDが追加されてないのが原因だったと・・・。
C4型、P4型では問題なく開発出来ていたのだが、 P5型のエミュが「fail prepareApplication」と出て動作せずに困っています。 ただ、サンプルの実行は出来るので実行ファイルを作成する段階でなにかミスを していると思うのですが、C4、P4と手順が違うところってあるのでしょうか?
483 :
482 :04/10/14 01:50:11
MIDlet-Jar-URL:でスペルミスしてただけだった。 orz
byteデータを数値に変換して比較したいのですが、直接intにbyteを入れても互換性のない型と出てコンパイルに出来なくて困ってます 調べてみるとintValueで変換出来ると書いてあったので試してみたのですがシンボルを解決出来ませんと出てしまいます。 byteデータをintに変換するにはどうしたらいいのでしょうか?
すいません byteデータではなく、byte[]でした byte[] bytes;ってな感じに書いてますがint number = (int)bytesとしてもコンパイル出来ませんでした。
配列だからな w 超初心者の俺でも分かるぜ (エッヘン w
488 :
デフォルトの名無しさん :04/10/15 12:11:20
質問なんですが、 Vアプリ開発ガイド[Tips編]によれば、SH系でネイティブ連係機能を使う際はkeyReleasedイベントでやれとのことですが、 ソフトキーによるcommandAction処理の場合はどうすればいいんでしょうか。。 TextBoxで気にせず素直にcommandActionでネイティブ呼び出すような処理を書いたら、 次同じソフトキーを押したときのイベントが起こりませんでした。 おそらくCanvasでkeyReleasedでやれと書いてあるのと同じ理由によるんだと思います。 (Pressedイベントでネイティブに遷移するとReleasedイベントが処理されないから、次ボタンを押した際はPressedが起こらずReleasedのみ起こる) 仕方ないので、commandActionでは処理したいことをやるためのthreadを別に立ち上げ、 ユーザがボタンを放してReleasedイベント処理されたかなと思われるくらいの時間threadにwaitかけてそれから処理するように仕組んだんですが、 なんか回りくどいですし、ユーザがボタン押しっぱなしでwait時間切れしたらそもそもこんな処理入れる意味がないですし。。
ゲームを作っているのですがフレーズ再生で困っています。 フレーズ再生を共通のプログラムでC4型、P4型、P5型問わず 動作させたいのですが、C4型のcom.j_phone.amuse.PhrasePlayerに対し com.jblend.media.smaf.phrase.PhrasePlayer とパッケージ名が異なるためコンパイルさえ通りません。 jar中にcom.j_phone.amuse.PhrasePlayerクラスを掘り込んで 機種判別してクラスを使い分ける方法を考えたのですが、 どなたか実際に動かしたかたおられますか?
491 :
デフォルトの名無しさん :04/10/18 17:23:48
Vodafoneを使っているのですが、 携帯電話の側面についているボタンやオーディオリモコンのボタンのキーイベントを取得する方法ってあるんでしょうか? 携帯を閉じたまま、イベントを発生させたいんですが、何かいい方法あれば教えてください!!
492 :
デフォルトの名無しさん :04/10/18 19:02:24
質問です。 EZアプリ(Java)でカメラ制御を行おうとしているのですが、 エラーが出て困っています。誰かご存知の方がいましたら教えて下さい。 以下、サンプルコードです。 PhotoConnection conn = ( PhotoConnection ) Connector.open("photo:"); conn.setMode(PhotoMode.MOBILE_MODE); PhotoContent photo = ( PhotoContent ) conn.capture(false); byte[] data = photo.getData(); conn.close(); kjxへのコンパイルは正常にいくのですが、エミュレータで起動すると 「ALERT: Cannot load class com/kddi/id/CameraConnection」 と出てしまいます。コンパイルは出来るので、プログラムは間違っていない と思うのですが、何が駄目なのでしょうか? よろしくお願い致します。
493 :
デフォルトの名無しさん :04/10/18 22:19:20
>>492 自己レスです。
エミュレータが3.0に対応していないためみたいです。
実機では動きました。
P5のエミュレータ GraphicsUtil.drawRegion()が遅すぎて使い物にならなくて困っています。 どうにもならないのでしょうか?
P6のエミュでデバッグ情報がでなくなってるんだけど… コレは以前のエミュのようにデバッグ情報を出すにはどうすればいいでしょうか。
497 :
デフォルトの名無しさん :04/10/20 23:00:22
テキストボックスを使って数値を入力したいのですが、どこを探してもiアプリのtextBoxしか見つかりませんでした。 前にVアプリでテキストボックスを利用しているアプリを見たような気がするのですが、 Vアプリにはテキストボックスは無いのでしょうか? 参考になるサイトなどご存知の方居ましたら教えてください
>>497 参考になるドキュメント→
>>2 テキストボックスはプログラマ各々が自作するものなのか、用意されているものなのか。
といった携帯アプリを作るJavaの構成が理解できてないってこったな。
JSCLを使って作られていたプログラムをMID-P2.0の機能で 実装し直そうとおもいます。 resフォルダに入れたファイルを読みたいのですが openDataInputStream(ss);あたりでエラーになるのですが どうすればいいのでしょうか? とりあえず画像ファイルはcreateImageで代替えできるのでいいのですが バイナリだとやり方が思いつきません エラー java.lang.ClassNotFoundException: com/sun/midp/io/j2me/resource/Protocol at javax.microedition.io.Connector.openPrim(+99) at javax.microedition.io.Connector.open(+15) at javax.microedition.io.Connector.open(+6 javax.microedition.io.ConnectionNotFoundException: The requested protocol does not exis 環境 j2me_wireless_toolkit-2_1_01-windows.exe JSCLと関係ないとおもうのですがわかりません 解決策をおしえてください よろしくおねがいします。
import java.io.*; import java.util.*; import javax.microedition.io.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.io.*; import javax.microedition.rms.*; try{ //byte buf1[] = new byte [0x3000]; //String s = "resource:///"; //String ss; //int buf_p=0; //for( int i = ReadCount; i < 13; i++ ){ //try { //ss = s+i+".png"; //DataInputStream _in = Connector.openDataInputStream(ss); //buf_p = _in.read(buf1); //_in.close(); // //} catch (IOException x) { //game_mode = -2; //break; //} //image_back[i] = Image.createImage(buf1, 0, buf_p); //ReadCount++; //} String str; for( int i = ReadCount; i < 13; i++ ){ str = i + ".png"; image_back[i] = Image.createImage("/" + str); } }catch(Exception e){ }
>>495 ありがとうございます。
実機では普通に動くのは知っていました。
エミュレータが遅すぎて困ってるんです。
正直デバックが苦痛です。
エミュレータで普通に動かすにはどのくらいのマシンスペックが必要なのでしょうか?
ちなみに私の環境は
P4の2.53GHz、メモリ512MB、OSは2000です。
週間ゲーム&アプリLiveでは0x, 30x, 40xと5x, 60x, 80xに分けられていますが どちらでも動作する50Kbyte未満のJAVAアプリ(jadはMIDlet-OCL: JSCL-1.0.1で定義)も 別々に登録される事になるんですか?
イースってゲームでSDに保存したJARファイルからデータを読み出して使ってるみたいなんですけど、 これは url = "jar://mc/test/test.jar/test.png"; connector.open(url, Connector.READ); とすれば開けるのでしょうか? 開発ガイドには jar://ファイル名+リソース名 としか書いてなかったもので・・・ 知ってる方居ましたら宜しくお願いします
505 :
504 :04/10/22 00:50:52
すいません訂正です url = "jar://mc/test.jar/test/test.png"; でした。 SD内の、test.jarの中のtestフォルダ内のtest.pngを指定しています
>>490 全部で動かそうと思うとC4型用のAPIのみで作る必要がある。C4のAPI使えばP4/P5でも動くと思う。
機種のライブラリを判別して個別処理させるんなら、判別法がTips編の1.12に載ってるね。
>>491 閉じるとVアプリは一時停止する仕様だから閉じたままは無理。
継続型待ち受けアプリならいけるかもしれんが、P6型ではこのタイプのアプリは廃止されたそうな。
開いたままでもかまわんなら、キーコード表示するデバッグ用のアプリを端末に入れて、
押したキーとキーコード対応を自分で解析すれば何とかなるかもしれん。
もし解析した場合はキーコード情報の報告ヨロ
>>500-501 jarの中身のファイルをストリームで開くのはClass.getResourceAsStreamを使うのが一般的じゃね?
Connector.openとかのURL部分に何が指定できるのかオレは詳しくシラネ。
>>502 普通にっていわれても、アプリでどんなけの処理をしたいかによるから一概にはいえんと思うが。
1回の描画で40*40のImageを使って(使い回して)Canvas#paintのGraphicsに400回ほどdrawRegionを呼んで転送するアプリをオレは書いたけど、
エミュで特に動作速度に不満はなかったなぁ。Time取得して描画前・描画後の差分取ったら0.1秒以下だった、おおむね30-40msecほど。
Pen4 2.4CGHz/1GB/Win2kSP4
あと直接関係ないが、>P4 という表記は紛らわしいのでやめた方がいいと思われ。。
それと、エミュでなく実機でのみの話だと思うが、少数のImageだけ使った方が高速処理できるそうな(新機種手引P6型端末編2.3.3より)
>>503 オレはアプリLive使ってないので知らんが、ページ構成見る限りそう取れるよねぇ。
直接アプリLiveサポに聞いてみたらどう?
アプリゲットの方は、全部で動くアプリの登録は1回でOK
>>504-505 該当箇所(概要編4.6)読んだが、自分でWebからダウソ・RecordStoreに保存したjarファイルにアクセスする場合って前置きがあるが。
SDカードにアクセスするためにはStorageConnection使う方法しかないとオレは理解してるんだが。
で、誰か >488 もおながいします。。
>>507 > Pen4 2.4CGHz/1GB/Win2kSP4
+VアプリエミュP5型
あと、文章が横に長くなってしまってスマソ
>>488 は
>TextBoxで気にせず素直にcommandActionでネイティブ呼び出すような処理を書いたら、
> 次同じソフトキーを押したときのイベントが起こりませんでした。
ここが問題点の核心なんだが2行目がイミフメでコメントできない
ソフトキーでのTextBox呼び出し処理自体は書いたことあって普通に動作してる
>>509 Command登録したTextBoxで、ソフトキー押されたときにネイティブ連係する機能
(具体的にはStorageConnection使ってファイルを保存する操作、
保存時に上書き確認メッセージがネイティブ側で表示される)
を用意した場合で、
TextBoxに遷移→ユーザがソフトキー押す→commandActionイベント通知→保存処理を実行
→保存確認メッセージ(ネイティブ)→ユーザがOK→TextBoxに戻る→ユーザがもう一度ソフトキー押す
→イベントが通知されない・commandAction呼ばれない
となります。さらに続けてもう一回ソフトキーを押すと反応します。
ネイティブ連携しない機能をcommandActionで呼ぶ場合は問題ないです。
TextBoxをCanvasに、ソフトキー(Command)イベントをkeyPressedイベントに
置き換えた場合の説明がTips編(SH53/V601SH箇所)に説明されてますが、
この場合はkeyPressedではなくkeyReleasedでやれと書いてあります。
でもcommandActionイベントはボタンを押したタイミングで起こり、
またボタンを放したタイミングはイベント取得できないので、
同様の回避法は使えません。
で考えたのが >488 後半のThread使った回避法で、
要はユーザがボタンを放すタイミングの時にネイティブ機能が動いているといけないということなので、
ユーザがボタンを押してから離すまでの時間くらいwaitでずらしてから機能を呼ぼうということをしてます。
でも何か根本的解決ではないので、別の回避法やってたり同様の現象で悩んだりしている人がいないかどうかが確認したいんです。
>>510 回避策は2つ思い浮かぶ。
1つめ。
keyReleased()で処理すればうまく行くと思うのであればcommandAction()を
keyPressed()とkeyReleased()に分解すればいい。
やりたい処理(ファイルアクセス)をcommandAction()ではなくkeyReleased()に書き、
commandAction()からはkeyPressed()とkeyReleased()を呼び出す。
これで見かけ上はソフトキー押下が数字キー同様のkeyPressed()/keyReleased()
に反応しているかのようになるのでドキュメントの条件を満たしたことになる。
…なーんて、これじゃ回避策になってないね。スマソ
2つめ。これが本命の回答。 commandAction()内で重い処理をしていることがズバリ原因なので、その点を変更する。 システムからのイベント通知を受け取るcommandAction()/keyPressed()/keyReleased() といったメソッド内では、画面描画、通信、ストレージアクセスといった重い処理を してはいけない。 これらのメソッド内ではフラグ操作や、パラメータをとあるメソッドに送り付けるだけの 処理にとどめる。そしてメインの処理ループでそのフラグなり何なりを監視しておき、 反応があればメイン処理の中で、指定の重い処理を行うようにする。 >ネイティブ連携しない機能をcommandActionで呼ぶ場合は問題ないです。 このことはcommandAction()内で重い処理を行わないからこそと言える。
>>506 確かにP4のstubclasses.zipにはcom.j_phone.amuseパッケージが
含まれておりました。
com.j_phone.amuseAPIを使用してみたいと思います。
回答いただきありがとうございました。
StorageConnection使って、 Connector.open("jar://mc/test/test.jar/test.png", Connector.READ); とURLの部分のみ変更を加えてみたのですが NullPointerExceptionが出て動かないみたい URL変更前はfile:スキームで正しくファイルが読めていました。 ちなみに読み出そうとしてるtest.pngは空ソースだけのプロジェクトを作って、RESフォルダにtest.pngを入れた状態でjar化したものです。 どなたかSDのjarからリソースを読み込むのに成功した人居ませんでしょうか
>>514 ちなみに、C4のAPIで使えなくなってるやつとして、
ResourceOperator ResourceOperatorManagerのクラスがV601SHから削られてるんでそこだけ注意。
他はたぶん大丈夫と思う。
>>514 StorageConnectionの説明部分ではfileスキームしか記述がないから、一般にはできないんじゃないかな。
公開ドキュメント見ていってるから、実は非公式にできるんですよとかいう話ならこれ以上は何もわからんけど。
なので、イースの場合は自前でjarを解凍してるんじゃないかと推測。
もしくは、jarという拡張子だけど、実は中身はpngなどのリソースを単純にバイナリレベルでつなげただけのものとか。
>>512-513 どもです。
やはりcommandActionの中ではフラグあげるなり別スレッド立てるだけにしてすぐに処理を返し、
やりたいことは、立ち上げたスレッドなりフラグを参照する別スレッドなりでやれという方針しかないですね。
517 :
デフォルトの名無しさん :04/10/22 23:05:33
Vアプリに関して質問します。
http://www.itmedia.co.jp/mobile/0203/15/n_jjava2_2.html ITmediaのこのページにある待ち受けアプリのサンプルを、
J2ME Wireless Toolkit 2.1 でパッケージを作り、
V-appli Emulator(P5型) Ver.1.0 で実行させると、
"ALERT: unable to load class com/jblend/net/j2me/http/HttpException"
というメッセージが出て実行されません。
何がいけないのでしょうか?
stubclasses.zip は V-appli Emulator と同じものを使ってBuildしています。
よろしくお願いします。
>もしくは、jarという拡張子だけど、実は中身はpngなどのリソースを単純にバイナリレベルでつなげただけのものとか。 これでしょ。拡張子に制限あるからね。
midpで、左のボタン(通話ボタンの上にあるやつ)と右のボタン(電源ボタンの上にあるやつ)の定数コードってどれですか? Canvas.GAME_A〜Canvas.GAME_Dのどれかだと思うんですけど
>>517 そのページのソース確認してないんだけど、インナークラスはちゃんとjarに入れたの?あとpreverifyも
すいません。自己解決しました。 Commandクラスを使って、個別に登録するんですねf^^;
>>520 KToolbar 使ってるので、問題ないです。
>>516 >>518 イースで使われているjarを解凍しようとしてみるとエラーが出て無理でした。
どうやらバイナリレベルで繋げて、自前で解凍してるみたいですね
urlの部分をjar://file://mcとしてみましたがこれも駄目のようです。
開発ガイド9にdeflate圧縮データの復元とゆうものがあったのですが全体を展開するみたいなので使えない…。
そこで、バイナリレベルで繋げて自前で解凍する方法を使ってみようと思うのですが
どのように一つのバイナリにすればいいのやら…
解凍の部分はプログラムにxからyバイトまでが〜.pngとゆうファイルで…と記載されてるのでしょうか
>>523 順に読み込むだけなら、
ファイル数
ファイルサイズ1
ファイル1
ファイルサイズ2
ファイル2
ファイルサイズ3
ファイル3
・・・
でいいんじゃね?
>どのように一つのバイナリにすればいいのやら… 「結合」とかで検索!
てゆーか…… 画像は適宜結合してなるたけファイル数を減らして、 jarのファイルエントリを縮めるのは定石だと思ってたんだが 世間一般ではそういうことしないのか?orz
>>525 VBやら関係無いの多いので時間掛かりそうですが探してみます
>>523 各ファイルを読み込んで、それをObjectOutputではき出して、プログラム内で連結して、ファイルに出力して、jそれをar拡張子にしちゃえば?
そんな単純な話じゃないか・・・
携帯で、ピクセル扱うと遅いよー
531 :
デフォルトの名無しさん :04/10/23 22:33:34
質問です 文字列比較でequalsIgnoreCaseを使いたいのですがコンパイルしたときにエラーが出て困っています。 ソースはこんな感じになってます String[] str= new String[5]; str[0]= "abc"; if(str[0].equalsIgnoreCase("abC")){}
>>531 CLDC+MIDPにString#equalsIgnoreCaseはないけど。
toLowerCase/toUpperCaseはあるからそんなに苦労はしないと思うけど。
>>533 自力でequalsIgnoreCaseクラス作ってしまいました…。
実機だとfillRect()がズレるって聞いたんだがずれてる?
>>536 そんなこと言ってるのは大方drawRect()と比べて幅と高さが1ドットずれるー
とか、リファレンス読み違えて勘違いしてる人なんじゃない?
その脆弱性を突けば、もっと高度なJavaアプリが・・・
>>539 可能かも?
だが、棒打のアプリは公開する時に解析されるから公開は無理
>Nokia DCT4はjblendなのか?? JBlendもSunのリファレンス元に作成されているから同じ脆弱性が発生している。 Nokiaで同じ問題が出ている理由は、元が同じだから。
複数のtxetをres内から配列にして読み込むには、どのように すれば良いのですか? 調べても1つしか読み込む方法が見つからないので、分かる方 ご教授お願いします。
>>542 自前でなんとかするしかないんじゃないかな?
\n区切りでString配列を返す関数とか作って。
> JBlendもSunのリファレンス元に作成されているから同じ脆弱性が発生している。 なるほど。つーかずいぶん詳しいな > Nokiaで同じ問題が出ている理由は、元が同じだから。 って事は、JBlendでは既に知られている脆弱性だったって事か?
545 :
デフォルトの名無しさん :04/10/24 22:49:17
iアプリにあるホワイトアウト処理みたいなのを使いたいんだけど、 JSCLには無いようなので他の方法で同じ処理をしようと思うのですがどのような処理をすればいいのでしょうか…
iアプリの場合、2Dの半透明描画は機種依存 機種によってはホワイトアウトにならないヤカン
>>545 com.j_phone.util.ImageUtil#createMaskedImage使えば、
マスクパターンの細かさを段階的に変えていって疑似半透過できるかも。
まぁP6以降だが。
GraphicsUtil#setPixelでピクセル単位でいじればもっと柔軟に対応できるが、
たぶん >530
P6以降ですか…。 範囲を指定して色を足していくような処理も重いですか? 例えるとx1,y1からx50,y50までの範囲の色にピクセルごとにr,b,g+100足して表示するとか…。 そんな処理がしたいのですが…
>>546 505以降なら、MascotCapsuleを使えば全機種いける。
deflate圧縮データの復元ってのがあるみたいなんですけどこれって圧縮データ全てを展開するってことですか? そもそもdeflate圧縮ってzipの圧縮方法であってますよね? これ使って指定したファイルだけ取り出す方法あれば嬉しいのだけど。
>>542 Vectorクラスに順次放り込んで最後にString配列へcopyInto()して終わり
>範囲を指定して色を足していくような処理も重いですか?
範囲が凄く小さいなら大丈夫
>>549 プリミティブ描画で簡単に出来ますな
加算、減算、平均?の3通りしかないけど、ホワイトアウト程度の単純な処理なら問題なし
>>530 機種によっては、drawImageには対応してるけどfillRectには非対応だったり
使い物になりませんw
Vアプリで質問です。 Randomクラスを使う羽目になって、ふと疑問に思ったんですが java.util.*; ってimportできるんですね。しかもj2seで使えるAPIとはかなり違うみたいですね。 例えば、Math.Random()メソッドは使えないだの、RamdomクラスのnextFloat()メソッドは使えないだの、他いろいろ。 ここら辺についてはどのAPIリファレンスを参照すればいいんですか? JSCLとCLDCには載ってなかったです。
554 :
504 :04/10/25 17:45:15
毎回プログラムにファイルサイズやらを書き換えていくのが面倒なので
>>528 さんが言っているObjectOutput使って複数のファイルを一まとめにしてしまおうと思ったのですが
これは
1.纏めるファイル名をlist()か何かで配列に収める
2.手動で適当にファイル(txtとか)を作成して拡張子をjarしておく(binarry.jar
3.一つ目のファイルをbyte配列に読み込む
4.ObjectOutputでbyte配列を3のファイルに書き出す
てな感じで初めに作った配列分、3〜4を繰り返せばいいと思うのですが
ソースはこんな感じでいいのかな。。。
ObjectOutputてのが意味不明なので指摘お願いします…。
String[] files=new String[ファイル数]//ファイル数
for(i=0; i<files.length; i++){
...
...//目的のファイルを読み込む部分
...
byte[] b;//書き込むデータのbyte配列
conn = (StorageConnection) Connector.open("file://mc/binarry.jar");
os = sc.openOutputStream();
ObjectOutput out = new ObjectOutputStream(new FileOutStream(os));//この辺りから意味不明
out.writeObject(data, b);
out.frush();
out.close();
os.close();
conn.close();
}
>>554 の続きです。連投すみません
読み込む時は
conn = (StorageConnection) Connector.open("file://mc/binarry.jar");
os = sc.openInputStream();
ObjectInputStream in=new ObjectInputStream(new FileInputStream(si));
byte[] b=("filename")in.readObject();//目的のファイルをbinarry.jarから読み込む
in.close();
os.close();
conn.close();
あとはgazou = Image.createImage(b, 0, b.length);で適当に使う。
読み込む時に554で作成したファイル中の目的のファイルを指定出来ると思ってるんだけど妄想?それとも出来ます?
エミュレータでファイルを一まとめにしたの作って、実機でファイルを取り出して使うような使い方がしたいんだけども…不可能かな
>>553 JavaのサブセットはJ2ME。主にCLDC、MIDP1.0のリファレンスを参照のこと。
携帯アプリ向けJavaは浮動小数をサポートしてないとか
例えばStringクラスなどでも使えるメソッドが限られているとか
基本的なところが理解できるはず。
>>556 ありがとうございます!CLDCに載ってました!
私が読んでいたのはMIDPの方でした・・・。
なるほど、浮動小数をサポートしていないということですか
558 :
デフォルトの名無しさん :04/10/25 22:13:09
canvasにしているクラス外からrepaint()を使いたいのだがコンパイラがstaticじゃないと吐く public static int paint(Graphics g)にしたら今度は このstaticメソッドはCanvasからのインスタンス・メソッドを〜 とか出る ようするにcanvasクラス外からrepaint()使うのは無理ってこと?
>558 Canvasのサブクラスにrepaint()呼ぶだけのpublicメソッド定義すればいいじゃん。
そんな手があったか…半日悩んだのが馬鹿みたいだ 俺の中では559、あんた天才
で、Canvasのサブクラスにrepaint()呼ぶだけのpublicメソッド定義は出来たんだけど 別のクラスから呼び出すとエラーでる Canvasのソースは public String repaint2() { repaint(); return null; } 呼び出してるところのは myCanvas.repaint2(); エラーは 型canvasからのメソッドrepaint2()はstaticではありません。 repaint2をstaticにしてみるとCanvas側でエラー。 なんとかしてくれ…。
>561 えーと。 その「別のクラス」に、Canvasのサブクラスを参照するフィールドを作って、 Canvasのサブクラスのインスタンス生成したときにそれをフィールドにセットして 後はそのフィールドのインスタンスのrepaint2()を呼べばいい(はずなんだ)が。 (このときrepaint2()はstaticにしちゃいかんですよ) しかし、Javaの基本をもう一度おさらいした方がいいかも……
フィールド作って〜やればいけた
>>562 サンクス
564 :
デフォルトの名無しさん :04/10/26 21:00:03
昨日canvas外のクラスからrepaint()出来なくて困ってた者です。 いざ使おうとcanvas外のクラスから使ってみるとエラーになってしまいました。 色々と書き換えてみたりしたのですがどうやっても直りません ソースは以下のようになってます /* midlet */ public class msc extends MIDlet { public msc() { cvs canvas = new cvs(this); Display.getDisplay(this).setCurrent(canvas); (new Thread(canvas)).start(); } ...startApp()とかが続く /* cvs */ public class cvs extends Canvas { private MIDlet midlet; cvs() {} cvs(MIDlet midlet) { this.midlet=midlet; } public void run() { shori.exet(); } public void paint(Graphics g) { ... } ...略 /* shori */ public class shori { private static cvs cv; public shori() {} public static String exet() { cv=new cvs(); ... } ...略
>564 えーと……やっぱし、Javaの基本、クラスとは何でメソッドとはどういうもので、とかを もう一辺やり直した方がいいと思う。 例えばメソッドがstaticってのはどういう意味なのか、何故staticなメソッドから そうでないメソッドが呼べないのか、全然分かってないのでは。 とりあえず、 ・cvs#run()でshori.exet()を呼んでるが、それなら単に cvs#run()でrepaint()を呼べば済む話では? ・shori.exet()でcvsの新しいインスタンスを作っているが、 それがmscのコンストラクタで生成したcvsのインスタンスと * 全く関係のない、縁もゆかりもない別物 *だということは分かってる?
/*shori*/んとこのcv=new cvs();無しにしればいけるのでは??
連投ごめ、多分だけどprivate static cvs cv;てしてるとこのprivateも要らないと思う それで一回やってみそ
>>564 オレも、クラスとインスタンスとstaticについて理解し直すとこからやり直した方がいいと思う。
Javaの基本というか、オブジェクト指向の基本だし。
その調子だと、privateとpublicの違いについても怪しいな。
>>565 ごめん
学校で習った程度だから漏れの知識ショボイ
クラスとは何でとかも習ったけど小学生相手にリンゴが一個あって〜とかと同じレベル
>>566-567 言ってる部分を消してみるとエラーでエミュが落ちることは無くなった
けどが描画されない・・・
>>568 装飾子の違いは分かってる…と思う
privateとpublicの違いは確か、同クラス内と制限無しだったような
staticは共有メモリ領域を利用するんだっけ…
auのPhase3.0エミュを使って通信でtxtファイルを取得しようとすると403が帰ってきます。
実機では問題ありません。サーバー側のログを見ると
実機では
con = (HttpConnection)Connector.open("
http://aaa.jp/ "+net);
のうちのnetの部分だけをGETしているのに対し、エミュレータからだと
http://から取得しようとしている 、という違いがあります。
エミュレータがわの設定の問題なのか、サーバーの設定なのか通信関係の知識がないためにわかりません。
一応403の意味はググってしらべました。
それからサーバーは自宅サーバー(win)です。
>>564 MIDletとCanvasとshoriの関係ってどうなってんの?って話。
端末はアプリ実行時にMIDlet生成しようとして、通常MIDlet内でCanvasを生成して
実際の処理はCanvas内で完結するように作ると思う。
第3のインスタンス(shori)をCanvasで生成して、そいつからCanvasに再描画させるなら
cvs(MIDlet midlet) { this.midlet=midlet; }
と同様に、shoriの中に
shori(Canvas canvas) { this.canvas=canvas; }
としたら、このコンストラクタ後
canvas.repaint();
で出来る。もちろんこれだけではないが、MIDlet(msc)とCanvas(cvs)の関係と同様に
Canvas(cvs)と処理役(shori)の関係を作ればいいってこと。
>>571 報告乙。え?質問なの?
さっき買ってきた本見ながら572さんの言ってるのを色々試してみるといけました。 コンパイラでエラー出ないし実行も問題ないんだけど /*cvs*/の所でshori2(shoriとはベツ)のメソッド使用すると 型shori2からのstaticメソッドmethod(String)にはstaticにアクセスして下さい と警告が出る shori2.method(String)からstaticを取ると警告は出なくなるけど、shoriがエラー。 実行出来てるし問題はないと思うんだけどかなり気になるのでたいさくあれば教えて下さい
>574 もう分かったから晒せる範囲でソース*全部*晒せ。 いつの間にか最初は影も形もなかったshori2が出てきてるじゃないか。 この分だと「実は……」でshori3、shori4が出てきそうで付き合い切れん。 (まぁ、携帯相手に6個もクラス作ってる余裕は普通ないはずだが それを言ったら、そもそもクラスは2つまで!!が定石なはずだし)
>>575 ソースは
/*cvs*/に、
shori shori = new shori(this)
shori2 shori2 = new shori2(this)
が増えてて、cvs()[}が消えてる
/*shori*/は
static Canvas canvas;
が増えててコンストラクタがpublic shori(Canvs canvas){shori.canvas=canvas}
に変わってる
/*shori2*/は単純に受け取った文字列を無限ループで表示するメソッドがあるだけ
コンストラクタはshoriがshori2に変わってるだけで同じ
んで、メソッドが一つあるだけ
public static String testt(String str){
try{
...draw関係...
canvas.repaint()
while() ;
}catch(...){}
そんで、cvsからshori2のtestt()を呼ぶと警告がでる
呼んでる場所は/*cvs*/のshori.exet()の次の行
shori2testt(moziretu);
>576 ……対策はただ一つ。 藻前さんがもう一度Javaの入門書をきっちり読んで理解すること。 それが嫌なら、警告が出続ける事実を甘んじて受け入れろ。 ちなみに「なぜか知らないけど付けたor取ったら動くようになった」って理由で メソッドにstatic付けたり取ったりしてるようでは「入門レベルなら理解してる」 とは言えない。
対策:Java言語の入門書(携帯アプリの本じゃないぞ)でしっかり勉強する 近道は無いよ ---------------------------- 次の方ドーゾ
579 :
デフォルトの名無しさん :04/10/28 00:23:25
なんかオートバックスにVodafone用GPSが売ってて、専用Vアプリを使えばカーナビになるって事なんだが。。。GPSとVアプリとの通信方法って公開されてるかどうか、誰かしらない?
>>579 シリアル制御してんじゃないの?
その手の話はほとんど知らんのであくまで憶測だが。
582 :
デフォルトの名無しさん :04/10/29 21:31:30
Vアプリの質問はここでいいのか分からないのですが質問です while(true)でループ中にユーザーがソフトキーを押すと ユーザーからの操作を受け付ける画面を出し、初めの画面に戻ってしまわないように while(true)で操作があるまでループし続けるようにしているのですが、 両方で交互にrepaintが実行されて画面がチカチカと元の画面になったりユーザーから操作を待つ画面になったりします そして少し時間が経つと元の画面に戻ります 戻ってきたところまではいいのですがそのまま固まってしまいどの操作も受け付けなくなってしまいます。 使用エミュレータはP6です Threadを使用したプログラムでソフトキーを押した場合の処理はcommandAction内に書いてます。 どなたか解決策ご存知の方居ましたらご回答宜しくお願いします
書き忘れていました 呼び出し元のwhile文の中にソフトキーが押された時にだけThread.yield()を実行するようにして ソフトキーを押した時に実行されるwhile文をfor文に変えてg.drawString("i="+i,0,0,Graphics.LEFT|Graphics.TOP) としてみたのですがiの数値は増えて表示されるもののどの操作も受け付けませんでした
>両方で交互にrepaintが実行されて 「されて」じゃなくて、そうなるようにプログラムを組んでるんだよ そうならないようにプログラムを書けば解決 あと、Thread.yield()の意味を勘違いしてるヤカン
repaintが交互に実行されないように、 ソフトキーを押した時の画面が出ている状態では元の画面でrepaintされないようにしてソフトキーの画面のみrepaintするようにしてみました がチカチカと元の画面に戻ったりソフトキーを押した時の画面になったりします。 Thread.yield()の使い方間違えていたみたいなので消しました。 すみません
なんか、とてつもないわけわからん構造になってる予感。 Canvasはデフォでダブルバッファリングされてるから、 repaintが非同期に呼ばれるだけではちらつくことはあり得んと思うんだが。 情報が小出しなんであくまで想像だが、 SpriteCanvasによる画面への転送は、 たとえSpriteCanvasがDisplayableに設定されてないときにも行えるから、 SpriteCanvasの描画と「ユーザーからの操作を受け付ける画面」の描画が 交互に行われてちらついているんじゃないかな。
まだ初心者で漏れもよく分からんが、setCurrentで切り替えが一番いいんでないか?
582です 587さんの言っているsetCurrentで ソフトキーを押した時に画面を切り替えることは出来ましたが 呼び出し先で操作を受け付ける画面を描画しても、コンパイラでは問題無しなのですがエミュだとまったく描画されませんでした。 そこで呼び出し先のクラスのextends Formを消してみるとコンパイルエラーになってしまいます。。
>>588 せやから急に「extends Formを」とか出すな。消したら〜とかまるで分かってない証拠。
564にも言ったけどインスタンスの関係をハッキリさせて。
どうせソフトキー押した時とかの処理がキッチリできてないから
「元の画面でrepaintされないように」が裏目に出て再描画されてないんじゃない?
とりあえずボタン押しで確実に処理がされているかどうか分からないなら
一行ずつSystem.out.println挟んでどの行まで実行されてるか確認してみたら?
確実に再描画の行が実行されているはずなのに画面変わらないとかはその後。
素早く確実で楽に解決したいならソース丸ごとあげてくれ。
>>582 564と同一人物かよ!って別にそれはいいんだけど、
これがどうなるといいんだっけ?普通に画面の切り替えは問題なさそうだけど。
むしろやろうとしてる事がわかるならエラー有るままのほうがやりやすかったかも。
対策:Java言語の入門書(携帯アプリの本じゃないぞ)でしっかり勉強する 近道は無いよ ---------------------------- 次の方ドーゾ
同一人物じゃないと思うが…。
>>590 あんま分からんケド一応見てみたが
試しに動かしたらcommand_actionのコンストラクタで呼び出してるmenu ()が実行されてない
cmdMenu押した時のdisplay.setCurrent(command_action);の行をcommand_action.menu();に変えると画面がチカチカした感じになる
590の言ってるのはこれじゃないかと思った
このチカチカするのをなくしたいと。
質問の意味勝手に妄想したケド合ってる?
まあ合ってた所でどうすればいいか俺にはわかんね
>>590 ソース見させてもらったが・・・愕然とした。
こりゃ、アドバイスで何とかなる範囲じゃないと思う。
現在画面に設定されているのはどのDisplayableなのか、
今生きているThreadはどれなのか、
どのThreadがどの処理を行っているのか・行うべきなのか、
このへんを意識しないととんでもないものができあがるぞ。
つーことで、>592 に同意。
Javaの書き方というよりかは、JavaAppletなどのイベント指向を理解した方がいいと思う。
とりあえず動くだけでいいなら・・・とかアドバイスしようと思ったけど、
こんなもんをリリースされちゃかなわん。。
コンストラクタ処理をwhile(true)でブロックしたり(sleep()時に例外出てる模様)、
無駄にcvs(=Canvas)をThreadとして走らせたりしてるし、
Formを画面表示してるのに文字を(Currentな画面でない)cvsに書いてるし。
>>593 同一だと思ったのはCanvasにcvsなんて名前つけてた部分だけど、間違ってたらスマソ。
確かにそうすりゃチカチカするね。
つーか、
冷静にソース見たらmenuでwhileループがマズイ。
メインのスレッドがmenuをずっと続けるのでcommandActionとかをやるスレッドが無い。
new Thread した奴はせっせとrunメソッドでループを続けてるだけ。
つまり2本のスレッドがwhileループに入ったままになる訳だ。
最初に「時間が経つと元に」ってのは、あんまりループ続くからフリーズとかだと。
って書いてる途中に594に先越されてしまったけど、確かに勉強は要る。
勉強したくないならあんまりややこしいことに挑戦しないってのも手かも知れんけど。
ま、理解しろとか言っても普通分からん。
事実漏れは2年間も学校でjava習ったがオブジェクト指向のおの字すら分からんねーし。
未だにコピペコピペで普段使うところ以外ワカンネ
どうせ理解したって質問するような事(ネットにサンプルが流れてない)するんだったら今後使う可能性低いから覚えるだけ無駄
理解しろ言う前に質問受ける側はなんでもいいから適当にソース修正してうpしてやるのが一番かと。
そんだけ言って何もしないのは格好悪いのでうpしておいた
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=131 んであげてから気づいたから訂正
dispchange.javaのコンストラクタにあるthread_B.start()を消して
最後のほうにあるthread_A.yield()をThread.yield()
んでその次の行にthread_B.start()を追加
これで一応動きはするが画面切り替え時に一瞬白くなる
つーかこれであってるかも分からん。
警告orエラー出てないから問題はないと思うが誰か見てくれ
あと画面が白くなるのなんとか出来る人修正きぼん
あ、だめだ これだとcvsから別クラスのメソッド呼んで実行してる時にmenu押しても両方でrepaint呼ばれちゃうよ 勝手に別クラスって妄想入れたけどあってたりするかな 回避方法ワカンネので誰か分かる人よろ 別クラスとか言ってるけど何も知らない人が勝手に妄想した単語並べてるだけなんで適当に解釈してやって下さい
599 :
デフォルトの名無しさん :04/10/31 05:15:07
どなたかphase 3 エミュレータをアップしていただけないでしょうか?
600 :
デフォルトの名無しさん :04/10/31 15:00:50
プログラムからそれが走っている端末のバージョンを Phase3 or Notだけでいいので知るほうほうってないですか?
>>593 さん、
>>572 さん
あげて頂いたソースを参考にこちらのアプリに組み込んでみたところ、思い通りの動作をさせることが出来ました。
画面が切り替わるときに白くなるのはこちらのエミュレータでは起こりませんでした。
返事が遅くなってしまいましたがありがとうございました
ちょっと質問。 ソフトキーが押されると、 今やってる処理を強制終了(?)させて処理させるところを移動させたいのだけど、 どうすればいいかな? 多重ネストからの脱出ってのは見つけたけど、 これだとbreak文とラベルの記載してる場所が違うと動かないぽい気がするので・・・。 実験もせず書いてるので「出来るに決まってるヴォケ」とか「こんな方法がある」とか、 あと「あんたの説明意味不明」とかでもいいので適当に突っ込んでください
ごめん書き忘れ ソフトキー押した時にフラグ立てて、 強制終了(?)させたい所にifでフラグ立ってたらbreakするとかだと場所が多くて、 今どこの処理やってるのか分からないから記載個所が多すぎて対処しきれない。 main(){ while(true){ //ここ for(...){} ... この後もfor文やらwhile文がずらずら。 ... } } commandAction(...){ if(c==softkey){}//←ソフトキーが押された時に上の「ここ」ってとこに処理を移したい } かなり意味不明な書き方になってるけどこっちの文章力が無いから勘弁 とりあえず、「ここ」って所にソフトキーを押した時に移動したいわけ。
答:無理
ん?オレは例外投げて対処させたが。 まぁいわゆるgotoがあるプログラムは構造がダメだという例に当てはまるからイクナイと思う。
処理をどうする以前に、設計がまずいんじゃ
608 :
デフォルトの名無しさん :04/11/02 09:32:37
V601TでTextBoxのMaxSizeに指定できるのは128KBまでという制約ってあるんでしょうか。 厳密には、setMaxSizeで127*1024なら大丈夫、128*1024でアウトとなってます。 コンストラクタやsetMaxSizeでの指定→問題なし 128KB以下のStringをsetStringで入れる→問題なし 入れたTextBoxをDisplayに設定→問題なし 設定されたTextBoxで決定押して編集開始→開くとなぜかまっさら(文字数制限が0文字までになってる) キャンセルするとsetStringで入れた文字に戻ってる、決定すると当然まっさら文字が入力される。 エミュで問題起きてなく実機(V601T)で問題起こってるんで、おそらく機種依存の現象だと思うんですが。 もし何か情報あればお願いします。。 (時間あれば私の側でも実験してみます)
609 :
デフォルトの名無しさん :04/11/02 17:23:24
KDDIのezplusエミュレータで、 画面サイズが最大で147*147までにしかならないのですが、 QVGAサイズを表示させることはできないのでしょうか?
32bitビットマップ形式の保存ファイルは存在しねーぞ。 PCの液晶でも24bitカラーなのに、携帯で32bitなんてあえりえねーだろ。 つーか普通16bitだし。 VRAMの制限でねーの?
うあ、激しく誤爆
>609 Phase3.0対応エミュが必要。 Phase3.0対応アプリを開発する必要があるなら、 どっかからか入手できるはず。健闘を祈る。
614 :
デフォルトの名無しさん :04/11/03 03:18:42
Vアプリを配信するのに、ベクターからやろうと思うんだけど、 ConnectorのAPIの代わりに、ベクターで配っているJConnectorを 使用しないといけないんだけど、何度やってもclassファイルが壊れている って、wiressToolでコンパイルする度言われる。。。。 だれか、経験者いない?
EZアプリでget(Calendar.WEEK_OF_MONTH)を使おうとすると WEEK_OF_MONTHが解決できませんと出ます。 月の何週目かを取得することはできないのでしょうか?
CLDC1.0のCalendarにWEEK_OF_MONTHはない。 複雑な式にもならんから自力で計算すれ。
iアプリの場合、通信できるのはダウンロードしたときのサーバに限定されてるけど、 Vアプリ、ezアプリの場合ってどうなってるの??
>>617 ez -- あらかじめjadに記載したサイトのみ
V ---オフィシャル登録必要、端末内リソース利用と併用しちゃいけない。
>>618 おお、サンクス
オフィシャル登録って有料なんだねorz
(´,_ゝ`)プッこのスレで質問するレベルじゃないわな
質問します。どなたか分かる方、ご教授よろしくお願いします。 Vodafoneの携帯用のアプリを作っているんですが、 「import javax.microedition.lcdui.Canvas;」または 「import javax.microedition.lcdui.*;」を記述しても、 その他いろいろimportしても、 「getGraphics()」メソッドが使えません。コンパイルエラーが出てしまいます。 「paint()」メソッドとかは現時点のプログラムで使えているんですが。。。 「javax.microedition.lcdui.Canvas」の中には、「getGraphics()」メソッドは 存在していないのでしょうか? そもそもgetGraphics()を使おうと思ったのは、paint()メソッド内や、 paint()メソッド内から呼び出すメソッド以外でdrawString()などを使いたかったんですが、 それをする場合、getGraphics()を使う以外に方法はあるのでしょうか?
まず
>>2 を見て最低限リファレンスを読むくらいはしろ。
質問はそれからだ。
リファレンスを見てみたんだが、それでもできなかった。 で、getGraphics()を使わない汚い方法を思いつきました (インスタンス変数として作っていたGraphics型の変数(g2とする)に paint()内で「g2 = g;」とやっておいて、プログラムの頭でrepaint()を呼ぶ)。 他の方法をご存知の方、ご教授くださいませ。 やっぱり、携帯に電話がかかってきたりして画面が壊れた時のために 画面描画はすべてpaint()内とその中から呼ばれるメソッドでやってたほうが いいんでしょうなあ。スプライトも使ってるのでそれとの共存とか、 その時のゲーム内の状態(ウインドウを開いているとか)ごとの処理とか、 はあ〜〜めんどそう。
> リファレンスを見てみたんだが、それでもできなかった。 意味不明 > はあ〜〜めんどそう。 ストレスたまるだけだから止めたほうがいいよ
doubleの値を使ってプログラム組んでみるとコンパイラで Floating point result not allowed com.sun.kvem.ktools.ExcecutionException: Preverifier returned 1 と言ってきてコンパイル出来ない。 浮動小数点の結果がどうとか言ってるっぽい感じなんだけどエラーの意味わかる人居ます?
>>621 Image img_back;
Graphics gra_offs;
/** Canvasクラスを継承したクラスのコンストラクタ等で取得 */
Image img_back = Image.createImage(width, height);
Graphics gra_offs= img_back.getGraphics();
protected void paint(Graphics g) {
gra_offsに対して描画
gra_offsからgにオフスクリーン転送
}
>>627 MIDPでは浮動小数点は使用できない。各携帯メーカーの拡張APIを使うか
それが嫌なら整数を100倍や1000倍にしてアプリで工夫するべし。
ああ、記述ミス。 img_back = Image.createImage(width, height); gra_offs= img_back.getGraphics(); こっちね。
あれ、使えないんですか。 vfはFixedPointで使えるようですけど、+はadd()に置き換えたりしないとだめ?
>626,629,630 サンクスです! 俺の言葉が足りなかったみたいです。 俺の欲しかった Graphics型は、paint(Graphics g)の方で、 g.drawString() とか g.drawLine() とかするやつのほうです。 これら drawString() やdrawLine() を、repaint() を呼んでpaint()内(やそれ以下のメソッド)でやる以外に paint()の外でできないかなあ、と思ったのでした。 「i アプリ」を以前に作ったとき、インスタンス変数(クラス内の各メソッドの外で宣言する、staticナシの変数)に コンストラクタで「g = getGraphics()」とやって、それ以降は、 オーバーライドするpaint()内ではいっさいなにもせず(空ブロック { } のままにしておく)、 いろんなメソッド(スコア表示・キャラ表示・背景表示などのそれぞれの各メソッド)で描画が必要になったら 前述のインスタンス変数にて g.drawString() とか g.drawLine() とかやっていたんです。 昔のBASICプログラムがいつでも画面描画ができていたので、そのノリで。 「電話がかかってきた時などの割り込みで壊れた画面を元に戻す」ということを考えていない設計でした。 その、「i アプリ」作成時に俺が使っていたgetGraphics()は 「i モード java」のCanvas クラスにあるんですが、 他の java には無いのかもしれません(626さんが見せてくれた方も違うみたいです)。 「i モード java」以外のjavaでは、「drawString() や drawLine() をしたいときは paint()内とその中から呼ぶ メソッドでしかやってはいけない」という設計なのかもしれません。それはそれでよい方針なので、 私もそのような設計がなされたものに今作っているやつを作り変えていこうかと思ってます。 私の621の書き込みに「i モード java で以前使っていた CanvasクラスのgetGraphics() 」という記述が 抜けていたため、622,624さんをはじめ、みなさんに手間を取らせてしまいました。 どうもありがとうございました。
連投すいません、 FixedPoint型では<が未定義みたいなんですが、 ifで判断を行う場合はどのようにすればいいでしょうか 整数部のみを取得して比較するのが一般的でしょうか?
>>633 (゚Д゚)ハァ?
Javaには演算子のオーバーロードなんて機能はありませんが?
>>627 >>vfはFixedPointで使えるようですけど
自分で言ってるこの点でFixedPointがボーダフォンの拡張APIだと分かってよ。
もっかいJSCLとMIDPの違いを確認してね。
636 :
デフォルトの名無しさん :04/11/18 03:41:10
>>623 その方法でアプリ作りましたよ。
ドコモからau&vodaの移植で描画周りを作り直す時間がなかったのでそのまま移植するためにそうしました。
auとvoda版も同時移植なのでほぼ3キャリアのソースが同じですみました。
vadaは当然スプライトは使用していません。
描画がシビアでなけれなこの方法はソースの管理がしやすいのでいいと思います。
>636 そうですか。俺は今Vodaにスプライト使ってアプリ作ってるんだけど、 スプライト使わない方法に変えたほうがいいのだろうか。 「まるくん」という人も「スプライトの方が遅い」とか自分のHPで言ってたしなあ。 以下は蛇足です。 スプライト使うと、例えば着信があったとき、「アプリ再開」にすると画面が真っ白に なるんですよ。戻ってきたときに仮想画面(BGを貼り付けたり、g.drawStringで直接書かれる画面) を白クリアしてるんだろう。 このへんは「着信などの割り込みがあったら、仮想画面全体を書きなおす」とかに すればいいのだろうが。 で、スプライトを使わない方法で画面描画をやってたら、割り込み後に画面を戻すのも システムがやってくれるのかなあ、なんて想像してます。
638 :
636 :04/11/18 17:46:39
>>637 着信とかのイベントが発生した場合は、pauseApp()に処理が通るのでこの中で全画面の再描画要求を出します。
システムのダイアログが出た後はcanvasの画面を復帰してくれないので自分で復帰させてやらないといけません。
>638 なるほど。システムは、「”自分が書く部分を退避させておいて、それを最後に戻す”とかせずに、 ”書きっぱなしで終了する”」わけですね。問題のあるシステムだなあ。 サンクスです!さっそく試してみます。
640 :
デフォルトの名無しさん :04/11/20 00:32:55
逆コンパイルされた時にソースが見難く(?)なるツールがあるって聞いて 試してみたいんだけど、このツールがいいよってのがあったら教えて欲しいです
641 :
デフォルトの名無しさん :04/11/20 00:39:35
アプリを一定速度で動作させたいのですが、良い方法が分かりません。 今は以下の方法で速度を一定に見せかけていますが、 paint()にかかる時間が変動するとその分速度が狂うし、 sleepで必ず処理が待機する分、ゲームや描画の処理が損してるような 気がします。 while(true){ try { Thread.sleep( 100 ); } catch( InterruptedException ie ) { } repaint(); //ゲームの処理と描画 } 皆さんはどのように処理しているのでしょうか?
InterruptedExceptionの意味がわかんねから あくまでも参考程度に 単純に、 while(true){ Thread.sleep(100); repaint(); } じゃ駄目なのか? それがだめならタイマー使えば正確に測れる
書いてないのに送信してしまった失礼
>>640 難読化ツールのこと?
漏れも検索してみたけど見つかんなかった
誰かよろ
Javaバイトコードなんて、 せいぜい識別子を1文字にするとかそんなレベルでしかできないと思うんだけど。
>>641 それだと処理にかかる時間が考慮されない予感。
long drawtime = 0;//前に描画した時間
long nowtime = 0; //毎回取得する時間
で
nowtime = System.currentTimeMillis();
if(100 <= nowtime - drawtime){
drawtime=nowtime;
ここに処理
}
とかで良いんじゃないかな。見にくくてスマソ。
serviceRepaintsはなくてもいいのか?
649 :
デフォルトの名無しさん :04/11/22 11:23:56
650 :
デフォルトの名無しさん :04/11/22 16:26:32
Vアプリの開発はじめました。教えてください。 P5型(JSCL-1.2.1)から追加されたGraphicsUtilクラスの drawRegionメソッドをP4型(JSCL-1.1.1)で利用したいと思います。 P4型SDKのstubclasses.zipをP5型のものに上書きし、 コンパイルはできたのですが、P4型エミュレータでは unable to load classes エラーになってしまいます。 上位のSDKで追加されたクラスを利用するにはどうすればよいのでしょうか。
>上位のSDKで追加されたクラスを利用するにはどうすればよいのでしょうか。 上位のSDKで追加されたクラスは使用できるのでしょうか?
>>650 stubclassの名の通り、SDKのクラスには実際のコードが含まれていない。
実際のコードは実行環境側にあるので、不可能。
653 :
デフォルトの名無しさん :04/11/22 21:50:59
>実際のコードは実行環境側にあるので、不可能。 ありがとうございます。とんちんかんな質問でした。申し訳ないです。。。 それでは、P4型で読み込んだ画像(png)を90度回転させたり、上下左右反転 させたりするにはどうすればよいのでしょうか?AppletだとPixelGrabberで ピクセル取得して入れ替えて表示させたりしているのをみつけたのですが。 クラスを自作するとしたら、どのようにすればよいですか?
>>653 Vアプリは作ったことないが、その為にボーダではスプライトがあるんじゃね?
スプライトが嫌なら前方向に回転させたpngを用意するとか。
がんばって行列計算するとか。
90度単位なら行列計算いらんだろ。 だけど、Graphicsクラス上でピクセル単位でいじれるのはP5からなので、 P4でやろうと思うと、 >654 のスプライトか、PNG解析クラスを自作するかくらいしかないんじゃないかな。
潔くPNG解析汁
てか自前でPNG解析クラスなんか作って容量大丈夫なのか?
回転画像用意する分より小さく作るなら意味あるな
オレは、容量よりも手間が気になるが。 んなことぐーたら考えてる間に、90/180/270回転した画像くらい用意できてしまうわな。 >653 どう対処するかは、どんなアプリをどういう形で配布するのが目的かによるんじゃないかな。 特に制約ないなら「P5以上です」と割り切れるし、 ゲーム配布ならスプライトにしてしまった方が楽だし、 とりあえず完成させるのが先ならPNGを4種類回転分だけ用意した方がいいし、 似たようなアプリを今後大量に作らなきゃいけないのならPNG解析クラスを作るのにも意義があるし。
VアプリをEZ向けに移植しようとしているんだけど エミュだと遅すぎて途中で止まったようになってしまう これ実機だとちゃんと動いてくれたりする可能性ある?
バグって止まってるんじゃないの?
663 :
デフォルトの名無しさん :04/11/24 09:37:26
653です。まずスプライトでやってみます。 PNG解析の方は、もう少し勉強してから挑戦してみます。 みなさま、ありがとうございました。
>>661 エミュの速さは
EZphase3対応エミュ>Vアプリエミュ>(壁)>配布中のEZエミュ
ですのでPhase3対応を探すかMIDP1.0のみで作ってVエミュで試すとイイデスヨ。
止まるのは大概メモリ不足関連。デカイのつめば少しはマシかも。
Vエミュ今月verUpしたやつはスピードも上がってるよ
666 :
デフォルトの名無しさん :04/11/25 13:59:54
Unofficial "MID Profile-1.0" API Reference どこでみれるか教えてください。
VjavaP6で質問です。
例えば、画面の切り替えなどで徐々にブラックアウト。
現画像捨てて取得。
徐々にブラックイン(?)という処理で
ブラックアウトとブラックインしたいのですがどうすれば良いのでしょうか?
使えそうなメソッドとかUtilも無さそうです。
元々基幹系をやっていたもので畑違いのDisplayやらThreadに白黒させながらやってます。
どなたか教えていただけないでしょうか?
後
>>179 の日本語APIリファレンスが開けないのですがこちらの在り処もご存知でしたら教えていただけないでしょうか?
補足です。 元々はImageUtil.adjustBrightnessを使用して以下のようにやろうとしてみたのですが //タイトル画像を描画 Image logoImg = Image.createImage("/logo.png"); for(FADEIN_COUNT = -5; FADEIN_COUNT < 1; FADEIN_COUNT++){ GraphicsUtil.drawRegion(g, ImageUtil.adjustBrightness(logoImg,FADEIN_COUNT), 0, 0, logoImg.getWidth(), logoImg.getHeight(), GraphicsUtil.TRANS_NONE, 0, 0, screenWidth, screenHeight, 0, GraphicsUtil.STRETCH_QUALITY_NORMAL); sleep(70); } IllegalArgumentException、Imageオブジェクトが immutableで出来ないと言われました。 もし宜しければmutableなImageオブジェクトとはどんなものかも知りたいです。
>>664 EZphase3対応エミュで動かしたらサクサク動いてます
どうやら(壁)にぶつかってたようで・・・
ただphase2.5機種の性能が(壁)より上であって欲しい
>>665 DrawImageだけだとEZphase3対応エミュはそのVエミュより倍以上はやい
でもVエミュの方が実機に近いし設定いじれて便利
携帯のソフトを作っていたいのですが なにかお薦めの本ありますか?
>>670 有難うございます、ファイルやネットワークからの画像データからcreateImageした場合は
不変となってしまうんですね。
一旦オフスクリーンに書き出すなどしてみます。
USBクレードル部分をJAVAで制御は出来ないの? つなげたい機械があるんですが
MIDP2.0の本とかある? 早くvodafone 3G メガアプリの予習したい。
>>675 これくらいしか本がないってのがつらいんだよなぁ。
1. Javaの文法とか学ぶ
2. JavaAppletなどでイベント指向を理解する
3. MIDPの動作モデルを理解する
てな流れがいいと思うんだが、ここでいう3にあたる親切でいいサイトなり本なりがほとんどないし。
知ってるとこではこれくらい。
http://www.saturn.dti.ne.jp/~npaka/midpbook/index.html >675 の本はオレも持ってるが、これは比較的親切に書かれてる本だと思う。
でもちょっと古い(特に「J‐PHONE KDDI完全対応」が)
>676
オレは聞いたことがない。
洋書ならAmazonで「MIDP 2.0」で5つ引っかかったが。和書はヒットなし。
Javadoc片手に独学でやった方が早い気がする。
902SHとかってMIDP2.0なの?
これから出てくるボダの3G機は、MIDP2.0だよ。たぶん。
質問します。 vodafoneでブラウザアプリが禁止されてるというか、認められてない理由を概略でいいのでご存じの方教えてください。 なんの理由なんでしょうか? グーグルで自分で調べてみたしたが「ブラウザ アプリ 禁止 vodafone」とかの条件でやってみても ブラウザアプリが禁止だという記事が出てくるだけでその理由にふれたものが出てきません
ブラウザアプリって何を指しているの? 定義は?
>>684 >理由は表には出たことはないと思う。
>事前の釘さしだと思うけどね。
返レスありがとうございまた。どうりでグーグルで出てこないはずです。
正々堂々と言えないvodafoneにとってのせこい理由が想像出来ました。
jigブラウザと定額を組み合わせるとキャリアのゲートウェイは大量のデータが通過するのに、利益はjigが持っていくというシステムを
容認することになり、キャリアにとっておもしろくないことは確かですね。
コンテンツビジネスへ収益構造の比重を移したい時に、よそに利益を盗られる、アプリが迂回路になることをふせいでいるのでしょうか
auは認めているといっても、無くなっていく運命のJava機だけで、他の多数のBREW機種では利用不可能ですから・・
×ありがとうございまた。 ○ありがとうございました。
VappliP5です オフグラフィックスに画像や文字などを描画してからまとめて回転したいのですが drawRegionだと画像のみの回転しか行えず困っています 何か方法はありますでしょうか 無茶な方法でもいいので、分かる方返答下さい
>>686 jigブラウザの作者がインタビューで
「vodafondはブラウザアプリが禁止されているから断念した」」
って答えてたからね。
>>688 オフグラとセットでオフイメージ作ってるんじゃないの?とか言ってみるテスト。
Image offImg = new Image( width,height );
Graphics offGra = offImg.getGraphics();
>>690 解決出来ました〜
ありがとうございました
692 :
デフォルトの名無しさん :04/12/01 11:45:20
当方VアプリでCGI連携を目論んでいるのですが、 Access denied というエラーが起こりCGIにアクセスができません、、、 どうすればいいんでつかね?
>>692 こう変えてみろ。
× どうすればいいんでつかね?
○ アドバイスを受けたいんですけど、まずどんな情報を示せばいいですか?
694 :
デフォルトの名無しさん :04/12/01 16:44:18
アドバイスを受けたいんですけど、この情報以外に何が要りますか? 使用言語:V-appli Emulator for JSCL 1.2.1 Ver.1.0.0 エミュレータ:V-appli_Universal_JSCL1_2_1[V-appli Emulator(JSCL1.2.1)ver.1.0 開発ツール:Sun ONE Studio 4 update 1. Mobile Edition
>>692 そのCGIはPCでアクセスできることを確認した?
あと、Port80以外はアクセスできません(vodaの制限)
>>692 MANIFEST.MFないしjadファイルに
MIDlet-Network: Y
が記述されているか確認してみて。
>>695 OKでした。
>>696 >エミュレータはプロキシを使用しない場合は通信したいサーバのIPとポートを
>JTProp.datのProxyとProxyPortに設定しておかないと通信できなかったような
>気がしたけど、試してみましたか?
通信したいサーバのIPは設定に組み込みましたが、
JTProp.datのProxyとProxyPortというのがよくわからないのでお教えください、、。
>>697 足しましたが無理です、、、。
ワイヤレスキットのエミュレータなら動くんですが、
V-appli_Universal_JSCL1_2_1だとはじかれてしまいます、、。
>>698 Apacheのerror_logもあぷしれ
java.lang.SecurityException: access denied だけですが、、
>>700 Apacheからjava.lang〜なんて出るかYO!?
おまいはもっかい
MIDlet-Network: Y
を付けるとこからみなおしてみ。付けてからビルドするんやで。
そんでCGIとか言う前にtxtをGETするとこからやってみ。
702 :
デフォルトの名無しさん :04/12/02 10:59:43
>>700 念のため聞くけどボーダフォンのMACSサーバーにアプリアップした?
コンテンツアグリゲーターのサーバーだと端末の設定によってSecurityExceptionが出るぞ。
コンテンツアグリゲーターによってはネット接続アプリすらアップできないけど。
>>700 Apacheは使ってませんです、、、。
普通のサーバです。
Sun oneで、Midlet属性を付加するやり方が不明です。
jadファイルに無理矢理書き込んで実行とはまた違うんでしょうか?
>>
MACSサーバとは何でしょうか?
ググってもそれらしいものが、HITしないのですが、、
「普通のサーバ」? ワケワカラン
>>704 KCNのホームページスペースなんですけど、、、
新しいスターが誕生した予感(^∀^)わくわく 「Apacheじゃないです。KCNのホームページスペースなんです」Σ(゚Д゚) 「ホームページスペースなんです」「ホームページスペースなんです」「ホームページスペースなんです」 今後の展開から目が離せません
>>708 そうですか、、、アパッチ、、、
ポートは80なので問題ナシですよね?
>>707 読みました、、、が、
jadファイルやマニフェストファイルへのmidlet属性の付加の仕方がわかりません。
マニフェストファイルへ書き加えても、ビルドしたあとのXMLファイルのようなもの(Sunoneで拡張子.adContent)を見る限り、
どうやらmidlet属性がうまく乗っていない状況だと思います。
P5エミュでテストを行ってまして、技術資料を見る限りではCGIまわりの設定は間違っていないと思われます。
よろしくお願いします。
710 :
デフォルトの名無しさん :04/12/02 21:48:28
InputStream in = Connector.openInputStream( "datafolder://"+ファイル名 ); ってやるとSecurityExceptionがでる。 で、jadの設定でなにか設定すれば動くと思うんだけど。 なんて設定すればいいか教えてくれ〜
SunONEを使ってる香具師がいない悪寒 あきらめてjadファイルを手で直せ
712 :
デフォルトの名無しさん :04/12/02 22:04:11
MIDlet-Application-Security: Y これじゃいかんのかい?
>>692 698-701の流れで703はオカシイだろ。知らんなら先言え。
あとApache、CGIの前にtxtで試せ言ったじゃん。どうせJADだと思ったけど。
J2MEのKToolBarならProject>Settings ...のUser Definedで
AddでkeyにNetworkで追加した後ValueにY書けばいいハズ。
オイラはKJX作成ツール使いで、SunOneとかエエもん使った事ねぇや。
>>710 EZかVか?つか、Vなら file://〜 だよな。
EZは勝手アプリでは例外無くアウト、って感じだと思う。
>>709 は、
サーバがMIMEタイプでapplication/Javaを吐かないのが原因とかそんなとこじゃないかな。
とりあえず、localhostにサーバ立てて実験しる。
サーバのたて方すらわからんのなら、HTTPConnectionするアプリはあきらめた方が無難だと思う。
やはりSunONEユーザはあまりいなさそうですね、、、 画面はちらつくわ、、すぐ応答なしになるわ、、、orz 昨夜本屋などをかけずりまわり〜自転車のカゴがへっこんだりもしましたが、、 やっとマニフェストの追加のやり方がわかりました!! JARレシピうんたらでJARファイルを細かく設定できるみたいです。 しかし、、、 アーカイブ時にmidletやらが入ってるjarとのつながりがなくなってしまい、 NoClassDefounderrorです、、、orz とりあえず動かすとこまでがんばってみます!!
MIDPのソースコードってどこにあんのさ?
Phase3エミュを使ってる人にお伺いします。 EZアプリ Phase3のセキュリティA機能(データファイルの読み書き)は、 Phase3エミュで動作確認できますか?
>>716 ベンダーの名前くらい書いたら?
IBMのにはついてきた。Sunのにもあったような気もするが忘れた。
Voda P6型 Eclipseプラグイン公開されたね。 うれしいよ。
MIDlet-Network: Y
ってJAD側の属性なのにビルドで悩むもんなの?
もれも
>>701 の言う通りtxtで試すべきだと思う
って遅いか・・・まあがんがれ
eclispeに浮気しますた。 で、こんなエラーが出ます、、、 お助けを、、、 "起動中" 中に内部エラーが発生しました。 java.lang.NoClassDefFoundError: org/eclipse/ui/externaltools/internal/variable/ExpandVariableContext com.zentek.eclipse.vappliemulatorplugin.LaunchConfigurationDelegate1.launch(LaunchConfigurationDelegate1.java:78) org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:569) org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:720) org.eclipse.debug.internal.ui.DebugUIPlugin$6.run(DebugUIPlugin.java:892) org.eclipse.core.internal.jobs.Worker.run(Worker.java:66)
アドバイスを全く聞いてないところが素敵すぎる 見事な亀感棒ですな
java.lang.NoClassDefFoundError ってことだから調べれば出てくんだと思うわけです ヒロツです
おかげさまです。 ありがとうです。
725 :
デフォルトの名無しさん :04/12/07 15:37:54
ボダ3Gの開発キットって公開さてないの?
727 :
デフォルトの名無しさん :04/12/08 09:35:11
Vアプリを、eclipse3と、P6エミュでデバッグしたいんだが、 リモートデバッグでエミュに接続後、エミュが不定期に落ちる・・・ なんとかならんの?それとも俺だけ?
P6端末では細い文字しか出力できないのですか!? スタイルボールドにしても見た目が変わりませぬ、、、
>>728 実機で見てないけどエミュだと変わらないみたいだ
機種依存しそうな部分だから気をつけたほうが良いかと
設計でおしえてください。 基本的にCanvasで画面展開するアプリを作ろうとしているのですが、 メールアドレスの入力をしてもらう必要があります。 この部分だけ、Formを使わないといけないのでしょうか? Canvasに入力欄を作ることはできないでしょうか? 今はMIDletを制御するだけのクラスと、Canvas拡張クラスで作っています。 画面展開などはCanvas拡張クラスのPaintにパラメータを渡すことで済ませています。
MIDP2.0に対応しているプロファイルってどれ?VアプリだとP6以上?Phase3はMIDP1.0だよね?
>>731 MIDP1だけだと、TextField/TextBox使うしかないね。
もしくは、Canvas上でFepまで作ってしまうか。
>732
3Gから。っっっと思う。
少なくとも一般にはまだ公表されてないハズ。
>>729 サンクス。
でも、とても買えないので、eclipse2にボーダのプラグインを使う事にしました。
735 :
デフォルトの名無しさん :04/12/10 16:15:27
アプリゲットのテストサーバーにアップロードしてるんですが、 "ADFの内容に問題があります。" とはねられてしまいます。 jadはKToolbarで作ったものです。 どこがいけないのでしょうか? MIDlet-1: Resident, Resident.png, Resident MIDlet-Jar-Size: 253426 MIDlet-Jar-URL: Resident.jar MIDlet-Name: Resident MIDlet-Resident: Y MIDlet-Vendor: Me MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-1.0
>>735 Venderが短すぎる・・かな?3か4バイト以上じゃなかったっけ?
アップロード審査通知 というメールに内容が書いてありました。 「JARのファイルサイズが、制限の204800バイトを超えています。」 でした。 stubclasses.zip の中身を削除することってできるんでしょうか?
>>737 stubclassesの中身削ってもアプリサイズは減らないよ。
・・まさかjarに同梱しちゃってるの?
jarにstubclasses.zipを同封しようとしているやつがいるのか。 世の中ひれーな、おらワクワクしてきただ。
>>732 VFXとか言う聞き慣れないプロファイルらしい。
P6とかと根本的に違う物なヨカーン。
>>738 , 739
KToolbar の作る
C:\WTK21\apps\Project\lib\
にstubclasses.zipを置いてビルドすると、
できたjarの中に入ってます...。
stubclasses.zipで検索しましたが、扱いについての説明は見つかりませんでした。
ばかな質問かもしれませんが、どうしたらよいのでしょうか?
よろしくお願いします。
オレはKToolbar使ってない。 outputというフォルダ内にpreverifyしたファイルがあるとして、 MANIFEST.MFを同封する場合のコマンド jar cfm appName.jar MANIFEST.MF -C output . stubclasses.zipは、中に宣言だけの各クラスファイル(JSCLライブラリ)が入ってる。 ケータイやエミュは、そこで宣言されたクラスをVM内部に持っている。 だけどJ2ME標準のライブラリではないため、 コンパイルを通すためにstubclasses.zipをclasspathに追加するという使い方をする。
>>739 確かにKToolBarには追加する機能なかった気がする。
基本は742の方法(参考書とかも確かこう)なんだけど
オイラはkjx作成ツールを使ってる。詳細は綿100号さんのサイトで。
最近ではEclipse2.1.3とか使うのもオススメ。
KToolbar でできると簡単なんですけどね...。 KToolbar で作ったjarの中から、com、java、javaxフォルダを削除して、 新しいサイズをjadに書き込む... というやり方ではまずいでしょうか? 一応エミュレーターでは動作しました。
そこでantですよ。 build.xmlは一回書けば大抵のプロジェクトで使い回せるし (jarの名前なんかは*.propertiesに書いて外に出しておけばOK)マジお勧め。
ボーダでstubclasses.zip関係であれこれ試してるやつは前スレを一読することを勧める。 参考になるやり方がいろいろ出てる。
>>744 とりあえず動けばマズイ事はないと思うけど、やっぱ面倒でしょ?
エラー見つかってソース書き換えるごとにそれって・・。
いかに楽するか、がプログラミングなので、面倒なのはツール任せ。
・・とか言ってantの用途をEclipseプラグインのガイド見て知ったオイラはヘボグラマ。
749 :
デフォルトの名無しさん :04/12/13 18:25:38
>>748 make使ってないけど、オレはbatでやっている。
で、商用だと同じアプリでも様々なバージョンを出力する必要があるので最近はスクリプトでmakeのようなことをやっている。
Javaなのにプリプロセッサは必須なんだけど、Eclipseとかで開発するとその辺ってどうなんだろう?
>>749 Eclipse? インクリメンタルコンパイルの前にプリプロセッサに
かけることも出来るし、いかようにも。
>>750 へー、そうなのか
漏れはmakeで全部やってるが、規模が大きくなってきたんでそろそろエクリプスに移行したい‥
最後はeclipse + make, eclipse + antなんだと思っていたけどそうでもないのかな? googleで検索してみて。俺はeclipse + makeね。 make, antのスレもこの板にあるよ。
自分もbat。NTで拡張されたforとか使ってる。ppはbccとppinc。
>>750 プリプロセッサ使ってみたいからポインタ教えて。enumが使えるなら明日にでも乗り換える。
コマンドラインでant使ってる漏れは異端だったのかorz ちなみにまずclにかけてプリプロセスした後一旦jarにまとめ、(ProGuardに掛けるには一度jarに まとめないとめんどいのだ)それをProGuardにかけて削り混んだ後 再度リソースと一緒にjarにまとめて謹製ツールでkjxに仕立てるところまでフルオート。 ふる、ふる、ふる、むーーーん……いや、何でもないんだうわなにわqwdfんhl
わたしのしもべー
>>733 >3Gから。っっっと思う。少なくとも一般にはまだ公表されてないハズ
>>740 >VFXとか言う聞き慣れないプロファイルらしい。
>P6とかと根本的に違う物なヨカーン。
というとはiMonaのような一般投稿アプリでは、MIDP2.0対応にしばらく時間がかかりそうだということですか?
じつは携帯板の一部では簡単に対応出来るような電波飛ばしてる人がいるので
確かめたいのでお聞きしました。公式ではなく一般投稿アプリに関してです。
Vodafoneから公式のEclipseプラグイン出たね。
>>757 あ、なんとなくわかった。ありがとうございます。
今仕事が立て込んでるので手が空いたらチャレンジしてみたいと思います。
761 :
デフォルトの名無しさん :04/12/15 18:18:50
Imageオブジェクトをスクラッチパッドに書き込むためにbyte配列にしたいのですが どうやってbyteにすればいいんですか
762 :
デフォルトの名無しさん :04/12/15 18:24:53
あ、スレ的にはレコードストアって言ったほうがいいですね。。。
>>761 んー。それは難しいな。MIDP1.0の範疇では無理だね。
VodafoneのP5,P6アプリならGraphicUtil#getPixelを使って1ドットずつ読み込むしかない。
ただし激重いよ。
auはちょっと分からない。
764 :
デフォルトの名無しさん :04/12/15 19:10:25
そうなんですか。。。 適切なご解答ありがとうございます。
>>761 auにもPhase3でExtensionGraphics#getPixelがあるけどV同様激重。
しかも約2Byte/pixだからQVGAで150KB。デカ過ぎるし保存にも時間かかるよ。
情報は落ちるが一度jpgにエンコードして保存した方がいいかも(QVGAで約10KB)。
au,Vともカメラ操作できる端末ならミュータブルなImageをjpgバイト列にエンコ可能なはず。
http://pcweb.mycom.co.jp/news/2004/12/16/006.html オープンソースのJava開発環境「NetBeans IDE 4.0」正式版が公開
NetBeans 4.0では、モバイル機器用開発キットのJava 2 Platform Micro Edition(J2ME)と、
8月に公開の第1ベータ版では非対応だったJava 2 Enterprise Edition(J2EE)にも対応。
モバイル機器からWebアプリケーションまで、広範なプラットフォームが開発対象とされている。
前バージョンの3.6で全面的に書き換えられたIDEのウインドウシステムにも改良が加えられるなど、
更なる生産性の向上も図られている。
767 :
デフォルトの名無しさん :04/12/17 01:50:55
さかきけいさん、どこに行ってしまったのか…。 検索すると氏のページばかり表示されるのだが。
768 :
デフォルトの名無しさん :04/12/19 18:53:46
Graphics.drawArc() などで透明度のある線を書くことができますか?
自分でアルファブレンディングするメソッド作るしかないんじゃないの?
>>768 難しいですね。
速度重視でないなら、バックスクリーンをバイト配列なんかで保持し、
自分で演算して、アルファブレンディングするしかないです。
・・・考えるだけでも嫌ですね(^^;
初歩的な、画面遷移で質問します。 main クラス、canvas1 クラス、canvas2 クラスがあります。 main で Display.getDisplay(this).setCurrent(canvas1); として canvas1 を表示します。 つぎに、canvas1 で Display.getDisplay(main).setCurrent(main.canvas2); としてcanvas2が表示されることを目論んでいるのですが、 main シンボルを解決できないとなってしまいます。 どうすればよいのでしょうか? お教えください。
772 :
デフォルトの名無しさん :04/12/20 12:31:34
>>771 mainの参照をcanvas1に渡してるか?
ありがとうございます。 やはり、 コンストラクタか何かで明示的に渡す必要があるのでしょうか。 main クラスをこのようにしたら、大丈夫かと思ったのですが。 public static main midlet; public Main() { midlet = this; canvas2 = new Canvas2(); Display.getDisplay(this).setCurrent(canvas2); ... }
774 :
デフォルトの名無しさん :04/12/20 15:48:28
midletをMIDletインスタンスの参照にしてるなら、 getDisplay()のパラメータはMain.midletじゃないのか?
775 :
デフォルトの名無しさん :04/12/20 15:49:55
あ、main.midletな、スマソ
>>773 まともに答える前に確認しておくけど、
public static main midlet;
public Main() {
midlet = this;
canvas2 = new Canvas2();
Display.getDisplay(this).setCurrent(canvas2);
...
}
コンストラクタがMainってことはクラス名がMainかな
と思いきや、midletの型がmainなのはなぜ?
>>770 速度気にしないならgetPixelでピクセルごとに色取り出して選択色と加算しながら
始点から終点まで点を打っていくっていうのもアリだと思う。
drawArcとかの代わりにはならんかもだが、3Dでプリミティブに透過でつけて
通常のCanvas上に平行投影したらいけそうな気もする。
>>777 クラス名がmainが変数名なら
public static MIDlet main; だよ。
[修飾子] [修飾子] クラス(型)名 変数名 の順だ。
この時点でクラスと変数ごっちゃになってるから他(canvas1とか)も同じ事して
「シンボルを解決できない」のは当然だと思う。
何が言いたいかって言うと、「画面遷移以前の問題」。
>>777 まず、Javaを勉強しろってこった。OJTだけだと余計なところで
躓いて、結局非効率だ
>>778 777の返答は誤りでした。 そうではなく、
public static Main midlet;
の書き間違いでした。 キャピタライズしてなくて誤解を与えたかもしれませんね。
意図はそのまま、midlet が変数です。
javacは通るので、そこまでの間違いは犯していないつもりです。
改めて、777で挙げた例で質問させてください。 省略している箇所が多くあります。 /* メインクラス */ public class ImproveMIDlet extends MIDlet implements CommandListener{ public static BuddyListCanvas listCanvas; public static ImproveMIDlet midlet; protected void startApp() { midlet = this; listCanvas = new BuddyListCanvas(); ...... それから、各所でこのように画面遷移が行われています。 ImproveMIDlet.setCurrent(ImproveMIDlet.listCanvas); ここで、ImproveMIDletの参照が得られるのはなぜでしょうか? どこで参照を渡しているかが見抜けません。 よろしくお願いします。
お前が書きミスしたくせに「誤解」とは偉そうだな。 ImproveMIDletの参照が得られるのではなく、listCanvasの参照が 得られるんだよ。それはpublic static宣言しているからだ。 同様に、midletの参照を得たけりゃ、ImproveMIDlet.midletでOK。 お前は最初で、mainしか渡してなかったじゃねーか。 それじゃどのmainか解らないから、シンボルが解決できない。 staticとして宣言してるメンバなら、クラス名.メンバ名でシンボル解決する。 それこそ、Javaの基本だろ。
>>780 ,781
シンボル解決しなくてもjavacって通るっけ?
正直に言うとこのスレだけで「canvasの切り替えが出来ない」とかいう奴が2,3人いたので
それ読んだ上でのその質問なのか、というか、
読んでないと思うし、同様に理解してない雰囲気が文面から感じる。
普段ちゃんとソース書いてりゃココでそんなミスしない。
「〜をマネした"つもり"」で「省略してます」とか言われても予想できない。
けど、そんな複雑なのを参考にする意味があるカイ?簡単なのでためそうよ。
一番は自習だが、どうしてもってんならソース全部さらせ。
MIDletクラスにsetCurrentなんてあったか? MIDletクラスとDisplayクラスを混同しているようでは、 >それから、各所でこのように画面遷移が行われています。 > ImproveMIDlet.setCurrent(ImproveMIDlet.listCanvas); ↑こういうのも信用できんわけだが。
785 :
デフォルトの名無しさん :04/12/22 16:05:26
質問します。 A5402S(au)でアプリを起動中に KEYの処理を入れてないのにジョグダイヤルを回すと、 ジョグダイヤルの情報が残りその情報が終わるまで次の操作ができませんが、 いい解決策はないでしょうか?それともこれは内部的な仕様なのでしょうか?
787 :
デフォルトの名無しさん :04/12/24 06:49:54
プロファイル:MIDP 1.0 or 2.0 質問1.現在実行中のJavaアプリケーション内から他のJavaアプリケーションを起動するにはどうしたらいいですか? DojaのIApplicationクラスにあるlaunch()メソッドみたいな奴があれば嬉しいんですが・・・ 質問2.実行中アプリからブラウザを起動する(あと、できればブラウザからアプリを起動するってのもほしい)
788 :
デフォルトの名無しさん :04/12/24 07:36:06
>>787 >質問1.現在実行中のJavaアプリケーション内から他のJavaアプリケーションを起動するにはどうしたらいいですか?
> DojaのIApplicationクラスにあるlaunch()メソッドみたいな奴があれば嬉しいんですが・・・
MIDP2.0(JSR118)ではそのような機能はサポートされていません。
>質問2.実行中アプリからブラウザを起動する
MIDlet#platformRequest()で可能です。
>(あと、できればブラウザからアプリを起動するってのもほしい)
これはMIDP2.0(JSR118)では、未サポートです。
791 :
デフォルトの名無しさん :05/01/08 15:07:47
質問です。 EZアプリでキー操作音を消すにはどうしたら良いのでしょうか? もちろん「マナーモードにしろ!」ってのは無しで。。
>>791 平常時からキー操作音OFFにしておく。
アプリでの設定は不可。(メーカーが特別に作ってたら知らんけど)
>>792 レスありがとうございます。
しかしながら、JAVAで設定できると思います。
幾つかのキー音無しのアプリがあったので。
現行機種だと出来るのかもな 大昔の機種は出来ないんだよね 単にBGMが鳴ってるだけだったりしてw
795 :
デフォルトの名無しさん :05/01/09 21:04:27
質問です。現在Vアプリの作成中です。 複数行のテキストファイルを1行毎読み込んで表示させたいんですが、 Vアプリの場合、BufferedReaderクラスのreadLine()メソッドってな いんでしょうか?
なんかここ急に人居なくなったな なっちは元気にやってるんだろか、最近見ないね
>>795 CLDC1.0+MIDP1.0+JSCL1.2.1にBufferedReaderは含まれません。
>>791 うん、まぁ確かにあるのかもしれない。
公式のテトリスでマナー中でも音が鳴ってどうやったら出来るか疑問だった。
多分 DeviceController あたりを使うのだろうと思うけど一般に公開されてない。
ファイルの読書みたいに公式アプリのみで可能な事だと僕は理解してる。
もし一般アプリで音無しが有ったならその作者に聞いてみて。
・・って書いてしまったけど、もしこのスレで詳しい方いましたら補足・訂正お願いします。
Vなんですが、 java.util.Calendar#setTimeInMillis(long millis) はCalendarインスタンスへの時刻設定で、 ひょっとして端末の時刻を変更することはできない? HTTPアクセスして自動的に端末の時刻を合わせるなんてアプリを思いついたんだが、 できなさそう。
>>799 ひょっとしなくても、そのとおりです。
Systemには現在時刻を取得するメソッドはありますが、設定するメソッドはありません。
ん・ぱか工房さんのところにあるSizeUpdate.classを使用すると jadファイルの日本語(UTF-8)が化けてしまうんですが、 文字化けしないようにできないでしょうか?
>>801 それくらいのツール、javaでさくっと作ればいいのでは?
>>801 Vodaのサンプル集にAnt Taskが入ってる。
ありがトン
Vodafoneのビジネスデベロッパー用のアプリを作成しています。 0x系の待受けアプリを作成しているのですが、 週刊ゲーム&アプリLiveの ダウンロード通知で"JResidentMIDletが必要"エラーが出てしまいます。 5x系のときは、このAPIを使用して作成しましたが、 0x系では、com\j_phone\midlet\ResidentMIDlet.class が存在しないために、 JResidentMIDlet を使用することができないと思っています。 どうしたらよいでしょうか? よろしくお願いします。
>>806 ビジネスが具体的に一般向けのやつとどう違うのかは知らんが、一般人でも見られるとこからの情報だと、
JSCL1.0ではそもそもResidentMIDletがないので、
DeviceControl#setTelephonyListenerとか使って
TelephonyListenerをimplementsしたクラスを登録するしかないと思う。
>>807 そうですよね。
もちろん、そのように作成したら、
"JResidentMIDletを使用して作成する必要がある"
と言われるのですよ…。
おかしいですよね。
JSCL1.2 emulaterで Emulator boot-up timeout. とでて落ちるのはなぜでしょうか?
LZ77圧縮アルゴリズムに詳しい人いますか? アプリ内で使いたいのです
どなたか知っている方がいれば教えて下さい。 Vアプリにて、3D表示するアプリを作っていまして、 現在はエミュレータ上で動作を確認したアプリを、実機にてテストを行っておりますが、 class ファイルと同じ場所にあるリソース「a.mbac」を読み込もうとすると、複数のエラーが発生してしまいます。 1. f = new Figure("/a.mbac") を実行すると、例外「IOException」。 2. f = new Figure("a.mbac") を実行すると、例外「java.lang.RuntimeException: Constructor: Could not create」。 なお、3Dデータは、以前にiアプリで作ったモノを流用しています。
あと、同じ場所にある画像データは img = Image.createImage("/0.png"); などで読み込めております。
Vodafoneの携帯用のJavaアプリを作ってみたいと思うのですが、 右も左もわからず、どうやって開発環境を作ったものかもわかりません。 現在の私の環境は、 JDK1.5 Eclipse3.0.1 です。 V601T用のアプリを作りたいので、JSCL1.2.2をインストールしましたが、 この後、なにを導入すべきなのかを教えてください。 または、詳しい文献等がありましたらご紹介願います。
>>813 iアプリ用のmbacって,Vアプリで使えないんじゃなかったっけ?
Vアプリ用のmbac変換ツールを使って作りなおす必要があるとか
どっかに書いてあった希ガス
>>817 それも、とりあえず片っ端から読もうと思って、最初に「概要」をダウン
ロードしてみたんです。
そしたら、冒頭に「CLDCとMIDPを熟知していることを前提とする」ような
ことが書かれていたので、読むのを断念しました。
それでもPDFにある通りにインストールを続けてたんですが、バージョン
の違いからか、どうも上手くいかなくなってしまい、困り果ててこちらに
お世話になったという次第です。
できることなら、いままでの環境を残したいと思い、私と同じ環境で開発を
進めている方の声でも聞ければと思ったのですが・・。
一度消さないとダメなんでしょうか?
>>819 =816
あなたの場合は消さないとダメ。理由は
>>817 が言うとおり。
ここから先は余計なお世話になるが…
816はJava言語やオブジェクト指向についてもよく知らない様子だから、
アプリ製作以前にまずそれらを参考書とかで学んだ方がいいかもしれない。
今は多分Vアプリ開発資料のどれを読んでもチンプンカンプンだと思うから。
このスレでもことあるごとに出てくる言葉、それは「急がば回れ」。頑張ってくれ。
Javaについては、全く問題はないかと言われれば自信はありませんが、勉強しました。 一応(ほんとに一応ですが)、実務経験もありです。 そこで「さぁはじめよう」と思い、 Vアプリ開発ガイドに目を通したら 「CLDCとMIDPを熟知していることを前提とする」とあったもので、少々面食らって しまった訳です。 使い慣れたEclipseを使いたかったんですが、とりあえずは ・JDK1.3 ・J2ME Wireless Toolkit ・JSCL1.2.2 だけでやってみようと思います。 疑問なのですが、皆さんは一番最初はどうやって始められたのでしょうか? Java言語についての知識ははじめからあったのだろうとは思いますが・・。 あと、登竜門となるサイトや文献があったら教えてください。
>>821 vodaのエミュレーターが出たときに速攻で落としていろいろ実験した
>>816 とりあえず環境を整えて作ってみたいなら綿100号さんとこがお勧め。
ttp://homepage1.nifty.com/cotton100/ →Java(TM)アプリ はじめのいっぽ
議論とかはここかSINSEN
http://www.sinsen.org/top.html のBBS。
JDKは1.5から大きく変化した(と思う)から、1.4か1.3の方がたぶん無難。
Eclipseは2.1.3でないとダメっぽい。(3.0.1で説明どおりやると実行時にエラー)
2.1.3と2.1.xの言語パックを使うといいよ。
オイラの経験は
Java: Web用のゲームアプレットの本一冊買って、5個分ぐらいのソース自分で打ち直し
MIDP: んぱか工房の人が出してる本買って(発行日くらいに)、5個分ぐらい(略。
で、その後ぐらいからサンプル改造しつつ理解していった。今も少し流用しながら。
まじめにオブジェクト指向についてとか勉強したのは後の話。
昔はそうでもなかったと思うけど、携帯アプリの制限がなくなって来たら
オブジェクト指向をキッチリ意識しながら書いた方が保守とか楽でいいと思う。
825 :
デフォルトの名無しさん :05/01/19 17:56:26
Vodafoneの新しい3G端末は、JSCLのAPI使っていると動かないね SHやNは対応しているのかと思いこんでたけどだめだね 属性の設定キーでもあるのかな 今まで作ったVアプリも、JSCLで拡張された機能をはずして 動くようになったけど、これじゃ機種変更しなきゃよかった 個人にも、メガアプリの仕様やライブラリを 公開して欲しいな。無理かな?
>>822 ,823,824
レスありがとうございます。
紹介していただいたサイトも非常に勉強になります。
なんとか「HelloWorld」と表示させることはできるようになりました。
要するに環境ができたというだけの話ですが・・。
で、今日はいろいろやっていて一つわかった事があります。
それは、JSCL1.2.2 は JDK1.5 では動作しないっぽいということです。
エミュレータを実行させてたら、1.4か1.3を使えというエラーがでました。
昨日インストールが上手くいかなかったのもそのせいでした。
やはり、初心者は初心者らしく素直に資料にあるとおりにやらなきゃダメですね。
>>821 =816
失礼しました。
>皆さんは一番最初はどうやって始められたのでしょうか?
Vアプリの前にiアプリ開発、その前にVC++での開発経験があった。
iアプリの時は簡単な本を1冊読んで携帯アプリの構造をつかんだら
VC++のアプリを移植していくようなイメージで試行錯誤。
キャリアが用意したドキュメント(いわゆる開発ガイド)はしっかり読んだ。
APIリファレンスは必要に応じて。
829 :
デフォルトの名無しさん :05/01/20 11:17:59
hideNotify()って、いつ・どういうときに発生するんでしょうか?
>818 遅レス申し訳ないです。 mdac 作成担当に変換データを作ってもらったら、素直に読み込んでくれました。 ご指摘ありがとうございました。 ただ、ひとつ疑問なのは、png データでは「/0.png」みたいに“/”をつけても問題ないのに Figure などの3D系はつけると例外になるんだろう? (そういう仕様だと言われれば、それまでなんですが…)。
>>830 APIの仕様策定者か実装者に聞くしかないのでは。
3D系はSunとは関わりないしね。
皆さん共通して言えることは、ドキュメントをよく読むということですね。 自分は面倒くさがり屋なんで、子どものころからプラモデルとかも説明書を読まな いで作ってしまうタイプなんですが、それじゃあイカンと。 精進します。 今日は Eclipse + Ant を導入しました。 快適ですね。 Eclipse上でコーディングからビルド、実行までできてしまうとは・・。 824さんの言う通り、Eclipse3.0.1 では実行時にエラーが出ました。 仕方なく、2.1.3 にダウングレード。 ここで、また疑問なのですが、 ビルドまで Eclipse でできるということはもう J2ME Wireless Toolkit は必要 ないということでしょうか? あと、昨日からずっと探しているのですが、MIDP の日本語版のドキュメントって ないのでしょうか?
さかきけい氏、どうしたんだろ〜
>>832 preverifyが必要なので、Wireless Toolkitに含まれるツールはいるよ。
MIDPのドキュメントについては、「英語を読め」と。
日本語訳もあったけど、抄訳なので。
>>833 それです。私の求めていたものは。
わざわざご自分のWebスペースにアップしてくれたのでしょうか?
ありがとうございます。
それをローカルに欲しいのですが、どうにかならないものでしょうか。
Web巡回ソフトなどで取得を試みたのですが、どういうわけか取れませんでした。
>>835 Ant では検証は行われないということですか?
抄訳(かどうかはしりませんが)とはいえ、私が訳せば誤訳になりますゆえ。
>>837 知りませんでした。
たった今、ググって知りました。
Vアプリエミュにpreverify.exeもmidpapi.zip(stubclasses内)もあるから、
ホントに無くてもいいんじゃない?
でも他キャリアとかでは使うと思うし、別に持っておいて損は無いでしょ。
archive.orgは自分も知らなかったのでこの機に保存しときます。dクス。
>>838 BASE HREFタグ先のさかきけい氏のサーバがダウンしているので、ローカルで開かない。
この部分とBODY下のarchive.orgのコメントとJavaScript削除すれば一応見れると思う。
何とかして必要なページ全部DLして、J2ME(WTK104)のdocs/api参考に階層作ればOK。
あ、あとHRFF先がさかきけい氏のアドレスになってる部分は相対アドレスに。
少々面倒くさいけど、自分で英訳しない分はるかに楽でしょ?
いくつかarchiveに無いファイルがあるけど、そこは我慢。
まぁ、エンジニアなら英語ぐらい読めたほうがいいんだと思いますが・・。
EZLIBで、サーバが止まった件で、不意にとまったんだけど氏が忙しくて直せてない
っていう状況だとかニュース欄で書いてたような気がします。
iアプリとVアプリで3D関係に詳しい方教えて下さい。 iアプリで、PrimitiveArray と Figure を組み合わせた描画を行うアプリを作り、 とりあえずは思うとおりに動作しました。 今度はVアプリ用にソースを書き直したところ、Figure の座標がおかしいらしくてまともに描画されません(一応描画はされる)。 座標数値はすべてiアプリのものから変えていないのですが、問題ありでしょうか? それと確認なのですが、iアプリで使用していた関数は、以下の要領で書き換えてやればVアプリでも 同じように動作するのでしょうか? ・PrimitiveArray → renderPrimitives で描画時に直接指定 ・Graphics3D.setPerspective() → FigureLayout.setPerspective() // 視野角を指定して透視投影の設定 ・AffineTrans.lookAt() → AffineTrans.setViewTrans() // 視点座標への変換 ・Graphics3D.setViewTrans() →FigureLayout.setAffineTrans() // 視点座標へ変換した AffineTrans を設定する。
JSCL1.2のcom.j_phone.util.GraphicsUtil#getPixelについて質問です。 Canvas#paint(Graphics g)内で g.setColor(0x0000FF); g.fillRect(0, 0, getWidth(), getHeight()); int c = GraphicsUtil.getPixel(g,1,1); g.setColor(0xFFFFFF); g.drawString(""+c, 10, 10, g.LEFT|g.TOP); とやると"255"が表示されると思うんですが、実行してみると"248"と表示されてしまいます。 getPixelでは正確な値が取得できないのでしょうか?
843 :
デフォルトの名無しさん :05/01/22 01:12:39
>>825 まじすか!
仕様が公開されるまで3Gに変えれんなぁ
Vアプリでポリモーフィズム使ってる人いる? 容量とか処理速度とか問題にならない? Vアプリを外注したらif文だらけのコードがあがってきたんだが、 これって普通?
>>844 何を外注したんだよw
328 名前:デフォルトの名無しさん[sage] 投稿日:05/01/22 12:14:46
>>326 classファイル1つにつき数百バイトのオーバーヘッドがでるから、サイズの点で不利。
if〜else if〜else ifってするよりもif〜if〜if〜って書いたほうがバイトコードは小さくなるから、
elseが付いていないなら良い仕事だと思っていいよ。付いていた場合は並。
可読性を考慮したり、奇麗にまとめようとすると、サイズと動作速度の問題が出てくる。 最近はpoorな環境での経験がある人が少ないのかな。
>>845 50KBとかの頃ならともかく、今ぐらいの容量があるなら、もうelseまで削って
容量を稼ぐより、可読性を高めたほうがいいような気もする。
auもMIDP2.0採用してくれたらいいのに
同意。 勝手アプリがダメな上に移植も面倒、アプリのラインナップも乏しいBREWはとっとと去ね
protected synchronized void keyPressed(int keyCode) { int action = getGameAction(keyCode);
すみません間違えて投稿してしまいました。 Canvasクラスにおいてクリアキーが押下されたときの処理をしたいとき、 どうすればよいのでしょうか? ひょっとしてクリアキー、スケジュール/メモキーなどの区別はできないんですか? protected synchronized void keyPressed(int keyCode) { int action = getGameAction(keyCode); }
>852 auだと、クリアキー押したとき、keyPressedの引数には0が入ってくるので、それで判断。 いきなりgetGameAction()に渡すと例外キタ━━━━(゚∀゚)━━━━ッ!!になるのでちうい。
>>845 >if〜else if〜else ifってするよりもif〜if〜if〜って書いたほうがバイトコードは小さくなるから、
そうなんだ。でもそれって実行速度は遅くなりそうだが・・・
>>853 vodaのP5ですがクリア押したときのkeyPressedの引数は-2147483646となっているようですが、
この値で判断してしまってよいのでしょうか?
GameAction()に渡した後は0になりますがスケジュール・メモキーなどと区別がつかなくなってしまいます。
>>856 機種依存ですか。
なるべくクリアキーは使わないほうがよさそうですね。
レスありがとうございました。
902shで 文字表示させるのにg.HCENTER|g.VCENTERを使うと表示されないのは仕様ですか? g.LEFT|g.BOTTOMだと表示されるのに・・・
一般人には3Gの開発環境なんて手に入らないのでわからん
>>858 drawStringでVCENTERは機種依存だと思う。MIDPの本では使えないと書いてる。
EZの古いのでダメだった事有り。HCENTERは使えるはず。
ダメならフォント情報取得してズラシなされ。
質問の仕方が悪かったのか、スルーされてしまったので、もう一度質問内容を変えて書き込みます。 現在、iアプリで動作していた3Dワイヤーフレーム横回転するアプリを、Vアプリに移植してます。 で、回転の部分でうまく動いてくれません。 このアプリではフレームの他にフィギアもくっついて回転するので、AffineTrans#rotationY() などの関数を使用せず Vector3D の X & Z 座標を三角関数で計算させた後に、AffineTrans#setViewTrans() を行ってます。 iアプリではフレームとフィギアは中心座標を基準として横回転しているのに、 Vアプリではカメラ座標を中心としてフレームとフィギアが横に移動(自分の周囲を回転)してしまいます。 どうも、iアプリとVアプリでは視点か参照点の扱いが違うような気がするのですが、そんな事ってありますかね? それとも、何か別の問題点があるのでしょうか? どなたか、ヒントでも教えて頂けないでしょうか?
>>861 それ、フィギュアを回転させてるんじゃなくて、カメラを回転させてない?
>>861 iとかVの経験無いんだけど、カメラ動かして物体の周りから見ようとしたら、
物体中心を原点に持ってきて、視点を原点中心に回転させ、視線を原点向きに
する必要があると思う。別に回転中心は原点じゃなくてもいいけど。
物体そのものを回転させるとしたら、視点視線固定して
物体中心を基準に座標を回転させればいいんだけど、
Figureだけならともかく、Primitiveと合わせた物体中心を求める必要がある。
で、オイラは物体中心に回転させる方法シラネ(自作ならできるかも)。
全部Figureで作って、アクションで回転させるとかするしかないんじゃない?
>>863 いや、ローカルなマトリックスをかければいいだけだから
>>861 視点と方向が逆になってるだけじゃね?
Figureって3D座標系の原点以外に置けたっけ?
>>861 iアプリの AffineTrans#lookAt() と、
Vアプリの AffineTrans#setViewTrans() では、第2パラメータの扱いが違うかも。
iアプリでは注目点を指定するが、Vアプリでは視線ベクトルを指定するように
なってるんじゃないかな?
Vアプリは作ったことがないんで、BREW版のAPIからの推測だが・・・
>868 まじで!? つうか、思い当たる部分が一杯ある…(汗)。 で、両方のJavaDoc 調べてみたけど… Doja 3.0 position - 視点への位置ベクトルを指定します。 look - 参照点への位置ベクトルを指定します。 up - Upベクトルを指定します。 JSCL 1.2.2 position - 視点位置 look - 視線方向 up - 上方向 本当だ…、 視線“方向”じゃん(泣)。 という訳で、原因が分かりました。 862-868 の皆さん、ありがとうございました。 原因は分かっても、解決策はどうするかなぁ…。 とりあえずググッてみるか…。
ezのphase2とかでソフトキーが押されて離す瞬間を 取得することはできますでしょうか? phase3ではキーの押下状態はgetKeyState()で取得できますがこれをphase3未満で 実現するには、ソフトキーの離された瞬間が欲しいんです。 CommandListenerでは押された瞬間しかわからないんで悩んでいます。
>>869 視点(p0)と参照点(p1)の位置ベクトルがわかってるなら、視線方向ベクトルは
(p1-p0)するだけっしょ。
同じマスコットカプセルなのに仕様が違うのか メソッド名が違う時点で変だけどw
873 :
デフォルトの名無しさん :05/01/26 11:01:44
MIDP APIの 日本語リファレンスを探しています。 以前、日本語化したサイトが存在したのですが、みれなくなってしまいました。
>>873 閉鎖しました。
がんばって英語を読んでください。
>871 いや、全くその通りで。 レス書き込んで、いざ修正というところで気がつきました。 もう少し検証してから書き込むんだった… (1週間ほど悩まされてきた現象だったので、解決の糸口を見つけた事で舞い上がってしまいました)。 // p - 視点位置 // l - 視線方向 // u - 上方向 setTrans(Vector3D p, Vector3D l, Vector3D u){ LWork.x = l.x - p.x; LWork.y = l.y - p.y; LWork.z = l.z - p.z; trans.setViewTrans(p, LWork, u); } こんな感じで、関数作って対応させました。 本当に皆さんありがとうございました。
877 :
質問です! :05/01/26 20:28:52
こんにちは! 携帯用のJAVAアプリでボイスチャットを作成することって 原理上可能なことでしょうか?もし、そうなったら電話使わず アプリを通してパケホとかで声のデータでやりとりできますよね? せめて電話みたいなリアルタイムに近い快適さまでいかなくても、 5秒に1回ほど更新してサーバーに相手から来ている声のデータ拾いにいって 再生してってかんじで、トランシーバーみたいなかんじで 声のデーターのやりとりをサーバー経由で出来ないものでしょうか? そういうアプリって作れます?
>>877 少なくとも現時点では、、、
1.音声データを(アプリに)取り込む方法がない
>>878 さん
さっそく、ご質問に答えていただき、ありがとうございます。
それではTV電話状態の音声抜きで画像のみとかは
可能ではないでしょうか?
何するにしても対応するAPIがあるかどうかだね。 ケータイでできることが何でもAPIとして用意されてる ワケじゃないからね。 具体的に,このAPIとこのAPIを組み合わせて こういうことできませんか?って聞いた方がいいのでは。 ボーダだと,APIの組み合わせ次第では審査通らない こともあるし。位置情報+通信とか。アドレス帳取得+通信とか。
>>877 Vの場合だが、
・端末からサーバへの問い合わせ一方方向なので、定期的にチェックしにいくとしてもレスポンス的に不利。
・音声を出す仕組みは、現段階のAPIでは動的にSMAFデータを作る以外考えられない。
・音声を入力する仕組みは、音声認識させるしかない。音声認識パターン辞書をアプリないに持つ必要がある。
じゃ、がんがってね。
>>877 TV電話にしろ、今のカメラの機能ってさ
カメラ呼び出し(アプリ中断)>端末のカメラ機能で撮影>(再開)写真取得
だからこれだけで10秒はかかるし、操作が面倒だと思うのでムリポ。
個人的な意見かもしれないけど、パケホだからって通信をしまくるのはどうかと思う。
もちろん自分で用意するサーバーの負担が大きくなるのもそうだが
現状では携帯端末とサーバーが直につながってるわけじゃなく、
キャリアのサーバにパケット送ってサーバ間でHTTP通信してるとかだと思うので
キャリアのサーバにも同じくらい負担が増える。ので、いずれ制限がかかる。
現状でもauのWINには1回/分の制限がある。さらに一日の総通信量にも。
もうちっと端末・通信環境が整うまで待つ必要があると思うよ。
で、その頃にはそれっぽいAPIも追加されてくるはず。
今はせいぜい文字チャットで1分強毎にチェックぐらいが精一杯っぽい。
ちょいと、Vアプリで質問です。 アプリの一時停止してから復帰すると、リソースから読み込んだ画像が「NullPointerException」になります。 まあ、ここら辺は仕様らしいんで仕方がないのですが、どのように復帰処理を実装するべきかと悩んでいます。 皆さんは復帰時に「NullPointerException」の対応ってどうされてますか?
>>883 そんなのなったことない。
ちなみに公式で出してるけど苦情もない。
885 :
デフォルトの名無しさん :05/01/29 23:11:59
iアプリとサーバーとをJavaで通信させたいのだが、 サーバー側のプログラムはservletを使うしかないのでしょうか?
iアプリはスレ違い
887 :
885 :05/01/29 23:41:41
ごめんなさい。
>>883 待ち受けで同じ現象でたことある
俺の場合は一時停止するときに全部のリソースを開放して
復帰時に作り直すようにしていた
ちなみに待ち受けの場合でも
折り畳み一時停止→着信で自動復帰
などの特殊ケースのときしかこの現象は起きなかったので
通常のアプリで起きているならstartAppやコンストラクタの処理を見直した方が早いかも
VodaフォンP5ですがヒープメモリのサイズを取得することはできますか?
最終的にVアプリを作りたく、JAVAの勉強しています。 そこでつまづいているのはスレッドです。 表面上のことは分かっているのですが、本質的なことが何度本を読んでも分かりません。 たとえば、canvasを継承し、 Runnableをインプリメントしたクラスの run()にrepaint()を書き込んだ場合、 二つのスレッドが同じ画像の描画を交互に描画しているのでしょうか? 自分は例えば、スレッドAで画像処理をさせ、スレッドBで通信の処理をさせたいのですが、 そういうことは可能なのでしょうか。 上記のようなことが理解しやすいお勧めの参考書があれば教えてください。
>>890 とりあえずCLDCのAPIを読んでみて欲しいのだが
RuntimeのfreeMemoryとかtotalMemoryとかを使えばエエ。
>>891 他にrepaintを連続的に呼んでるなら知らんけど、無ければrunのだけ。1つ。
あと、repaintは再描画を要求するもので、実際描画するのはメインスレッド。
携帯アプリでは通信中停止するっぽいからそれは無理(多分)。
通信こまめに分割して描画・通信を繰り返すしかないと思う。
とりあえず参考書の前にGoogleとかで記事探ってみるといい予感。
>>891 通信スレッドからrepaint()が呼ばれるのか?
通信中はそこでそのスレッドの処理が止まるんだから呼びようが無いと思うんだが
>スレッドAで画像処理をさせ、スレッドBで通信の処理をさせたい
可能だし、実際やってるアプリもある
>>892 >>893 ありがとうございます。
やっぱり何もわかってませんね。
スレッドが理解できる迄
先に進みたくないので、
色々探してみます。
>884,888-889 レスありがとう〜。 startApp でやっていた処理をコンストラクタに移して、 pauseApp が呼ばれたらフラグを立てて、 startApp で pauseApp がつけたフラグを調べてから、canvas 系クラスの復帰処理を実行するようにしました。 そしたら何故か直った…。 canvas 系クラスの復帰処理って、ただ return するだけの空メソッドなんだけどなぁ…。 もしかして、MIDlet 系クラスから参照をしてなかったから、最適化対象になっていたのか? だれか、ここら辺に詳しい方います?
startAppは初期起動時及び再開時に呼ばれるので その辺が絡んでるだけだと思いますよ 初期のみにしなければいけないことがコンストラクタに移動したことで 解決したのではないかと思います
>898 その通りでした。 一回の修正で何でもかんでもやろうとして、どこが解決に至った修正なのかが分からなくなってました (static 宣言してあるクラス変数を、復帰時に null チェックしていたから回避出来るかと思っていました)。 コンストラクタはきちんと使わないとダメですね。 ご指摘ありがとうございました。
900様のおな〜〜〜〜り〜〜〜〜〜ぃ
EZアプリを作成しているのですが、拡張ストレージが使えなくて困っています。 エミュレータは無いし、実機はDoCoMoと違ってトレースできないしで原因がわからないのですが、 エラーは(下ソースの)1行目から出ている事だけはわかっています。 また、MIDlet-X-Storage-Sizeもkjx内に直接記述しました。 他に拡張ストレージに書き込む前にする事とかあるのでしょうか・・・? public void writeStorage(byte[] buf) throws Exception { StreamConnection con = (StreamConnection)Connector.open("storage:",Connector.WRITE); OutputStream out = con.openOutputStream(); out.write(buf); out.close(); con.close(); }
OutputStream out = null; out = Connector.openOutputStream( "storage:" ); でいけないか?
>>901 原因が分からんことないでしょ。例外投げっぱなしにしてるからじゃない?
try〜catch時のExceptionをtoStringしてCanvasにdrawStringとかすればいいですよ。
ソース特におかしな所無いけど、「直接記述」の部分が気になる(どういう意味?)のと
単純に端末が対応してないとかってない?Phase3機でやってる?
あと エミュは探せばあるんじゃない?非公式に という発言はダメ?
Phase3エミュ一回一般公開してたとき偶然取れた。あれはいいね。普通のエミュじゃ遅すぎて話にならなかったからな。でもエラーは try{〜}catch(Exception e){System.out.println(e)} しとかないと終了しちゃうんだよね
>>902 試してみましたがだめでした・・・
>>903 W11Hを使用しているので機種は問題ないと思います。
「直接記述」は公式サイトからKJX作成ツールのPhase3対応版を使用して作成。
できたkjxファイルをエディタで開いて「MIDlet-X-Storage-Size: 204800」と追記しました。
また、try〜catchを使って例外を拾ったところ「java.io.IOException: cannot use」
と返ってきたのでやっぱり記述の仕方が悪かったんでしょうか?
ビルドするたびに毎回記述しなきゃいけないし・・・。
>>905 MIDlet-X-Storage-Size: 204800 は*.jadに書くんだよ
あと200kもつかっていいんだっけ?
>>905 なんでわざわざそゆことすんの?
kjxツールでKDDI独自の記述するときはOther keywordでしょ?
kjxファイルの頭の記述はjadなんだけど、jarの方にもMFに同じ記述があるから
MFファイルの方をチェックしてるのかもしれないよ。
ちなみに拡張ストレージは200k(204800)まではOK。
もしこの書き方がおかしい(多すぎ)時は起動すら出来ないと思う。
908 :
デフォルトの名無しさん :05/02/03 23:34:57
Vアプリ作成サイトを探しても、詳しく書いてあるサイトが見つからないので困っています。どこか良いサイトを知っていますか? 僕はアプリを作るためにJAVA SEを少し勉強しました。コンストラクタ、メソッドなどのことは少しわかります。 もしよければ教えていただけますか?
>>907 Other keywordで設定したら例外でなくなりました。
ありがとうございました。
911 :
デフォルトの名無しさん :05/02/04 13:35:54
912 :
911 :05/02/04 13:38:21
913 :
デフォルトの名無しさん :05/02/05 13:02:28
あの、同期ってありますよね?あれって何なのですか?
国語辞典調べてから考えて
>913 お前と俺とは同期の桜
EZからVに移植しようと思っているのですがVアプリを公開するにはアプリゲットかバンダイに作者登録しなくてはならないようなのですが、どちらのサイトにも登録したい場合には二重登録すればよいのでしょうか?
分かりました。ありがとうございました。
919 :
デフォルトの名無しさん :05/02/10 14:35:42
CLDC には Comparable インターフェース や Arrays クラスがないようですが、 皆さんは、クラスの配列のソートはどのようにしているのですか? やはり手でやるしかないのでしょうか?
時々同じ質問が出る。答えは「ソートは自力でやる」
スレッドを走らせてRuntime.getRuntime().freeMemory()の値を表示していくと どんどん減っていって0までいくとまた増える、が繰り返されるんですが、 どうすればよいですか?
あ、ひょっとして定期的にRuntime.getRuntime().gc(); でガベジコレクションしてやらないといけないんですか?
>>921 今の動作に問題なければ何もする必要ないよ。
gcで解決って問題ではない(実行されるとは限らん)が、多少は改善されるかもね。
スレッドが走ることでメモリが減らない、つまり動的にインスタンスを作らないのが一番。
925 :
デフォルトの名無しさん :05/02/10 21:46:33
省電力なVアプリってどうやって作るんですか? 電池を消費しないようにするテクニックなどがあったら教えてください。
926 :
デフォルトの名無しさん :05/02/11 02:12:46
>>920 やっぱりそうですか。
ソートくらいあってもいい気はするんですけどね。
クイックソートとか手で作るのだるいなぁ。
メモリのことを考えると、ヒープソートとかの方がいいんだろうか。 まぁ、たかだか数百個程度の配列なら、どんな方法でも大差ないか。 >925 アプリ上は走りっぱなしのスレッドをなくせばすむけど、 そうしたとしても省電力になるかどうかは結局VM次第になるような気がする。 バックライト制御して常に消した方が効果は大きいような。 >924 ガベコレで回収しきれなくなったとかガベコレ時にスレッドが一時停止して困るとかでない限り無視でいいと思う。 回収しきれない→ヒープメモリを動的に使わないようにする 一時停止で困る→ガベコレタイミングを考えてgc()を実行
>>925 描画を省くとけっこう違うよ。
あと、sleepだね
VodafoneのP5型には、動画の再生クラスとかないんですか? リファレンス見たけど見つからなかったもので・。
>>929 FileUtilityのplayでネイティブ側で再生するしかないかな。
>>929 情報サンクス!
さっそく試してみます。
む、エミュレーター上では、FileUtilityのplayで 動画が再生されるとこは見れないのですか?
「アプリが一時停止から復帰した」 っていう判定はどうやるんでしょうか・・。 タイトル画面とかで毎フレーム描く必要ないですよね。 でも、一時停止させてからアプリに戻ると画面真っ白でかっこわるいし・・。
ご、ごめんなさい。
>>638 にモロ書いてありました。失礼しました。
>>927 ,
>>928 バックライト制御とsleepは思いつきませんでした。
ありがとうございました。
なんだよ。こっちにあったのか。携帯アプリ板で必死に探したよ
auのシューティングで、背景を宇宙(黒で青の星がたまに写る)から地上(よくあるなが〜い絵?をスクロールさせてるような) に換えたいのですが、あれは本当になが〜い1枚絵をスクロールさせてるんですか? どうやってやるんですか?
今気づいたのですが、Vodafone(P5型)でStorageConnectionを使い、 取得したメモリカードのパス「"/mc/"」は、メモリカードの直下ではなく、 ピクチャフォルダ等がある「データフォルダ」を指しているのですか? そうなると、メモリカード直下にある、「SD_VIDEO」フォルダ等に アクセスする手段はないということでしょうか?
>>937 画面サイズの画像を複数用意し、常に連続する2枚をスクロールすれば
繋がってるように見えるはず。別にもっと大きな画像でもつなぎ目で2枚書けばいい。
とりあえずMIDPというよりゲーム作成系の記事探してみれ。
携帯アプリでの注意点としてはメモリ容量とImageのサイズ制限。
機種によるけど1枚絵は無理だと思う。
>>939 ということは、SD_VIDEOフォルダ内の動画は再生できないと
いうことですか・・・。ああ鬱だ、氏のう。
>>937 RPGのマップみたいに、タイルを敷き詰めて1枚の大きい画面にしる。
String(byte[] bytes, String enc) Stringクラスのコンストラクタで VodafoneP5の場合、どのようなエンコード方式に対応しているのでしょうか?
944 :
デフォルトの名無しさん :05/02/14 19:27:33
EZアプリからのHTTPアクセスと 通常のブラウザからのアクセスとを 見分けることってできるんでしょうか?
945 :
sage :05/02/14 23:22:20
>>933 システムイベントから復帰する時にはpauseApp()を通るからこの中で再描画の要求を出します。
>>944 UserAgentを見れば確認できます。
UserAgentの機種名は携帯の型番とは違うので要注意です。
>>946 他人が作った物を勝手にアップしていいとでも?
>>947 やはりそれはいけませんよね・・・orz
公開してたものだし、いいんじゃなかろうか。
良い訳無いと思う。
>>943 たぶんShift-JISとUTF-8だけ
権利の話をすると、そもそも翻訳してそれを無許可で公開する時点で(ry
String(byte[] bytes, String enc)ですが、 "SJIS", "UTF-8", "UTF-16"が使用可能でした。 但し"UTF-16"の場合はbytes[0], bytes[1]はBOMになってないと駄目なようです。
955 :
デフォルトの名無しさん :05/02/15 18:38:16
EzアプリでURLEncoderを使いたいんだけど無理?
ここは親切な板ですね。携帯板なんかヒドイ・・・ んで、ez2のアプリってパソコンからは絶対無理?
>>955 com.jblend.net.HttpUrlEncoder
>>956 あまりにも、な質問が少ないだけだと思う。
アナタもム版なんだから落とす側より作る側の発言してくれYO。
ez2.cgiの事ならわざわざcgi通さなければイイだけの話。
〜/ez2.cgi?xxx.kjx > 〜/data/xxx.kjx
>>946 右下に無断転載禁止って書いてたしね。連絡が取れればあるいは・・。
958 :
デフォルトの名無しさん :05/02/15 21:35:15
>>957 URLに関してはそれでエンコードできるんだけど、データをポストするときに
フォームエンコードをしたいのにできなくて困ってる〜^^;どうやって
エンコしたらいい?
生のバイナリで送ったら? わざわざエンコする必要ないでしょ
塚、忍者でタグつかってEZアプリ公開すんのって絶対無理ですか? いろいろ探したんですが・・・
961 :
デフォルトの名無しさん :05/02/15 23:02:15
>>959 返答ありがとう^^
それでやってみたんだけど、受側のPHPがPOSTでデータがくるので
エンコされてると思うみたいでデータが壊れちゃうのよ。
どうしたらいい?
携帯Javaってnative宣言のメソッドは実装できるの?KVM/CLDCレベルの話で
>>961 新しめのPHPならphp://input
古いならHTTP_RAW_POST_DATAとalways_populate_raw_post_data
あとはググってチョ
>>958 ,961
最初からそこまで言っておいてくれればもっと早く書けたんだが、
EZアプリからPHPに送る話ならSINSENの掲示板(1051)とかで出てたけど
リクエストデータのヘッダに明示的に示すといいらしい。
con.setRequestProperty("Content-type","application/x-www-form-urlencoded");
ちなみに963はPHP側で明示的に変更させない方法。
>>962 CLDCでは削除されてます。多分セキュリティ的な理由。
965 :
デフォルトの名無しさん :05/02/16 00:39:32
>>963 ,964
わかりやすい回答、ありがとうございました!
おかげで何とかなりました^^
そこは行けたり行けなかったりするね。
自分で翻訳しろ、とかいってみる。俺はやったぞ。
DoCoMoのサイトでiアプリ用のAPIリファレンスをDLするといいかも。 もちろんそのまま使えるわけでなく、翻訳する手助けになるってことだよ。
ボーダです ダウンロードしたファイルが同じ名前だと保存不可 という不都合が報告されたのですが この場合直す名前とは jad&jarの方でしょうか? それともMIDlet-Name:の方でしょうか? また調べてみたところV801SAの不都合ぽいのですが他の機種でも起こりうるのでしょうか? 他のキャリアでは聞いたことのない不都合でしたので
とりあえず両方直すことにした うぉぉボーダの公開ってめんでぇーーー
AuのHPを見ると端末がBREW対応・Java非対応になってきています。 javaのEZアプリって今後利用できるんでしょうか? (たとえばW21CAとか)
できまひんよ。 BREW上のJAVAVMの可能性も低いです。 勝手系はFLASHに流れると思います。
auはBREWへ移行、vodaはキャリアがゆっくり死につつある 新興勢力はまだまだ力不足 がんばれ。超がんばれ。
>>974 >>975 BREW上のVMの記事を見て「ひょっとして」と思いましたが、期待薄なんですね。
BREWはきついですね。本当にきつい。
二つ折り携帯の開閉をキャッチして、サーバーと更新する待ち受けアプリ
を作りたいんだけど、FLASHでは無理ですよね!?
977 :
デフォルトの名無しさん :05/02/17 17:54:00
com.j_phone.io.* 等のJPHONE独自のAPIを使ったアプリ作りたいんですが batファイルかけやらEclipsでAntで実行しろやら わけがわかんねーんだよ!!!!! ということで手っ取り早くエミュレーターで実行できる実行ファイルを作りたい場合は どうしたら良いんですか、教えてエロい人
>>977 コマンドラインからjavac、preverify、jarと実行して手動でやれば?
979 :
デフォルトの名無しさん :05/02/17 18:17:52
レスさんくすです えっとですね javac -bootclasspath C:\V-appli_SDK_121\lib\stubclasses.zip src\*.java まずこんな感じでクラスファイルをつくればいいんですよね。。。。? でpreverifyしなきゃいけないんですよね。。? preverify -classpath c:\J-PHONE-SDK\stubclasses.zip src\test みたいな感じでsrc直下にあるファイルに全部preverifyすればいいんですか? で、これどっかから拾ってきたんですけど jar cfm shisen.jar MANIFEST.MF -C output . とかやればjarとMANIFESTが出来るんですかね。。。。 どうやってjarが生成されているのかがわからんのです
教えてクンいらね。 てか、そんなのすら調べられない奴が、言語を使えるとは思えない。 ビルド方法を解説してるサイトくらいいくらでもある。 読め!
981 :
デフォルトの名無しさん :05/02/17 18:30:12
よんでもよくわからねーんだよ!!! やさしくおしえてくださいこのやろう!!!
982 :
デフォルトの名無しさん :05/02/17 18:34:40
やだ!!
読んでも良くわからない(読めない)なら、止めとけ。 この先もっと大量に調べなきゃならないことが出てくる。
984 :
デフォルトの名無しさん :05/02/17 18:40:48
おーしーえーてー!!!! ほんと実行ファイルが出来る環境が出来るだけでいいんです!!
解説してるサイト、ガイドを読めないのに、僕らの説明なら読めるのか? 僕らが親切に教えた所で必要な手順変らないから説明内容は一緒だぞ? とりあえず、どのサイト・ガイドを参考にして、どこまで出来たか、ぐらい書け。 僕のお勧めは綿100号さんのサイトで紹介してる、kjx作成ツール使う方法。 もしくはEclipseプラグインでもPDF通りにやれば出来そうなもんだが・・。 どっちにしろレスで説明できるほど薄い内容じゃない。 本当に分からない部分、極一部まで絞って質問してみれ。 今度1から分からないとかぬかすようなら完全無視。
986 :
デフォルトの名無しさん :05/02/17 19:39:42
誰か海外の端末のNokiaに詳しい方教えてください。Nokia7210で サウンドを流そうとすると曲の最後まで再生されずに曲が途切れ てしまいます。サウンドのデータ容量が関係してるみたいですが、 詳しい原因を知りたいので、詳しい方教えてください
989 :
デフォルトの名無しさん :05/02/17 21:05:36
んー、ボーダフォンの開発ガイドを見てどうすればいいのだろ う・・・。Nokiaのエミュレーターだと音は鳴るんですよねー。 実機で再生するとうまくいかないわけで。。。別のNokiaの端末 では同じ音でも再生されるわけで。。。誰か原因教えて
誰か教えてあげて。 こんな話題で次スレが始まると悲しいので。
次スレは(汗)? それと質問。 auのQcelpを使って人の声を出すときに、どこかで自分の欲しい声を作ってくれるフリーソフトが有ったと思うんだが知ってる方はいらっしゃいませんか? もしかしたらSMAFだったかも。 探しているのだが見つからない。
993 :
デフォルトの名無しさん :05/02/18 13:06:51
yasuさんとこのレースゲーム、逆コンパイルしてー
勉強にとauのシューティングゲームを逆コンして見ているのですが、 当たり判定はどのように書かれてますか?他のはわかるのですが、当たり判定が全然わかりません!
勉強の仕方が根本的にずれてんだろ どの道スレ違いだ
こ の ス レ は 何 を す る ス レ で す か ?
eclipseでプリプロセッサ使ってるひといる?
にゃんにゃん!!!!!!
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。