• 締切済み

キーボードのアクション

スタートボタンでtimerをスタートさせ、 キーボードの「↑」ボタンを押すとFrame上の○がジャンプをする。 というプログラムを作りたいのですができません。 エラーが出てしまいます。どうしてででしょうか? ActionListenerのところのソースは public void actionPerformed (ActionEvent e) { //記録開始ボタンが押された if(e.getSource() == StartB) { timer.start(); } //キーボード読み込み com = e.getActionCommand(); if(com.equals("jump")) { //ジャンプの状態へ State = 1; } //再描写 repaint(); } です。

  • Java
  • 回答数2
  • ありがとう数1

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

NullPointerExceptionは if(com.equals("jump")) この行かしら? jumpがどこから来たのか不明だけど・・・。 とりあえず KeyListener というインターフェースが存在することを 教えてあげるわ。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

> エラーが出てしまいます まずはエラーの内容を書きましょう。 それからね。

mmmmmmkn
質問者

お礼

すみません。。。 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Main.actionPerformed(Main.java:145) at javax.swing.Timer.fireActionPerformed(Unknown Source) at javax.swing.Timer$DoPostEvent.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) というのがでてしまいます。

関連するQ&A

  • javaのプログラムの通常起動について

    今日は 下記のコードは、フォームがapplet形式となります、また起動しますと例外エラーを発生します。 Q1)通常のForm(applet形式でない)で、正常に起動するための変更をお教えて、   頂けますと大変有難いです。 注)フォームがapplet形式のものは、差当たり考えていません。 お手数ですが、宜しくお願いします。 //================================= import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class ObjectTest extends JFrame implements ActionListener { JButton b1; JButton b2; ObjectTest() { // ボタン作成・追加 b1 = new JButton("One"); b2 = new JButton("Two"); add(b1); add(b2); // リスナ登録 b1.addActionListener(this); b2.addActionListener(this); } public void actionPerformed(ActionEvent e) { // getSource() でイベントソースのオブジェクトを獲得し // Button クラスにキャストする JButton b = (JButton)e.getSource(); // getActionCommand() でボタンのラベルを獲得する System.out.println("Label : "+e.getActionCommand()); // getSource() で獲得したオブジェクトとはじめに作った // ボタンのオブジェクトが一致するか調べる if (b==b1) { System.out.println("Oneのボタン"); } if (b==b2) { System.out.println("Twoのボタン"); } // ボタンのラベルで比較する場合には // String クラスの文字列比較用のメソッド equals() を使って // if ( e.getActionCommand().equals("One") ) とします } }

    • ベストアンサー
    • Java
  • アプレットのクラス移動

    アプレットにてボタンを押した際に他のクラスのアプレットを上書きしたいのですが、何が足りないのかわかりません。ご指導お願いします。 button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent f){ remove(button); repaint(); Tenbiki.Tenbiki();     validate(); } });

  • jcpad

    『長方形をあらかじめ置き、、縮小、拡大のボタンを押すことで  縦横を1/1.05倍に縮小できるようにする』 という問題が教科書にあり、拡大、縮小ボタンを作るまではできたのですがそれ以降がうまく考えることができません。 //<applet code= "Counter3.class" width=300 height=150></applet> import java.awt.*; import java.applet.*; import java.awt.event.*; public class Counter3 extends Applet implements ActionListener { Font font; Button kakudaiButton, syukushoButton; public void init() { font = new Font("Serif", Font.BOLD, 72); kakudaiButton = new Button("拡大"); kakudaiButton.addActionListener(this); add(kakudaiButton); syukushoButton = new Button("縮小"); syukushoButton.addActionListener(this); add(syukushoButton); } public void paint(Graphics g) { g.drawOval(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == kakudaiButton) { ; } else if (e.getSource() == syukushoButton) { ; } repaint(); } }

  • 内部クラスからはrepaint()は実行できない?

    アプレットを勉強している初心者です。 思うような実行が出来ず public class applet extends Applet{ public void init(){} public void paint(){} class buhin extends Button implements ActionListener{ public buhin(){} public void actionPerformed(ActionEvent e){ repaint();//←これ } } } 大雑把ですがこのような構造で、上の場所からはrepaint()は実行できないのでしょうか?動作からはどうやら出来てないようなのですが、いまいち勘なので・・・。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Java ボールが動くアニメーション

    ボールがウインドウ内を跳ねるプログラムを作っているのですが、ある所でフリーズしてしまいました。 class BallBound implements ActionListener { BallBound() { //ウインドウ作成・アクションリスナ登録・メニューバー作成&取り付けなど } //アニメーション public void byoga() { boolean xvect = true, yvect = true; loop = true; //グローバル変数 while (loop) { repaint(); try { Thread.sleep(10); } catch (InterruptedException e1) { } if (x <= 0 || x+vx >= frame.getWidth()) { xvect = !xvect; } //はみ出たら逆ベクトルへ if (y <= 0 || y+vy >= frame.getHeight()) { yvect = !yvect; } if (xvect) x += xch; else x -= xch; if (yvect) y += ych; else y -= ych; } } public void actionPerformed(ActionEvent e) { if(e.getSource() == start) { if(loop == false) { byoga(); } } if(e.getSource() == stop) { loop = false; } } protected void paintComponent(Graphics g) { g.fillOval(x, y, vx, vy); } } という風にactionPerformed()から、JMenuItem startが押された場合にbyoga()を呼び出しているのですが、startのメニューを押した(選んだ)瞬間にフリーズしてしまってタスクマネージャから強制終了せざるを得ない状態になってしまいます。 しかしコンストラクタの末尾からbyoga()を呼び出してみたりmain()から呼び出したりした場合はフリーズせずに起動できます。 これは一体何故なんでしょうか・・・? どなたか教えてほしいです・・・

    • ベストアンサー
    • Java
  • Javaのプログラミング手伝ってください

    以下のソースコードを応用して、添付画像のような数字のかかれた画像を3つ並べてそれを回して7を揃えるというゲームを作りたいのですが全く進みません。どなたか完成させてくださいm(__)m使用する画像のファイル名は「slot1.jpeg」~「slot7.jpeg」です。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; public class OneSlot extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; final int MAX = 7; Timer timer = new Timer(150 , this); JLabel label= new JLabel("スタートで始まるよ",JLabel.CENTER); JButton[] bt = {new JButton("スタート"),new JButton("ストップ")}; JLabel slot= new JLabel(new ImageIcon("Slot1.jpg"),JLabel.CENTER); ImageIcon[] slot_icon = new ImageIcon[MAX]; int iCount = 0; OneSlot(String title) { super(title); timer.setActionCommand("timer"); setBounds(200, 200, 230, 150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); for(int i = 0;i < slot_icon.length; i++) slot_icon[i] = new ImageIcon("Slot" + (i+1) + ".jpg"); add("North",label); add("Center",slot); JPanel p = new JPanel(); for (int i = 0; i < bt.length;i++) { bt[i].addActionListener(this); p.add(bt[i]); } add("South",p); setVisible(true); } public static void main(String[] args) { new OneSlot("スロットマシン"); } public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if(cmd.equals("timer")) { if(++iCount == slot_icon.length) iCount = 0; slot.setIcon(slot_icon[iCount]); } if(e.getSource() == bt[0] && !timer.isRunning()) { label.setText("7が当たりだよ"); timer.start(); } else if(e.getSource() == bt[1] && timer.isRunning()) { if(iCount+1 == MAX) label.setText("やった!!おめでとう"); else label.setText("残念でした"); timer.stop(); } } }

  • JAVAのプロフラミングについて

    □、○、△のボタンがあり、それぞれのボタンについて 一回押すと、その押したボタンの図形を2個描き、 押すたびに永久的に増えていくというようなプログラム を作りたいのですが、ここからどのようにすればいいのか教えてください。 import java.awt.*; import java.applet.*; import java.awt.event.*; public class kadaiApplet232 extends Applet implements ActionListener { int square = 0; int circle = 0; int triangle = 0; Button squareButton, circleButton,triangleButton; public void init(){ squareButton = new Button("□"); squareButton.addActionListener(this); add(squareButton); circleButton = new Button("○"); circleButton.addActionListener(this); add(circleButton); triangleButton = new Button("△"); triangleButton.addActionListener(this); add(triangleButton); } public void paint(Graphics g){ if(){ g.drawRect(30, 30, square, square); } if(){ g.drawOval(60,30,circle,circle); } if(){ g.drawLine(90+(int)(triangle/2),30,90,30+triangle); g.drawLine(90,30+triangle,90+triangle,30+triangle); g.drawLine(90+triangle,30+triangle,90+(int)(triangle/2),30); } } public void actionPerformed(ActionEvent e){ if ( e.getSource() == squareButton){ square = 30; } else if ( e.getSource() == circleButton){ circle = 30; } else if (e.getSource() == triangleButton){ triangle = 30; } repaint(); } }

    • ベストアンサー
    • Java
  • [java]クローズボックスを閉じたときのActionEvent

    クローズボックスを閉じたときのActionEventを 拾いたいのですが、IF文はどう記述すべきでしょうか? public void actionPerformed(ActionEvent e) { if(/**ここが分からない**/){ System.out.println("閉じるボタンを押した"); } }

    • ベストアンサー
    • Java
  • JAVAのプログラミングについて

    色変更というボタンを押すたびに、正方形の中の色が緑から青、青から緑というように繰り返し色が変わるプログラムを作りたいのですが、途中までは、完成できたのですが、ここからどうすればいいかわかりません。教えてください。 import java.awt.*; import java.applet.*; import java.awt.event.*; public class kadai3Applet extends Applet implements ActionListener { int i = 1; Button collor; public void init(){ collor = new Button("色変更"); collor.addActionListener(this); add(collor); } public void paint(Graphics g){ g.setColor(Color.green); g.fillRect(50,50,50,50); } public void actionPerformed(ActionEvent e){ if(e.getSource() == collor){ } repaint(); } }

  • javaアプレット repaintのタイミング

    勉強を始めたばかりなので稚拙な質問ですがお許しください。 ユーザーからの入力→repaint→画面に反映→プログラムが処理→repaint→画面に反映 というターン制のような動かし方をしたいのですが、実際にはユーザーの入力の後、プログラムの処理を待ってからまとめてrepaintしてしまいます。 repaint()は再描画を要求しているだけに過ぎず、repaint()と書いた場所で即時に再描画されるわけではないそうですが、では具体的にすぐ再描画してほしい場合はどうすればいいのでしょうか? 例えばですが、「ボタンを押すとcountの値が+1され、四角がcount個描画される。その一秒後に、こちらが何もしなくてもcountが+2されてもう一度四角がcount個(つまりこの時点で合計三個)描画される」というのを作ってみました。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class question extends Applet implements ActionListener{ Button bt1; int count = 0; public void init(){ bt1 = new Button("start"); add(bt1); bt1.addActionListener(this); } public void actionPerformed(ActionEvent e) { if (e.getSource() == bt1) { bt1.setEnabled(false); count += 1; repaint(); try { Thread.sleep(1000); } catch (InterruptedException e1) { } count += 2; repaint(); bt1.setEnabled(true); } } public void paint(Graphics g){ for(int i = 0; i < count; i++){ g.drawRect(10, 10, 10 + i * 5, 10 + i * 5); } } } これではボタンを押すたびに3つずつ四角が増えているように外見上見えてしまいます。 ボタンを押すとしっかり1つ四角を表示してから一秒待って、2つ四角を増やす。という風にするためにはどうすればよいのでしょうか? どなたかご教示ください。 ちなみにpaintImmediatelyというものを見つけましたが、何故か使えず……(メソッドpaintImmediatelyは未定義ですと言われてしまう)

    • ベストアンサー
    • Java

専門家に質問してみよう