Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swing 访问Scala类构造函数中的val字段时出现NullPointerException_Swing_Scala - Fatal编程技术网

Swing 访问Scala类构造函数中的val字段时出现NullPointerException

Swing 访问Scala类构造函数中的val字段时出现NullPointerException,swing,scala,Swing,Scala,我想将以下Java代码转换为Scala: private HashMap<KeyStroke,Action>actionMap=new HashMap<KeyStroke,Action>(); KeyStroke left = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0); //.... actionMap.put(left, new AbstractAction("move left") { @Override

我想将以下Java代码转换为Scala:

private HashMap<KeyStroke,Action>actionMap=new HashMap<KeyStroke,Action>();

KeyStroke left = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0);
//....
actionMap.put(left, new AbstractAction("move left") {
    @Override
    public void actionPerformed(ActionEvent e) {
        doSomething();
    }
}
请注意,我还没有编写代码来处理actionMap

但是,我在运行时遇到以下错误:

Java.lang.NullPointerException
    at GUI.initKeyboard(Game.scala:24)
    at GUI.<init>(Game.scala:18)
    at Main$.main(Game.scala:13)
    at Main.main(Game.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Java.lang.NullPointerException
在GUI.initKeyboard(Game.scala:24)
在图形用户界面(游戏,scala:18)
在Main$.Main(Game.scala:13)
在Main.Main(Game.scala)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
(请注意,第24行是启动“actionMap.put”的行)


这应该如何实现?

问题在于初始化顺序

在创建新的
GUI
实例时,将按列出的顺序执行以下操作:

您可以看到在初始化
actionMap
之前调用
initKeyboard
。因此,在
initKeyboard
中访问它会引发异常

您可以使用以下简单示例验证初始化顺序:

class GUI extends {
  initKeyboard
  private val actionMap = println("actionMap")
  def initKeyboard: Unit = {
    println("initKeyboard")
  }
}
new GUI // prints: initKeyboard actionMap

问题在于初始化顺序

在创建新的
GUI
实例时,将按列出的顺序执行以下操作:

您可以看到在初始化
actionMap
之前调用
initKeyboard
。因此,在
initKeyboard
中访问它会引发异常

您可以使用以下简单示例验证初始化顺序:

class GUI extends {
  initKeyboard
  private val actionMap = println("actionMap")
  def initKeyboard: Unit = {
    println("initKeyboard")
  }
}
new GUI // prints: initKeyboard actionMap

请提供一个独立的、可复制的示例。由于您的代码不可执行(我们不知道
GUI
的外观),因此没有人能看出您做错了什么。仅执行这三行就可以了。请查看我最近的编辑;)请提供一个独立的、可复制的示例。由于您的代码不可执行(我们不知道
GUI
的外观),因此没有人能看出您做错了什么。仅执行这三行就可以了。请查看我最近的编辑;)
class GUI extends {
  initKeyboard
  private val actionMap = println("actionMap")
  def initKeyboard: Unit = {
    println("initKeyboard")
  }
}
new GUI // prints: initKeyboard actionMap