1 名前:デフォルトの名無しさん mailto:sage [04/08/06 22:21] J2ME CLDC+MIDPベースの携帯電話用Java(主にEZアプリ、Vアプリ)に関するスレッドです。 質問でも議論でも何でもこい、と。 前スレ: CLDC+MIDP+携帯電話用Javaスレッド part 2 pc5.2ch.net/test/read.cgi/tech/1070858996/ 過去スレ 携帯JAVAのスレッド pc2.2ch.net/test/read.cgi/tech/1011977260/ (DAT落ち) -- Java一般に関しては: 【初心者】Java質問・相談スレ51【大歓迎】 pc5.2ch.net/test/read.cgi/tech/1091770298/ NTT DoCoMoのiモード携帯電話用Java(iアプリ)については: iモード携帯電話用Java(iアプリ) Part 6 pc5.2ch.net/test/read.cgi/tech/1091286071/ >>2-5 あたりにリンク集
522 名前:517 mailto:sage [04/10/23 13:56:44] >>520 KToolbar 使ってるので、問題ないです。
523 名前:504 mailto:sage [04/10/23 14:44:05] >>516 >>518 イースで使われているjarを解凍しようとしてみるとエラーが出て無理でした。 どうやらバイナリレベルで繋げて、自前で解凍してるみたいですね urlの部分をjar://file://mcとしてみましたがこれも駄目のようです。 開発ガイド9にdeflate圧縮データの復元とゆうものがあったのですが全体を展開するみたいなので使えない…。 そこで、バイナリレベルで繋げて自前で解凍する方法を使ってみようと思うのですが どのように一つのバイナリにすればいいのやら… 解凍の部分はプログラムにxからyバイトまでが〜.pngとゆうファイルで…と記載されてるのでしょうか
524 名前:デフォルトの名無しさん mailto:sage [04/10/23 18:02:11] >>523 順に読み込むだけなら、 ファイル数 ファイルサイズ1 ファイル1 ファイルサイズ2 ファイル2 ファイルサイズ3 ファイル3 ・・・ でいいんじゃね?
525 名前:デフォルトの名無しさん mailto:sage [04/10/23 19:09:32] >どのように一つのバイナリにすればいいのやら… 「結合」とかで検索!
526 名前:デフォルトの名無しさん mailto:sage [04/10/23 19:28:39] てゆーか…… 画像は適宜結合してなるたけファイル数を減らして、 jarのファイルエントリを縮めるのは定石だと思ってたんだが 世間一般ではそういうことしないのか?orz
527 名前:504 mailto:sage [04/10/23 19:32:04] >>525 VBやら関係無いの多いので時間掛かりそうですが探してみます
528 名前:デフォルトの名無しさん mailto:sage [04/10/23 19:32:15] >>523 各ファイルを読み込んで、それをObjectOutputではき出して、プログラム内で連結して、ファイルに出力して、jそれをar拡張子にしちゃえば? そんな単純な話じゃないか・・・
529 名前:デフォルトの名無しさん mailto:sage [04/10/23 19:36:55] ここにある波紋アプレット hp.vector.co.jp/authors/VA012735/applet/dropcol.htm とてもきれいなんだけど、これを携帯に移植できるかな? 画像のピクセルを編集できないといけないみたいだけど。
530 名前:デフォルトの名無しさん mailto:sage [04/10/23 20:01:37] 携帯で、ピクセル扱うと遅いよー
531 名前:デフォルトの名無しさん [04/10/23 22:33:34] 質問です 文字列比較でequalsIgnoreCaseを使いたいのですがコンパイルしたときにエラーが出て困っています。 ソースはこんな感じになってます String[] str= new String[5]; str[0]= "abc"; if(str[0].equalsIgnoreCase("abC")){}
532 名前:デフォルトの名無しさん mailto:sage [04/10/24 01:06:35] >>529 秒間1フレームとかになるかもしれん。
533 名前:デフォルトの名無しさん mailto:sage [04/10/24 01:31:53] >>531 CLDC+MIDPにString#equalsIgnoreCaseはないけど。 toLowerCase/toUpperCaseはあるからそんなに苦労はしないと思うけど。
534 名前:デフォルトの名無しさん mailto:sage [04/10/24 01:45:46] >>526 日曜プログラマなのでそんな面倒なことはしません。 ユーザのパケ代に響いてもシラネ。 >>523 tarなんかの非圧縮でファイルを固める仕様が参考になるんじゃないかな。 で、こんな話がありますが、関係するのはJBlendの中の人だけってことでいいんですよね? ITmediaモバイル:J2MEに脆弱性。携帯電話のJavaアプリに影響 www.itmedia.co.jp/mobile/articles/0410/23/news013.html
535 名前:デフォルトの名無しさん mailto:sage [04/10/24 01:47:39] >>533 自力でequalsIgnoreCaseクラス作ってしまいました…。
536 名前:デフォルトの名無しさん mailto:sage [04/10/24 02:22:02] 実機だとfillRect()がズレるって聞いたんだがずれてる?
537 名前:デフォルトの名無しさん mailto:sage [04/10/24 03:08:12] >>534 Nokia DCT4はjblendなのか?? secunia.com/advisories/12945/ アプリ起動直前にバイトコード検証が行われるんだけど、そこに脆弱性があって ネイティブのコードが実行される恐れがあるとか
538 名前:デフォルトの名無しさん mailto:sage [04/10/24 04:30:23] >>536 そんなこと言ってるのは大方drawRect()と比べて幅と高さが1ドットずれるー とか、リファレンス読み違えて勘違いしてる人なんじゃない?
539 名前:デフォルトの名無しさん mailto:sage [04/10/24 11:03:26] その脆弱性を突けば、もっと高度なJavaアプリが・・・
540 名前:デフォルトの名無しさん mailto:sage [04/10/24 12:46:06] >>539 可能かも? だが、棒打のアプリは公開する時に解析されるから公開は無理
541 名前:デフォルトの名無しさん mailto:sage [04/10/24 13:14:36] >Nokia DCT4はjblendなのか?? JBlendもSunのリファレンス元に作成されているから同じ脆弱性が発生している。 Nokiaで同じ問題が出ている理由は、元が同じだから。
542 名前:デフォルトの名無しさん mailto:sage [04/10/24 13:21:34] 複数のtxetをres内から配列にして読み込むには、どのように すれば良いのですか? 調べても1つしか読み込む方法が見つからないので、分かる方 ご教授お願いします。
543 名前:デフォルトの名無しさん mailto:sage [04/10/24 21:05:55] >>542 自前でなんとかするしかないんじゃないかな? \n区切りでString配列を返す関数とか作って。
544 名前:デフォルトの名無しさん mailto:sage [04/10/24 21:59:30] > JBlendもSunのリファレンス元に作成されているから同じ脆弱性が発生している。 なるほど。つーかずいぶん詳しいな > Nokiaで同じ問題が出ている理由は、元が同じだから。 って事は、JBlendでは既に知られている脆弱性だったって事か?
545 名前:デフォルトの名無しさん [04/10/24 22:49:17] iアプリにあるホワイトアウト処理みたいなのを使いたいんだけど、 JSCLには無いようなので他の方法で同じ処理をしようと思うのですがどのような処理をすればいいのでしょうか…
546 名前:デフォルトの名無しさん mailto:sage [04/10/25 00:02:31] iアプリの場合、2Dの半透明描画は機種依存 機種によってはホワイトアウトにならないヤカン
547 名前:デフォルトの名無しさん mailto:sage [04/10/25 00:08:42] >>545 com.j_phone.util.ImageUtil#createMaskedImage使えば、 マスクパターンの細かさを段階的に変えていって疑似半透過できるかも。 まぁP6以降だが。 GraphicsUtil#setPixelでピクセル単位でいじればもっと柔軟に対応できるが、 たぶん >530
548 名前:デフォルトの名無しさん mailto:sage [04/10/25 00:23:32] P6以降ですか…。 範囲を指定して色を足していくような処理も重いですか? 例えるとx1,y1からx50,y50までの範囲の色にピクセルごとにr,b,g+100足して表示するとか…。 そんな処理がしたいのですが…
549 名前:デフォルトの名無しさん mailto:sage [04/10/25 01:35:25] >>546 505以降なら、MascotCapsuleを使えば全機種いける。
550 名前:523 mailto:sage [04/10/25 02:19:06] deflate圧縮データの復元ってのがあるみたいなんですけどこれって圧縮データ全てを展開するってことですか? そもそもdeflate圧縮ってzipの圧縮方法であってますよね? これ使って指定したファイルだけ取り出す方法あれば嬉しいのだけど。
551 名前:デフォルトの名無しさん mailto:sage [04/10/25 03:45:23] >>542 Vectorクラスに順次放り込んで最後にString配列へcopyInto()して終わり
552 名前:デフォルトの名無しさん mailto:sage [04/10/25 05:22:46] >範囲を指定して色を足していくような処理も重いですか? 範囲が凄く小さいなら大丈夫 >>549 プリミティブ描画で簡単に出来ますな 加算、減算、平均?の3通りしかないけど、ホワイトアウト程度の単純な処理なら問題なし >>530 機種によっては、drawImageには対応してるけどfillRectには非対応だったり 使い物になりませんw
553 名前:デフォルトの名無しさん mailto:sage [04/10/25 10:00:10] 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(); }
555 名前:504 mailto:sage [04/10/25 17:52:45] >>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で作成したファイル中の目的のファイルを指定出来ると思ってるんだけど妄想?それとも出来ます? エミュレータでファイルを一まとめにしたの作って、実機でファイルを取り出して使うような使い方がしたいんだけども…不可能かな
556 名前:デフォルトの名無しさん mailto:sage [04/10/25 18:56:53] >>553 JavaのサブセットはJ2ME。主にCLDC、MIDP1.0のリファレンスを参照のこと。 携帯アプリ向けJavaは浮動小数をサポートしてないとか 例えばStringクラスなどでも使えるメソッドが限られているとか 基本的なところが理解できるはず。
557 名前:デフォルトの名無しさん mailto:sage [04/10/25 19:58:10] >>556 ありがとうございます!CLDCに載ってました! 私が読んでいたのはMIDPの方でした・・・。 なるほど、浮動小数をサポートしていないということですか
558 名前:デフォルトの名無しさん [04/10/25 22:13:09] canvasにしているクラス外からrepaint()を使いたいのだがコンパイラがstaticじゃないと吐く public static int paint(Graphics g)にしたら今度は このstaticメソッドはCanvasからのインスタンス・メソッドを〜 とか出る ようするにcanvasクラス外からrepaint()使うのは無理ってこと?
559 名前:デフォルトの名無しさん mailto:sage [04/10/25 22:26:11] >558 Canvasのサブクラスにrepaint()呼ぶだけのpublicメソッド定義すればいいじゃん。
560 名前:デフォルトの名無しさん mailto:sage [04/10/25 22:30:41] そんな手があったか…半日悩んだのが馬鹿みたいだ 俺の中では559、あんた天才
561 名前:デフォルトの名無しさん mailto:sage [04/10/25 22:53:44] で、Canvasのサブクラスにrepaint()呼ぶだけのpublicメソッド定義は出来たんだけど 別のクラスから呼び出すとエラーでる Canvasのソースは public String repaint2() { repaint(); return null; } 呼び出してるところのは myCanvas.repaint2(); エラーは 型canvasからのメソッドrepaint2()はstaticではありません。 repaint2をstaticにしてみるとCanvas側でエラー。 なんとかしてくれ…。
562 名前:デフォルトの名無しさん mailto:sage [04/10/25 23:13:44] >561 えーと。 その「別のクラス」に、Canvasのサブクラスを参照するフィールドを作って、 Canvasのサブクラスのインスタンス生成したときにそれをフィールドにセットして 後はそのフィールドのインスタンスのrepaint2()を呼べばいい(はずなんだ)が。 (このときrepaint2()はstaticにしちゃいかんですよ) しかし、Javaの基本をもう一度おさらいした方がいいかも……
563 名前:デフォルトの名無しさん mailto:sage [04/10/25 23:56:14] フィールド作って〜やればいけた >>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(); ... } ...略
565 名前:デフォルトの名無しさん mailto:sage [04/10/26 21:25:51] >564 えーと……やっぱし、Javaの基本、クラスとは何でメソッドとはどういうもので、とかを もう一辺やり直した方がいいと思う。 例えばメソッドがstaticってのはどういう意味なのか、何故staticなメソッドから そうでないメソッドが呼べないのか、全然分かってないのでは。 とりあえず、 ・cvs#run()でshori.exet()を呼んでるが、それなら単に cvs#run()でrepaint()を呼べば済む話では? ・shori.exet()でcvsの新しいインスタンスを作っているが、 それがmscのコンストラクタで生成したcvsのインスタンスと * 全く関係のない、縁もゆかりもない別物 *だということは分かってる?
566 名前:デフォルトの名無しさん mailto:sage [04/10/26 21:32:24] /*shori*/んとこのcv=new cvs();無しにしればいけるのでは??
567 名前:デフォルトの名無しさん mailto:sage [04/10/26 21:34:26] 連投ごめ、多分だけどprivate static cvs cv;てしてるとこのprivateも要らないと思う それで一回やってみそ
568 名前:デフォルトの名無しさん mailto:sage [04/10/26 21:40:31] >>564 オレも、クラスとインスタンスとstaticについて理解し直すとこからやり直した方がいいと思う。 Javaの基本というか、オブジェクト指向の基本だし。 その調子だと、privateとpublicの違いについても怪しいな。
569 名前:デフォルトの名無しさん mailto:sage [04/10/26 21:48:36] >>565 ごめん 学校で習った程度だから漏れの知識ショボイ クラスとは何でとかも習ったけど小学生相手にリンゴが一個あって〜とかと同じレベル >>566-567 言ってる部分を消してみるとエラーでエミュが落ちることは無くなった けどが描画されない・・・
570 名前:564 mailto:sage [04/10/26 22:13:52] >>568 装飾子の違いは分かってる…と思う privateとpublicの違いは確か、同クラス内と制限無しだったような staticは共有メモリ領域を利用するんだっけ…
571 名前:デフォルトの名無しさん mailto:sage [04/10/26 23:40:28] auのPhase3.0エミュを使って通信でtxtファイルを取得しようとすると403が帰ってきます。 実機では問題ありません。サーバー側のログを見ると 実機では con = (HttpConnection)Connector.open("aaa.jp/ "+net); のうちのnetの部分だけをGETしているのに対し、エミュレータからだと http://から取得しようとしている、という違いがあります。 エミュレータがわの設定の問題なのか、サーバーの設定なのか通信関係の知識がないためにわかりません。 一応403の意味はググってしらべました。 それからサーバーは自宅サーバー(win)です。
572 名前:デフォルトの名無しさん mailto:sage [04/10/27 01:10:00] >>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 報告乙。え?質問なの?
573 名前:デフォルトの名無しさん mailto:sage [04/10/27 16:15:08] >>571 403の意味より…
574 名前:564 mailto:sage [04/10/27 17:29:35] さっき買ってきた本見ながら572さんの言ってるのを色々試してみるといけました。 コンパイラでエラー出ないし実行も問題ないんだけど /*cvs*/の所でshori2(shoriとはベツ)のメソッド使用すると 型shori2からのstaticメソッドmethod(String)にはstaticにアクセスして下さい と警告が出る shori2.method(String)からstaticを取ると警告は出なくなるけど、shoriがエラー。 実行出来てるし問題はないと思うんだけどかなり気になるのでたいさくあれば教えて下さい
575 名前:デフォルトの名無しさん mailto:sage [04/10/27 18:02:24] >574 もう分かったから晒せる範囲でソース*全部*晒せ。 いつの間にか最初は影も形もなかったshori2が出てきてるじゃないか。 この分だと「実は……」でshori3、shori4が出てきそうで付き合い切れん。 (まぁ、携帯相手に6個もクラス作ってる余裕は普通ないはずだが それを言ったら、そもそもクラスは2つまで!!が定石なはずだし)
576 名前:564 mailto:sage [04/10/27 18:49:39] >>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);
577 名前:デフォルトの名無しさん mailto:sage [04/10/27 19:48:54] >576 ……対策はただ一つ。 藻前さんがもう一度Javaの入門書をきっちり読んで理解すること。 それが嫌なら、警告が出続ける事実を甘んじて受け入れろ。 ちなみに「なぜか知らないけど付けたor取ったら動くようになった」って理由で メソッドにstatic付けたり取ったりしてるようでは「入門レベルなら理解してる」 とは言えない。
578 名前:デフォルトの名無しさん mailto:sage [04/10/27 22:52:14] 対策:Java言語の入門書(携帯アプリの本じゃないぞ)でしっかり勉強する 近道は無いよ ---------------------------- 次の方ドーゾ
579 名前:デフォルトの名無しさん [04/10/28 00:23:25] なんかオートバックスにVodafone用GPSが売ってて、専用Vアプリを使えばカーナビになるって事なんだが。。。GPSとVアプリとの通信方法って公開されてるかどうか、誰かしらない?
580 名前:デフォルトの名無しさん mailto:sage [04/10/28 01:32:40] >>579 シリアル制御してんじゃないの? その手の話はほとんど知らんのであくまで憶測だが。
581 名前:デフォルトの名無しさん mailto:sage [04/10/28 01:41:24] >>579 ttp://developers.vodafone.jp/dp/tool_dl/java/tech.php それっぽいのあるけど、pdfの中までみるのはめんどい。
582 名前:デフォルトの名無しさん [04/10/29 21:31:30] Vアプリの質問はここでいいのか分からないのですが質問です while(true)でループ中にユーザーがソフトキーを押すと ユーザーからの操作を受け付ける画面を出し、初めの画面に戻ってしまわないように while(true)で操作があるまでループし続けるようにしているのですが、 両方で交互にrepaintが実行されて画面がチカチカと元の画面になったりユーザーから操作を待つ画面になったりします そして少し時間が経つと元の画面に戻ります 戻ってきたところまではいいのですがそのまま固まってしまいどの操作も受け付けなくなってしまいます。 使用エミュレータはP6です Threadを使用したプログラムでソフトキーを押した場合の処理はcommandAction内に書いてます。 どなたか解決策ご存知の方居ましたらご回答宜しくお願いします
583 名前:デフォルトの名無しさん mailto:sage [04/10/29 21:42:47] 書き忘れていました 呼び出し元のwhile文の中にソフトキーが押された時にだけThread.yield()を実行するようにして ソフトキーを押した時に実行されるwhile文をfor文に変えてg.drawString("i="+i,0,0,Graphics.LEFT|Graphics.TOP) としてみたのですがiの数値は増えて表示されるもののどの操作も受け付けませんでした
584 名前:デフォルトの名無しさん mailto:sage [04/10/29 22:10:23] >両方で交互にrepaintが実行されて 「されて」じゃなくて、そうなるようにプログラムを組んでるんだよ そうならないようにプログラムを書けば解決 あと、Thread.yield()の意味を勘違いしてるヤカン
585 名前:デフォルトの名無しさん mailto:sage [04/10/29 22:38:41] repaintが交互に実行されないように、 ソフトキーを押した時の画面が出ている状態では元の画面でrepaintされないようにしてソフトキーの画面のみrepaintするようにしてみました がチカチカと元の画面に戻ったりソフトキーを押した時の画面になったりします。 Thread.yield()の使い方間違えていたみたいなので消しました。 すみません
586 名前:デフォルトの名無しさん mailto:sage [04/10/30 02:32:00] なんか、とてつもないわけわからん構造になってる予感。 Canvasはデフォでダブルバッファリングされてるから、 repaintが非同期に呼ばれるだけではちらつくことはあり得んと思うんだが。 情報が小出しなんであくまで想像だが、 SpriteCanvasによる画面への転送は、 たとえSpriteCanvasがDisplayableに設定されてないときにも行えるから、 SpriteCanvasの描画と「ユーザーからの操作を受け付ける画面」の描画が 交互に行われてちらついているんじゃないかな。
587 名前:デフォルトの名無しさん mailto:sage [04/10/30 14:47:33] まだ初心者で漏れもよく分からんが、setCurrentで切り替えが一番いいんでないか?
588 名前:デフォルトの名無しさん mailto:sage [04/10/30 16:12:13] 582です 587さんの言っているsetCurrentで ソフトキーを押した時に画面を切り替えることは出来ましたが 呼び出し先で操作を受け付ける画面を描画しても、コンパイラでは問題無しなのですがエミュだとまったく描画されませんでした。 そこで呼び出し先のクラスのextends Formを消してみるとコンパイルエラーになってしまいます。。
589 名前:572 mailto:sage [04/10/30 16:42:49] >>588 せやから急に「extends Formを」とか出すな。消したら〜とかまるで分かってない証拠。 564にも言ったけどインスタンスの関係をハッキリさせて。 どうせソフトキー押した時とかの処理がキッチリできてないから 「元の画面でrepaintされないように」が裏目に出て再描画されてないんじゃない? とりあえずボタン押しで確実に処理がされているかどうか分からないなら 一行ずつSystem.out.println挟んでどの行まで実行されてるか確認してみたら? 確実に再描画の行が実行されているはずなのに画面変わらないとかはその後。 素早く確実で楽に解決したいならソース丸ごとあげてくれ。
590 名前:588 mailto:sage [04/10/30 20:28:09] >>572 過去に画面切り替えの質問があったので、 工夫すればもしかしたら動くかもしれないと思いやってみたのがFormです コンパイラのエラー出さなくなりましたが目的の動作はしませんでした。 int flag=0;としておいて、 ソフトキー押した時にflag=1;にして 初め表示している画面でif(flag=0) repaint();などしてみたのですが効果ありませんでした。 どのような動作にすればいいのかよく分からなくなってきたので 一旦コンパイラがエラー出さなくなった状態に戻してソースをzipであげておきました ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=130 素早くなくてもいいんですけど 確実に解決したいのでよろしければ適当に修正してもらえれば幸いです
591 名前:デフォルトの名無しさん mailto:sage [04/10/30 21:40:26] >>582 564と同一人物かよ!って別にそれはいいんだけど、 これがどうなるといいんだっけ?普通に画面の切り替えは問題なさそうだけど。 むしろやろうとしてる事がわかるならエラー有るままのほうがやりやすかったかも。
592 名前:デフォルトの名無しさん mailto:sage [04/10/30 22:58:44] 対策:Java言語の入門書(携帯アプリの本じゃないぞ)でしっかり勉強する 近道は無いよ ---------------------------- 次の方ドーゾ
593 名前:デフォルトの名無しさん mailto:sage [04/10/30 23:51:28] 同一人物じゃないと思うが…。 >>590 あんま分からんケド一応見てみたが 試しに動かしたらcommand_actionのコンストラクタで呼び出してるmenu ()が実行されてない cmdMenu押した時のdisplay.setCurrent(command_action);の行をcommand_action.menu();に変えると画面がチカチカした感じになる 590の言ってるのはこれじゃないかと思った このチカチカするのをなくしたいと。 質問の意味勝手に妄想したケド合ってる? まあ合ってた所でどうすればいいか俺にはわかんね
594 名前:586 mailto:sage [04/10/31 00:18:23] >>590 ソース見させてもらったが・・・愕然とした。 こりゃ、アドバイスで何とかなる範囲じゃないと思う。 現在画面に設定されているのはどのDisplayableなのか、 今生きているThreadはどれなのか、 どのThreadがどの処理を行っているのか・行うべきなのか、 このへんを意識しないととんでもないものができあがるぞ。 つーことで、>592 に同意。 Javaの書き方というよりかは、JavaAppletなどのイベント指向を理解した方がいいと思う。 とりあえず動くだけでいいなら・・・とかアドバイスしようと思ったけど、 こんなもんをリリースされちゃかなわん。。 コンストラクタ処理をwhile(true)でブロックしたり(sleep()時に例外出てる模様)、 無駄にcvs(=Canvas)をThreadとして走らせたりしてるし、 Formを画面表示してるのに文字を(Currentな画面でない)cvsに書いてるし。
595 名前:572=591 mailto:sage [04/10/31 00:33:40] >>593 同一だと思ったのはCanvasにcvsなんて名前つけてた部分だけど、間違ってたらスマソ。 確かにそうすりゃチカチカするね。 つーか、 冷静にソース見たらmenuでwhileループがマズイ。 メインのスレッドがmenuをずっと続けるのでcommandActionとかをやるスレッドが無い。 new Thread した奴はせっせとrunメソッドでループを続けてるだけ。 つまり2本のスレッドがwhileループに入ったままになる訳だ。 最初に「時間が経つと元に」ってのは、あんまりループ続くからフリーズとかだと。 って書いてる途中に594に先越されてしまったけど、確かに勉強は要る。 勉強したくないならあんまりややこしいことに挑戦しないってのも手かも知れんけど。
596 名前:593 mailto:sage [04/10/31 01:34:02] ま、理解しろとか言っても普通分からん。 事実漏れは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エラー出てないから問題はないと思うが誰か見てくれ あと画面が白くなるのなんとか出来る人修正きぼん
597 名前:593 mailto:sage [04/10/31 01:58:04] あ、だめだ これだとcvsから別クラスのメソッド呼んで実行してる時にmenu押しても両方でrepaint呼ばれちゃうよ 勝手に別クラスって妄想入れたけどあってたりするかな 回避方法ワカンネので誰か分かる人よろ 別クラスとか言ってるけど何も知らない人が勝手に妄想した単語並べてるだけなんで適当に解釈してやって下さい
598 名前:572 mailto:sage [04/10/31 03:13:56] じゃあ僕もアップしてみよ。 ttp://sterdust.net/upload/upload.cgi?page=Download&dir=&sort=date&filename=souce572.lzh 変更箇所には//572と記述 僕の経験上スレッドでループさせたりさせなかったりはフラグを使うのが普通。 canvasとcommandでisRunningフラグ作って、画面切り替えタイミングでフラグ変更。 あとstartAppでやる事消したのと、yieldさせてないのと。この辺は好みかも。 切り替わる時白くなるのは仕方ないと思う。EZエミュでは起こらなかったけど。 どちらの状態でもGraphicsに描画するなら描画は一つのCanvasに任せて 2つ以上のクラスでoffImgの内容を変えるだけにしてsetCurrentを避けると吉。 ttp://sterdust.net/upload/upload.cgi?page=Download&dir=&sort=date&filename=souce572_2.lzh で、やってみたのが上。もう修正するなんてものじゃなくなってるけど。
599 名前:デフォルトの名無しさん [04/10/31 05:15:07] どなたかphase 3 エミュレータをアップしていただけないでしょうか?
600 名前:デフォルトの名無しさん [04/10/31 15:00:50] プログラムからそれが走っている端末のバージョンを Phase3 or Notだけでいいので知るほうほうってないですか?
601 名前:588 mailto:sage [04/11/01 00:28:57] >>593 さん、>>572 さん あげて頂いたソースを参考にこちらのアプリに組み込んでみたところ、思い通りの動作をさせることが出来ました。 画面が切り替わるときに白くなるのはこちらのエミュレータでは起こりませんでした。 返事が遅くなってしまいましたがありがとうございました
602 名前:593 mailto:sage [04/11/01 21:53:22] ちょっと質問。 ソフトキーが押されると、 今やってる処理を強制終了(?)させて処理させるところを移動させたいのだけど、 どうすればいいかな? 多重ネストからの脱出ってのは見つけたけど、 これだとbreak文とラベルの記載してる場所が違うと動かないぽい気がするので・・・。 実験もせず書いてるので「出来るに決まってるヴォケ」とか「こんな方法がある」とか、 あと「あんたの説明意味不明」とかでもいいので適当に突っ込んでください
603 名前:593 mailto:sage [04/11/01 21:59:21] ごめん書き忘れ ソフトキー押した時にフラグ立てて、 強制終了(?)させたい所にifでフラグ立ってたらbreakするとかだと場所が多くて、 今どこの処理やってるのか分からないから記載個所が多すぎて対処しきれない。 main(){ while(true){ //ここ for(...){} ... この後もfor文やらwhile文がずらずら。 ... } } commandAction(...){ if(c==softkey){}//←ソフトキーが押された時に上の「ここ」ってとこに処理を移したい } かなり意味不明な書き方になってるけどこっちの文章力が無いから勘弁 とりあえず、「ここ」って所にソフトキーを押した時に移動したいわけ。
604 名前:デフォルトの名無しさん mailto:sage [04/11/02 05:02:49] >>602-603 キミも>>578 >>592 かな…
605 名前:デフォルトの名無しさん mailto:sage [04/11/02 06:55:19] 答:無理
606 名前:デフォルトの名無しさん mailto:sage [04/11/02 07:03:33] ん?オレは例外投げて対処させたが。 まぁいわゆるgotoがあるプログラムは構造がダメだという例に当てはまるからイクナイと思う。
607 名前:デフォルトの名無しさん mailto:sage [04/11/02 07:13:33] 処理をどうする以前に、設計がまずいんじゃ
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サイズを表示させることはできないのでしょうか?
610 名前:デフォルトの名無しさん mailto:sage [04/11/02 18:19:40] 32bitビットマップ形式の保存ファイルは存在しねーぞ。 PCの液晶でも24bitカラーなのに、携帯で32bitなんてあえりえねーだろ。 つーか普通16bitだし。 VRAMの制限でねーの?
611 名前:デフォルトの名無しさん mailto:sage [04/11/02 18:20:07] うあ、激しく誤爆
612 名前:602-603 mailto:sage [04/11/02 19:39:30] >>606 それでいけそうな気がしてきた >>607 設計なんて何も考えてない
613 名前:デフォルトの名無しさん mailto:sage [04/11/02 22:09:18] >609 Phase3.0対応エミュが必要。 Phase3.0対応アプリを開発する必要があるなら、 どっかからか入手できるはず。健闘を祈る。
614 名前:デフォルトの名無しさん [04/11/03 03:18:42] Vアプリを配信するのに、ベクターからやろうと思うんだけど、 ConnectorのAPIの代わりに、ベクターで配っているJConnectorを 使用しないといけないんだけど、何度やってもclassファイルが壊れている って、wiressToolでコンパイルする度言われる。。。。 だれか、経験者いない?
615 名前:デフォルトの名無しさん mailto:sage [04/11/05 02:24:55] EZアプリでget(Calendar.WEEK_OF_MONTH)を使おうとすると WEEK_OF_MONTHが解決できませんと出ます。 月の何週目かを取得することはできないのでしょうか?
616 名前:デフォルトの名無しさん mailto:sage [04/11/05 03:20:33] CLDC1.0のCalendarにWEEK_OF_MONTHはない。 複雑な式にもならんから自力で計算すれ。
617 名前:デフォルトの名無しさん mailto:sage [04/11/07 23:56:41] iアプリの場合、通信できるのはダウンロードしたときのサーバに限定されてるけど、 Vアプリ、ezアプリの場合ってどうなってるの??
618 名前:デフォルトの名無しさん mailto:sage [04/11/08 01:56:58] >>617 ez -- あらかじめjadに記載したサイトのみ V ---オフィシャル登録必要、端末内リソース利用と併用しちゃいけない。
619 名前:デフォルトの名無しさん mailto:sage [04/11/08 02:47:58] >>618 おお、サンクス オフィシャル登録って有料なんだねorz
620 名前:デフォルトの名無しさん mailto:sage [04/11/09 06:44:33] (´,_ゝ`)プッこのスレで質問するレベルじゃないわな
621 名前:デフォルトの名無しさん mailto:sage [04/11/13 17:48:16] 質問します。どなたか分かる方、ご教授よろしくお願いします。 Vodafoneの携帯用のアプリを作っているんですが、 「import javax.microedition.lcdui.Canvas;」または 「import javax.microedition.lcdui.*;」を記述しても、 その他いろいろimportしても、 「getGraphics()」メソッドが使えません。コンパイルエラーが出てしまいます。 「paint()」メソッドとかは現時点のプログラムで使えているんですが。。。 「javax.microedition.lcdui.Canvas」の中には、「getGraphics()」メソッドは 存在していないのでしょうか? そもそもgetGraphics()を使おうと思ったのは、paint()メソッド内や、 paint()メソッド内から呼び出すメソッド以外でdrawString()などを使いたかったんですが、 それをする場合、getGraphics()を使う以外に方法はあるのでしょうか?
622 名前:デフォルトの名無しさん mailto:sage [04/11/13 18:29:57] まず>>2 を見て最低限リファレンスを読むくらいはしろ。 質問はそれからだ。