我的应用程序在Windows机器上可以正常运行,但是切换到macOS时,每次运行该程序时,都会得到一个null ptr异常。甚至没有到达构造函数代码,所以我不确定为什么会这样。堆栈跟踪将我指向JFrame字段的初始化。我不确定这是Swing的特质还是我的代码有问题。我的主要:
public static void main(final String[] theArgs) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new TetrisGUI();
}
});
}
跟踪
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.desktop/java.awt.Window.init(Window.java:509)
at java.desktop/java.awt.Window.<init>(Window.java:549)
at java.desktop/java.awt.Frame.<init>(Frame.java:423)
at java.desktop/javax.swing.JFrame.<init>(JFrame.java:224)
at view.TetrisGUI.<init>(TetrisGUI.java:70)
at view.TetrisMain$1.run(TetrisMain.java:27)
TetrisGUI
public class TetrisGUI implements Observer {
.
.
.
70 /** The main GUI component that encapsulates all subsidiary components. */
private final JFrame myMainFrame = new JFrame("UW CSS 305 - Tetris");
.
.
.
/**
* Initializes GUI components, begins game.
*/
public TetrisGUI() {
myMainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myMainFrame.setPreferredSize(getPreferredDim());
myMainFrame.setResizable(false);
myUserBoard = new Board();
myUserBoard.addObserver(this);
myAutoStepTimer = new Timer(500, event -> {
myUserBoard.step();
});
myMainFrame.add(buildControlPanel(), BorderLayout.CENTER);
myMainFrame.add(myGraphicPanel, BorderLayout.EAST);
addKeyListeners();
myMainFrame.pack();
myMainFrame.setVisible(true);
}
更新: 经过更多的挖掘后,我发现此问题是由于我的外接显示器引起的。我发现此Github issue与问题有关。似乎是Swing的问题。