Swing 访问Scala类构造函数中的val字段时出现NullPointerException
我想将以下Java代码转换为Scala: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
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