エラーが発生する原因がわからない

このQ&Aのポイント
  • クラスPanel_Middle内でパネルpnlFdを作成していますが、メインフォームからこのクラスのCreateMainPanel関数を呼ぶと、NullPointerExceptionというエラーが発生します。
  • エラーが発生する原因はわかりませんでしたが、パネルの配置や初期化に関連している可能性があります。
  • 解決策を見つけるために、コードをもう一度確認し、他の部分との連携も考えてみてください。
回答を見る
  • ベストアンサー

なぜエラーになるのかがわかりません?(長文です。)

下記のクラス(Panel_Middle)内でパネル(pnlFd)を作成してます。しかし、メインフォームからこのクラスの"CreateMainPanel"関数を呼ぶと "pnlFd.setBounds(new Rectangle(5, 5, 110, 38));" の後に"java.lang.NullPointerException "とエラーが出ます。色々考えたのですが、理由がわかりません。 public class Panel_Middle extends Panel{ Panel_Main pnlFd = new Panel_Main("A.gif","B.gif"); Image im; //CONSTRUCT public Panel_Middle(String img) { im = Toolkit.getDefaultToolkit().getImage(img); //MediaTracker画像入力監視 MediaTracker mt = new MediaTracker(this); mt.addImage(im, 0); try { mt.waitForID(0); } catch (InterruptedException e) { } } //Print public void paint(Graphics g) { if (g.drawImage(im, 0, 0, this) != true) { System.out.println("ng"); } } public void CreateMainPanel(){   this.add(pnlFd, null); pnlFd.setBounds(new Rectangle(5, 5, 110, 38)); pnlFd.setImageInit(); } }

  • t-tree
  • お礼率83% (183/218)
  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

私はJBuilderを使っていないので、詳しくはわかりませんが・・・・。 NullPointerExceptionというのは、どこに出てきましたか? そのメッセージと一緒に(下に)、 at aaaa.java(bbbb) のような形式でメッセージはありませんか? これは、aaaa.javaというソースファイルのbbbbの行で、 例外が発生したことを示しています。 このメッセージと、そのメッセージの示すソースコードを見なければ 問題を解決することは出来ませし、何の判断もできません。 まず、この2つを示してください。

その他の回答 (1)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

これだけを見たところ問題なさそうです(というか情報不足でわからない)。 こういうのって、掲示板とかで見つけるのは難しいんですよね~。 数行のプログラムなら、全ソースを見せてもらえるけど、 だんだん大きくなると、全部を載せるわけにはいかなくなるから。 最終的には自分で見つけるしかないんですよ。 ということで、見つけるまでの手順を説明(誘導)していきたいと思います。 で、その前に補足要求です。 1.ご使用のOS 2.開発環境を使ってますか、それともコマンドベースですか? 3.java.lang.NullPointerExceptionメッセージを正確に書いてください。  (上から5行程度)

t-tree
質問者

お礼

ご回答ありがとうございました。たしかにngsvxさんのおっしゃるとおり情報不足だと思います。 考えているうちになにがなんだかわからなくなり、質問してしまいました。すみません。 で、先ほど少しロジックの記述する順番を変えたところエラーが消えました、しかし僕の中のなぜ?は消えません・・・。 先ほど載せたロジックの public void CreateMainPanel(){ this.add(pnlFd, null); pnlFd.setBounds(new Rectangle(5, 5, 110, 38));   pnlFd.setImageInit(); } を public void CreateMainPanel(){ this.add(pnlFd, null); pnlFd.setImageInit(); pnlFd.setBounds(new Rectangle(5, 5, 110, 38)); } したらエラーがなくなりました。 補足情報 1.Windows2000 2.JBuilder 8 3.どのエラーを書けばよいのかわかりません。

関連するQ&A

  • 作ったクラスにイベントを追加するには?

    パネルを継承したクラスを作りました(パネルA)。 そのパネルAをメインフレームに作成しました。 作ったパネルAの上にサブパネルBを作りました。 サブパネルのイベントを書きたいのですがコードは作ったクラス内に書けないのでしょうか? 例)下記が作ったパネル継承クラスです。この中でpnlSubを作っているのです。で、このpnlSubのクリックイベントを書きたいのですが、どのようにイベントを用意すればよいのでしょう? package ### import java.awt.*; public class PanelA extends Panel{ Image im; Panel pnlSub = new Panel(); //CONSTRUCT public PanelA(String img) { im = Toolkit.getDefaultToolkit().getImage(img); //MediaTracker画像入力監視 MediaTracker mt = new MediaTracker(this); mt.addImage(im, 0); try { mt.waitForID(0); } catch (InterruptedException e) { } //パネル(pnlVolume)設定 this.add(pnlVolume, null); pnlSub.setBackground(Color.red); pnlSub.setBounds(new Rectangle(5, 8, 108, 5)); } //Print public void paint(Graphics g) { if (g.drawImage(im, 0, 0, this) != true) { System.out.println("ng"); } } }

    • ベストアンサー
    • Java
  • 画像がうまく表示されません

    下のプログラムを実行すると、 最初の読みこみはうまくいくのですが、(一部出なくなる画像がありますが…) Internet Explorerの更新ボタンを押した時、 (1)の部分で止まってしまうようで、画像が表示されなくなります。 (ローカルドライブで実行した場合はうまく表示できるのですが、ネットワークで実行した場合にこのようになってしまいます) import java.applet.Applet; import java.awt.*; public class met extends Applet{ Image img[] = new Image[6]; MediaTracker mt; public void init(){ mt = new MediaTracker(this); for(int i = 0;i < 6;i++){ img[i] = getImage(getCodeBase(),i+".gif"); mt.addImage(img[i],0); } try{ mt.waitForID(0); }catch(InterruptedException e){} } public void paint(Graphics g){ // (1) if(!mt.checkID(0)){ g.clearRect(0,0,500,500); g.drawString("読み込み中",200,240); return; } g.setColor(Color.white); g.fillRect(0,0,500,500); for(int i = 0;i < 6;i++){ g.drawImage(img[i],i*50,0,this); } } }

    • ベストアンサー
    • Java
  • 画像読み込みのエラー処理

    画像を表示するアプレットのソースです。 ファイル名はstrで設定します。 Image img; String str; str = "xx.jpg"; img = getImage(getDocumentBase(), str); if (img.equals(null)) { mydbg("001"); } else { mydbg("002"); } //strがでたらめで、そのパスの画像が存在しなくても //getImage()は成功するんですか?実験してみるとそのようでした。 //その画像が存在しない場合、この下のソースでmydbg("003");が //実行されるはずなのに実行されません。 //画像が存在しない場合のエラー処理のよいソースを教えてください。 MediaTracker mt = new MediaTracker(this); mt.addImage(img, 0); try { mt.waitForID(0); repaint(); } catch (Exception e) { mydbg("003"); }

    • ベストアンサー
    • Java
  • アプレットに画像が表示されません

     今晩は、java初心者です、宜しくお願いします。  下のようなプログラムを書きましたが、画像がアプレットに表示されません。  画像はeclipseで同じプロジェクト(フォルダ)内に置いています。  文法上のエラーは出ておりません。  原因がわかりません宜しくお願いします。 ============================ public class Test extends Applet { MediaTracker tracker ; Image img ; public void init() {   tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() {              try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( )      { Graphics g2 = getGraphics(); g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; } }

    • ベストアンサー
    • Java
  • 画像の縮小のプログラムのエラーについて教えて下さい

     java初心者です、宜しくお願いします。  画像の縮小のプログラムを色々と他のサンプルコードとかを参考にしながら 書きましたが、黒い四角形がWindowに表示されるだけです。  プログラム自体のエラーは表示されません。  一体どこが悪いのでしょうか、宜しくお願いします。 ===================================================== public class reSizedIImage extends Applet { Image img ; private MediaTracker tracker; BufferedImage bufimg ; BufferedImage re_img ; public void init() { setBackground( Color.white ) ; img = Toolkit.getDefaultToolkit().getImage( "a.jpg" ) ; tracker = new MediaTracker( this ) ; tracker.addImage( img , 1 ) ; try { // tracker.waitForID( 1 ) ; } catch ( Exception ex ) { ex.printStackTrace() ; } int imgw = img.getWidth( this ) ; int imgh = img.getHeight( this ) ; System.out.println(" imgw = " + imgw + " imgh = " + imgh ) ; int re_width = 300 ; int re_height = 300 ; bufimg = new BufferedImage( img.getWidth( this ) , img.getHeight( this ) , BufferedImage.TYPE_INT_RGB ) ; re_img = new BufferedImage( re_width , re_height , BufferedImage.TYPE_INT_RGB ) ; AffineTransformOp ato = new AffineTransformOp ( AffineTransform.getScaleInstance ( ( double )re_width / img.getWidth( this ) , ( double ) re_height / img.getHeight( this ) ) , null ) ; ato.filter( bufimg , re_img ) ; int re_w = re_img.getWidth(this); int re_h = re_img.getHeight(this); System.out.println(" re_img_w = " + re_w + " re_img_h = " + re_h ) ; } public void paint( Graphics g ) { g.drawImage( re_img , 200 , 200 , this ) ; } }

    • ベストアンサー
    • Java
  • テキストボックス、ボタンが見えません、画像の影響で

     Java初心者です、宜しくお願いします。  アプレットに画像とテキストボックス、ボタンを張り付ける プログラムを書きましたが、実行すると画像を張り付けているためか、 テキストボックスが指定した大きさに見えず、せいぜい1文字程度の 大きさにしか表示されません。  また、ボタンも実行後には見えない状態で、マウスでクリックする と見えるようになります。  最初から、指定した大きさで、テキストボックス、ボタンを表示させる方法は あるのでしょうか。  また、別のクラスでパネルに色をつけていますが、全く実行されて いないようです。  この原因が分かりません、何故でしょうか。  以上宜しくお願いします。 ======================================================== public class Sample1 extends JApplet { private static final long serialVersionUID = 1L; MediaTracker tracker ; Image img ; Text1 t1 ; public void init() { Container cnt = getContentPane( ); setLayout( null ) ; t1 = new Text1( ) ; t1.init( ) ; cnt.add( t1 ) ; tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "../a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() { try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( Graphics g ) { g.drawImage( img , 50 , 50 , 300 , 300 , this ) ; } } //=================================================================== class Text1 extends JPanel { private static final long serialVersionUID = 1L ; JTextField jtf ; public void init( ) { setLayout( null ) ; setBackground( Color.yellow ) ; setBounds( 30 ,30 ,500 , 500 ) ; jtf = new JTextField( "abcde" ) ; jtf.setBounds( 150 , 150 , 100 , 30 ) ; add( jtf ) ; JButton jbt = new JButton( "Check" ) ; jbt.setFont( new Font( "SansSerif" , Font.BOLD , 20 ) ) ; jbt.setBackground( Color.red ) ; jbt.setForeground( Color.blue ) ; jbt.setBounds( 100 , 200 , 220 , 40 ) ; this.add( jbt ) ; } }

    • ベストアンサー
    • Java
  • アプレットにテキストボックスが表示されません

     こんばんは、Java初心者です、宜しくお願いします。  アプレットを表示、背景に画像を表示させ、テキストボックス に文字、数字を入力するプログラムを書きました。  背景の画像は表示されるのですが、テキストボックスは 表示されません。  何故でしょうか、原因がよく分かりません。 宜しくお願い致します。 ============================================== public class TextboxTest extends Applet { MediaTracker tracker ; Image img ; TextTest tet ; public void init() { tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "../a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() { try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( Graphics g2 ) { g2 = getGraphics(); g2.drawImage( img , 50 , 50 , 250 , 250 , this ) ; } public void abc( ) { tet = new TextTest() ; } } //=================================================================== class TextTest extends Applet implements ActionListener { JTextField jt0 ; Double lon = 0.0 ; public void init() { setLayout( null ) ; jt0 = new JTextField( "" ) ; jt0.setBounds( 150 , 150 , 100 , 30 ) ; this.add( jt0 ) ; Button bt = new Button( "Input" ) ; bt.setFont( new Font( "SansSerif" , Font.BOLD , 20 ) ) ; Color d = new Color( 0xff00ff ); bt.setBackground( d ) ; bt.setForeground( new Color( 0.0f , 0.0f , 0.0f ) ) ; bt.setBounds( 100 , 200 , 220 , 40 ) ; bt.addActionListener( this ) ; this.add( bt ) ; } public void actionPerformed( ActionEvent ae ) { jttest(); } void jttest() { try { String str_lon = jt0.getText() ; lon = Double.parseDouble( str_lon ) ; System.out.println( "lon =" + lon ) ; } catch( Exception ee ) { } } }

    • ベストアンサー
    • Java
  • JAVAの初歩でとても悩んでます・・

    JAVAについての質問があります。とても困ってます・・。初心者の自分にもわかるようそれぞれの番号に対しての説明をしていただけると嬉しいです。 ちょっと長いのですが、例文があったのでそれを書いておきます。 (1)「メディアストラッカー」 (2)「スレッド」 (3)「インプリメント」 (4)myMt.waitForID(0) (5)myMT.checkID(0) (6)myTh = null; import java.applet.*; import java.awt.*; public class Lesson19 extends Applet implements Runnable{ Image[] myImg; int myNo; MediaTracker myMt; //メディアトラッカーオブジェクト Thread myTh; //スレッド public void init() { int count; myImg = new Image[3]; myNo = 0; myMt = new MediaTracker(this); myTh = null; for (count = 0; count < 3; count++) { myImg[count] = getImage(getDocumentBase(), "image" + count + ".gif"); myMt.addImage(myImg[count], 0); } } public void start(){ if (myTh == null) { myTh= new Thread(this); myTh.start(); } } public void run() { try { myMt.waitForID(0); } catch(InterruptedException e) {} while (true) { myNo = myNo + 1; if (myNo== 3) myNo = 0; try { myTh.sleep(1000); } catch(InterruptedException e) {} repaint(); } } public void paint(Graphics g) { if (myMt.checkID(0)) g.drawImage(myImg[myNo], 80, 80, this); g.drawString("image" + myNo, 75, 50); } }

    • ベストアンサー
    • Java
  • CardLayoutに関する質問です

    前回、swingに関する質問をさせていただいたものです。 前回頂いたご回答をヒントに新しく作り直したのですが、CardLayoutのパネルにFlowLayoutのパネルを追加してもボタンが右端で折り返してくれません。 色々調べたのですが、この二つのレイアウトを使った例が見つかりませんでした。 長文になりますが、以下にソースを記載いたします。 今一度、お知恵をお借りできれば幸いです。 ------------以下ソースコード------------------- import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.imageio.*; import javax.swing.Timer; class Main extends JPanel implements ActionListener{ static JFrame frame = new JFrame(); String[] imgStr = { "1","2","3","4","5","6","7","8","9", "10","11","12","13","14","15","16","17","18", "19","20","21","22","23","24","25","26","27", "28","29","30","31","32","33","34","35","36", "37","38","39","40","41","42","43","44","45","46","終了"}; JButton[] bt = new JButton[imgStr.length]; JPanel mainPanel = new JPanel(); JPanel btPanel = new JPanel(); JPanel image; MediaTracker tracker; CardLayout cardLayout = new CardLayout(); Image img; ImageCanvas canvas; Timer time = new Timer(0,this); int eventNo = -1; public static void main(String[] args){ frame.add(new Main()); frame.setLayout(new FlowLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(0, 0, 1024, 576); frame.setTitle("タイトル"); frame.setVisible(true); } public Main(){ mainPanel.setLayout(cardLayout); mainPanel.setBounds(0, 0, 1024, 576); btPanel.setBounds(0, 0, 1024, 576); for(int i=0; i<imgStr.length; i++){ bt[i] = new JButton(imgStr[i]); bt[i].setActionCommand(imgStr[i]); bt[i].addActionListener(this); btPanel.add(bt[i]); } btPanel.setLayout(new FlowLayout()); mainPanel.add(btPanel,"bt"); add(mainPanel); } public void actionPerformed(ActionEvent e){ if(e.getActionCommand() == null){ eventNo = -1; }else{ for(int i=0; i<imgStr.length; i++){ if(e.getActionCommand().equals(imgStr[i])){eventNo = i;} } } if(eventNo==-1){ time.stop(); cardLayout.show(mainPanel,"bt"); } if(eventNo==46){ System.exit(0); } if(eventNo>=0){ tracker = new MediaTracker(this); try{ img = ImageIO.read(new File("./image/001.jpg")); tracker.addImage(img, 0); tracker.waitForAll(); canvas = new ImageCanvas(img); mainPanel.setBounds(0, 0, 1024, 576); mainPanel.add(canvas,"img"); cardLayout.show(mainPanel,"img"); time.setInitialDelay(5000); time.start(); }catch(Exception ex){ System.out.println(ex); } } } }

    • ベストアンサー
    • Java
  • イメージのリサイズが表示されない

    JAVA初心者です、宜しくお願い致します。 イメージをリサイズするコードを書きましたが、うまく表示されません。 コードにはエラーは出ていません、原因が分かりません。 ご教示宜しく致します。 ====================================================================== public class reSizedIImage extends Applet { Image img ; private MediaTracker tracker; BufferedImage bufimg ; BufferedImage re_img ; public void init() { setBackground( Color.white ) ; img = Toolkit.getDefaultToolkit().getImage( "a.jpg" ) ; tracker = new MediaTracker( this ) ; tracker.addImage( img , 1 ) ; try { //イメージのロードが完了するまで待機 tracker.waitForID( 1 ) ; } catch ( Exception ex ) { ex.printStackTrace() ; } int imgw = img.getWidth( this ) ; int imgh = img.getHeight( this ) ; System.out.println(" imgw = " + imgw + " imgh = " + imgh ) ; int re_width = 300 ; int re_height = 300 ; bufimg = new BufferedImage( img.getWidth( this ) , img.getHeight( this ) , BufferedImage.TYPE_INT_RGB ) ; re_img = new BufferedImage( re_width , re_height , BufferedImage.TYPE_INT_RGB ) ; AffineTransformOp ato = new AffineTransformOp ( AffineTransform.getScaleInstance ( ( double )re_width / img.getWidth( this ) , ( double )re_height / img.getHeight( this ) ) , null ) ; ato.filter( bufimg , re_img ) ; int re_w = re_img.getWidth(this); int re_h = re_img.getHeight(this); System.out.println(" re_img_w = " + re_w + " re_img_h = " + re_h ) ; } public void paint( Graphics g ) { g.drawImage( re_img , 200 , 200 , this ) ; } }

    • ベストアンサー
    • Java

専門家に質問してみよう