Я хочу, чтобы перевести что-то вроде следующего кода Java в Scala:NullPointerException при доступе к VAL поле в конструкторе класса 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();
}
}
Моя первая попытка была такова:
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.awt.event.KeyEvent
import java.awt._
import javax.swing.JFrame
import javax.swing.JPanel
import javax.swing.Action
import javax.swing.AbstractAction
import javax.swing.KeyStroke
import collection.mutable.HashMap
object Main{
def main(args:Array[String]){
val gui:GUI = new GUI()
}
}
class GUI extends JFrame{
initKeyboard
pack
this.setVisible(true)
private val actionMap = new HashMap[KeyStroke,Action]
def initKeyboard{
val left = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0)
actionMap.put(left, new AbstractAction("Move Left"){
override def actionPerformed(e:ActionEvent){
println("Do something")
}
})//actionMap.put
}
}
Обратите внимание, что я не имею но написанный код, чтобы сделать что-либо с 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)
(обратите внимание, что линия 24 является линией, которая начинается «actionMap.put»)
Как это должно быть реализовано?
Просьба самостоятельно стоять, воспроизводимый пример. –
В его нынешнем виде ваш код не является исполняемым (мы не знаем, как выглядит GUI), поэтому никто не видит, что вы делаете неправильно. Просто выполнение этих трех строк отлично работает. –
см. Мое недавнее редактирование;) – user2547306