こんにちは。
私は現在、大学の卒業制作でiアプリを作っています。
問題が発生したので、どなたかご指導をお願いいたします。
i-appli Development Kitで、
--- ADFチェック 開始 ---
--- ADFチェック 終了 ---
--- ADF/トラステッド動作設定チェック 開始 ---
--- ADF/トラステッド動作設定チェック 終了 ---
と、正常にビルドされたにも関わらず、起動ボタンを押すと、
Main :java.lang.NullPointerException MainPage4
java.lang.NullPointerException
at com.nttdocomo.ui.Panel.add(+17)
at MainPage4.start(+7980)
com.nttdocomo.ui.Panel
というメッセージが表示され、エミュレータに何も映りません…。ちなみにMainPage4はプロジェクトのタイトルです。
なぜなのでしょうか?初心者ですので、どなたか分かりやすく教えてくださるとうれしいです!よろしくお願いします!
No.4ベストアンサー
- 回答日時:
まず、スクラッチパッドの容量の限界は引き伸ばしても10kbまでです。
サイズがオーバーしてないか確認しましょう。
次に構造の問題なのですが、GUIは基本的に階層構造になってます。
なので、ただMainPage4のstartメソッドで
Panel p=new Panel();
とした場合では、MainPage4とPanel間にデータの受け渡しが一切ないため階層関係はできません。
MainPage4
|---------Panel←ここを参照したい
しかし、現状では
MainPage4
|---------Panel
Panel←ここに新しいオブジェクトを作って参照している
この問題の解決策としてPanelクラスにMainPage4クラスのデータを渡しましょう。
オブジェクト指向でいうところの"継承"を明示的にやっていることになります。
MainPage4クラス
public class MainPage4 extends IApplication implements ComponentListener{
Panel1 p1;
public void start(){
//thisはMainPage4のデータ
p1=new Panel1(this);
}
}
Panel1クラス
public class Panel1 extends Panel{
MainPage4 mp4;
public Panel1(MainPage4 mp4){
this.mp4=mp4;
}
}
これでMainPage4がPanel1を持っている状態になります。(いわゆる、Has-is関係)
そして、パネルの遷移ですがGUIの構造としては、MainPage4はパネルの遷移をするだけのクラスになります。
通常のJavaのメインクラスもクラスの呼び出しとかだけで実際に処理は行ってないですよね?
そこでmainPage4で用意すべき変数とメソッドは以下のものとなります。
・指定したパネルに切り替えるためのフラグ(boolean)
・他のクラスからフラグを切り替えるためのセッターメソッド
・フラグがtrueならパネル切り替えを行うメソッド
private boolean changeP1=true,changeP2,...changeP15;
Panel1 p1;
.
.
Panel15 p15;
public void start(){
//パネル遷移しても状態を維持したいのならここで
//パネル遷移後に遷移したパネルを初期化したい場合はchangePanel内で
p1=new Panel1(this);
.
.
p15=new Panel15(this);
change();
}
public void change(){
if(changeP1==true){
//ここでfalseにしないと無限ループ
changePanel1(false);
//Panel1を画面に表示
Display.setCurrent(p1);
}
.
.
}
//外部からフラグを設定するためのセッターメソッド
public void changePanel1(boolean changeP1){
this.changeP1=changeP1;
}
外部クラスからPanel1に遷移をするさいは
mp4.changePanel1(true);
mp4.change();
理解しづらい点、不足な点などございましたら、返信ください。
>>zozyさん
わかりやすく教えてくださり、ありがとうございます!
SPsizeを10000に設定したら、正常に画面が映りました☆
でも、不思議なことに、映らなかったときのプロジェクトのSPsizeを10000にいきなりあげても正常に起動されなかったんですけど、だんだんScratchPadを増やし、それに伴って徐々にSPsizeを引き上げていったら成功しました。プロジェクトの中身は全く変わらないのに、手順が違うと上手く動かないのかなと思いました。でも、解決したので良かったです♪これで、先に進めます!
ただ、新たな問題が浮上したので、よろしければ、また教えて頂けるとうれしいです!何度も申し訳ありません…。
ScratchPadを使用する際、TextBoxからLabelに文字に移すのは
String SaveText = TextBox.getText();
のような形でできるのですが、
ListBoxから、選択された項目をLabelに移すにはどうしたら良いのでしょうか?一応、ListBox.CHOICEを使っています。
一度、
String SaveText = ListBox.getText();
としたら、エラーになりました。ちなみに、変数は実際のものと異なりますので、変えて答えていただいて大丈夫です!
ご存じでしたら、またお願いいたします!
No.6
- 回答日時:
DojaのAPIをよく確認しましょう↓
http://www.tomicom.ac.jp/~koba/doja5/jguidefordo …
com.nttdocomo.ui.ListBoxにふさわしいAPIがあると思います。
No.5
- 回答日時:
おなじようなerrorのでるソースファイル書いてみました。
import com.nttdocomo.ui.*;
public class MainPage4 extends IApplication {
Label label;
public void start() {
Panel panel=new Panel();
panel.add(label);
Display.setCurrent(panel);
}
}
このソースで出たエラーは
Main :java.lang.NullPointerException MainPage4
java.lang.NullPointerException
at com.nttdocomo.ui.Panel.add(+17)
at MainPage4.start(+15)
com.nttdocomo.ui.Panel
です。
これは、Labelが初期化されてないせいですがーー
なにかコンポーネントの初期化をわすれてません。なお、このソースは
public class MainPage4 extends IApplication {
Label label=new Label("AAAA");
public void start() {
Panel panel=new Panel();
panel.add(label);
Display.setCurrent(panel);
}
}
となおしたら、正常に起動しました、
No.3
- 回答日時:
+7980 が「7980バイト目」という可能性ってありませんか? まあ, それがわかってどうなるものでもないような気はしますが.
というか, 「卒業制作」というなら大学の教員に聞けばいいのでは?
No.2
- 回答日時:
Exceptionの内容みたままかと。
1:>Main :java.lang.NullPointerException MainPage4
2:>java.lang.NullPointerException
3:>at com.nttdocomo.ui.Panel.add(+17)
4:>at MainPage4.start(+7980)
1:MainPage4でNullPointerExceptionが発生しました。
2:例外の種類はNullPointerExceptionです。
3:例外が発生した箇所はcom.nttdocomo.ui.Panel.addの(+17)←たぶん行数だと思う。
4:3行目の処理の例外発生箇所はMainPage4.start(+7980)です。
コンパイルに問題はないとの事なので、単純に「3:」で参照されるオブジェクトがnullなのでしょう。
だから、そのオブジェクトが参照されるようにすればいいと思いますよ。参照されるオブジェクトは本当にnewされていますか?
この回答への補足
>>BleuLuneさん
わかりやすくご指摘していただき、ありがとうございます!
早速17行目を確認してみたところ、オブジェクトはnewで生成されてました…。何度も確認したんですけど、きちんと参照もされていると思います。それと、エラーのメッセージのat MainPage4.start(+7980)が、7980行もないのでよくわかりませんでした。
No.1
- 回答日時:
エラー内容だけでは、よくわからないので見せられる範囲でソースなどを貼ってもらえるとありがたいです。
エラー内容からすると、MainPage4のstart()内で
Panelを配置してるようだけど、うまく配置できてない
というところでしょう。
なんにせよ、Dojaのエラーコードは見づらいです。
ここからは逆に質問ですが、
Q1.ページ遷移をする設計構造ですか?
(フレームへのパネルまたはキャンバスの追加のしかたが
間違ってるかもしれません。)
Q2.ADFの設定を正しくしてあるか?
AppName=プロジェクト名.jar
PackageURL=AppNameと同じ
AppClass=IApplicationを継承してるクラスのパス
プロジェクトA内のパッケージB内のMainFrameだったら
B.MainFrameになります。
この回答への補足
>>zozyさん
わかりやすいご回答ありがとうございます!
ADFの設定は大丈夫でした!
私が作っているプロジェクトはzozyさんのおっしゃるとおり、パネルのなかのリストボックスやボタンのコンポーネントを使ってページを切り替えていく仕組みです。
大ざっぱにソースコードをのせます。申し訳ないのですが、実際のものとは異なり、流れだけご説明させてください!ご指導をお願いいたします。
import com.nttdocomo.ui.*;
import javax.microedition.io.*;
import java.io.*;
public class MainPage4 extends IApplication implements ComponentListener {
private Panel //パネルを15こ用意
private ListBox //SINGLE_SELECTやCHOICEを用意
private Label
private TextBox /*ユーザーが入力したtextをScratchPadを使ってlabelに入れる仕組み*/
private Button //パネル遷移のためのボタン
private HTMLLayout
public void start() {
//ここからパネルのクラスを全て書き込んであります
//Label,ListBox,Buttonがあります
panel = new Panel();
//以下省略
//ここで、一番最初に表示したいパネルを表示します
Display.setCurrent(panel);
}
// その後、アクションリスナーを実装します
public void componentAction(Component source, int type, int param) {
/*ボタンが押されたり、リストボックスでSELECTION_CHANGEDされたら違うパネルを表示します。*/
//それから、ScratchPadを使用する旨を書き込みます。
} //ここで、ComponentListenerのカッコを閉じます
//最後はScratchPadの中身です。
/*全部で39このScratchPadを書き込み、読み込みでそれぞれ別個に用意しました。("scratchpad:///0;pos=0")から("scratchpad:///0;pos=38")までです。*/
/*先ほど上で用意したTextBoxから3ケタの半角数字を空白のlabelにsetTextします*/
}
なんとなく、ScratchPadを追加して上書き保存した後から、エミュレータで表示されなくなった気がします…。最初、ScratchPadが5こ位のときは大丈夫だったんですけど、その後ScratchPadを増やしたらこのような問題が発生してしまったような感じがします。正常にビルドされているので、よく分からないのですが…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- フリーソフト libreoffice drawのツールバーのチェックが外れてしまう 1 2022/10/04 22:02
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- その他(パソコン・スマホ・電化製品) ウィルスバスターモバイルについて。 iphone12 miniで、ウィルスバスターモバイルを使ってい 2 2022/07/10 12:59
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- Excel(エクセル) Excel2010 VBAが特定動作で実行出来なくなる 7 2022/12/29 14:26
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- その他(ソフトウェア) Zoomテストミーティングで動作が正常なら、本番も大丈夫でしょうか? 2 2022/04/22 08:55
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
C#にて別クラスの関数を使いたい
-
内部クラスのスコープについて。
-
ひとつのファイルにクラスは1つ?
-
クラス間でのデータ参照
-
C#のクラスライブラリでメッセ...
-
C++ シングルトン マルチスレッド
-
a href="..." とServlet
-
C#でほかのファイルにある自作...
-
C# インターフェイスの実装
-
正常にビルドされたのに起動さ...
-
Java リフレクションについて
-
リレーションエンティティクラ...
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
C#で設定時刻到来時にイベント...
-
インスタンス参照でアクセスで...
-
VB.NET getとsetの概念がわかり...
-
DataGridViewでセルクリックイ...
-
変数名の付け方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
関数内の変数に<summary>コメン...
-
c++,ある関数のクラスから別の...
-
範囲外の数値を代入したらエラ...
-
C#にて別クラスの関数を使いたい
-
無名パッケージからのインポート
-
java-別クラスの変数の使い方を...
-
SwingでgetContentPaneのエラー...
-
C++でfriendクラスにしているの...
-
C#でほかのファイルにある自作...
-
Java リフレクションについて
-
Java
-
import と extends について
-
C#のクラスライブラリでメッセ...
-
a href="..." とServlet
-
ひとつのファイルにクラスは1つ?
-
構造 他のクラスの構造体を別...
-
親クラスから子クラスへアクセス。
-
内部クラスのインスタンスを外...
-
visual studioのデザイナ画面で...
おすすめ情報