首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从mouseClicked传递参数?

如何从mouseClicked传递参数?
EN

Stack Overflow用户
提问于 2015-10-23 19:08:32
回答 1查看 406关注 0票数 0

我正在使用java3D,并希望将单击的项的ID传递给我的类。然而,它并没有成功。它可以打印ID,也可以将其传递给字符串text。但是它在game.btClicked(Text)行中显示为nullPointerException;我如何将ID传递给我的类?

代码语言:javascript
复制
public class GUI extends JFrame implements ActionListener, MouseListener {

  private Game game;
  private String text;

  public GUI(Game game /*...*/) {

    this.game = game;
    //.......
  }

  //.......
  public void mouseClicked(MouseEvent e) {
    pickCanvas.setShapeLocation(e);
    Primitive pickedShape = null;
    PickResult result = pickCanvas.pickClosest();

    if (result != null) {
      pickedShape = (Primitive) result.getNode(PickResult.PRIMITIVE);
    }

    //actions to be carried out when object is clicked
    if (pickedShape != null) {
      System.out.println("clicked: " + pickedShape.getName());
      String text = pickedShape.getName();
      System.out.println(text);
      game.btClicked(text);
    } else {
    }
  }
}

公开课游戏{

代码语言:javascript
复制
public Game(){

//.......

}

代码语言:javascript
复制
public void btClicked(String text) {
    spielfeld.disableAll();
    int buttonNr = Integer.parseInt(text);
    System.out.println("step: "+step+ " nr: "+buttonNr);
   // .......

}}

以下是堆栈跟踪:

点击次数: 38

38

线程"AWT-EventQueue-0“java.lang.NullPointerException中出现异常

代码语言:javascript
复制
at spiel.Game.btClicked(Game.java:403)

at spiel.SpielGUI.mouseClicked(GUI.java:552)

at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(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)

这是相当多的,但大部分是由于其他问题,我正在为游戏编写一个新的GUI,所以仍然有一些代码需要更改。所以只要看一下第一行。

"GUI.java:552“是指”game.btClicked(文本);“

"Game.java:403“指的是"spielfeld.disableAll();”,但我确信这一行没问题。

EN

回答 1

Stack Overflow用户

发布于 2015-10-23 19:16:47

您提供的代码中没有构造函数。你有一个看起来非常像构造函数的方法。我假设游戏不会被初始化。

构造函数没有定义返回类型。在你的例子中,你有

代码语言:javascript
复制
public void GUI(Game game ....)

当你真正需要时

代码语言:javascript
复制
public GUI(Game game ....)

下面是一个例子:

代码语言:javascript
复制
public class GUI {
    boolean b = false;
    public static void main(String[] args) {
        GUI g = new GUI();
        System.out.println(g.b);
    }
    public void GUI() {
        b = true;
    }
}

提供输出:

代码语言:javascript
复制
run:
false
BUILD SUCCESSFUL (total time: 2 seconds)

而正确的构造函数应该是:

代码语言:javascript
复制
public class GUI {
    boolean b = false;
    public static void main(String[] args) {
        GUI g = new GUI();
        System.out.println(g.b);
    }
    public GUI() {
        b = true;
    }
}

这就给出了:

代码语言:javascript
复制
run:
true
BUILD SUCCESSFUL (total time: 1 second)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33300884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档