WindowLIstener - 令牌后预期的标识符
WindowLIstener - Identifier Expected After Token
我正在根据 CodeReview.SE 问题的建议重构我的代码。
https://codereview.stackexchange.com/questions/126634/button-clicking-ui-for-a-game
研究:
- https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
如何写Window听众
- Java syntax error on token.... Identifier expected after this token
大多数其他相关的 SO 问题与此类似。我找不到关于这种情况的问题。
我知道你必须创建一个方法来调用别处。 doSomething 代码不能只位于 class 级别。
错误:
我遇到错误
Syntax error on token "saveGameOnClose", Identifier expected after this token
在
之内
FRAME.addWindowListener(new WindowAdapter() {
SaveGameData.saveGameOnClose();
});
我的主要class.
主要Class:
public Game() {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
NewGameMessage.LoadNewGameMessage();
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }
catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace(); }
catch (IllegalAccessException ex) {
ex.printStackTrace(); }
catch (InstantiationException ex) {
ex.printStackTrace(); }
catch (ClassNotFoundException ex) {
ex.printStackTrace(); }
FRAME.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FRAME.getContentPane().add(new addComponentsToPane());
FRAME.setSize(300, 500);
FRAME.setLocationRelativeTo(null);
FRAME.setVisible(true);
FRAME.setResizable(false);
FRAME.addWindowListener(new WindowAdapter() {
SaveGameData.saveGameOnClose();
});
}
});
}
保存游戏数据class:
public class SaveGameData {
// Game.FRAME.addWindowListener(new WindowAdapter() {
static void saveGameOnClose(WindowEvent e) {
BufferedWriter writerOut = null;
try {
writerOut = new BufferedWriter(new FileWriter("res/saved_game_data.txt"));
writerOut.write(String.valueOf(Game.biDamageOutput) + "\r\n" +
String.valueOf(Game.biPoints) + "\r\n" +
String.valueOf(Game.biNewPoints) + "\r\n" +
String.valueOf(Game.biSpentPoints) + "\r\n" +
String.valueOf(Game.biKnifeCount) + "\r\n" +
String.valueOf(Game.biPistolCount) + "\r\n" +
String.valueOf(Game.biShotgunCount) + "\r\n" +
String.valueOf(Game.biRifleCount) + "\r\n" +
String.valueOf(Game.biRLauncherCount) + "\r\n" +
String.valueOf(Game.intTotalClicks));
writerOut.close();
} catch (Exception e1) {
System.err.println("Error: " + e1.getMessage());
}
};
}
个人对问题的思考:
我写的 Window 侦听器不正确。但我正在尝试 class 每个值得注意的操作,加载、保存,UI,作为学习更多关于 classes、可持续性、我的代码的可重用性的一部分。或者我可能只是缺少一个支架或支架。
谢谢。
您的方法 SaveGameData.saveGameOnClose(WindowEvent e)
需要一个 WindowEvent
类型的参数,但您在调用它时没有任何参数 SaveGameData.saveGameOnClose();
并且也没有实现任何侦听器方法
应该是这样的
FRAME.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
SaveGameData.saveGameOnClose(e);
}
});
我正在根据 CodeReview.SE 问题的建议重构我的代码。 https://codereview.stackexchange.com/questions/126634/button-clicking-ui-for-a-game
研究:
- https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
如何写Window听众 - Java syntax error on token.... Identifier expected after this token
大多数其他相关的 SO 问题与此类似。我找不到关于这种情况的问题。
我知道你必须创建一个方法来调用别处。 doSomething 代码不能只位于 class 级别。
错误:
我遇到错误
Syntax error on token "saveGameOnClose", Identifier expected after this token
在
之内FRAME.addWindowListener(new WindowAdapter() {
SaveGameData.saveGameOnClose();
});
我的主要class.
主要Class:
public Game() {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
NewGameMessage.LoadNewGameMessage();
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }
catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace(); }
catch (IllegalAccessException ex) {
ex.printStackTrace(); }
catch (InstantiationException ex) {
ex.printStackTrace(); }
catch (ClassNotFoundException ex) {
ex.printStackTrace(); }
FRAME.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FRAME.getContentPane().add(new addComponentsToPane());
FRAME.setSize(300, 500);
FRAME.setLocationRelativeTo(null);
FRAME.setVisible(true);
FRAME.setResizable(false);
FRAME.addWindowListener(new WindowAdapter() {
SaveGameData.saveGameOnClose();
});
}
});
}
保存游戏数据class:
public class SaveGameData {
// Game.FRAME.addWindowListener(new WindowAdapter() {
static void saveGameOnClose(WindowEvent e) {
BufferedWriter writerOut = null;
try {
writerOut = new BufferedWriter(new FileWriter("res/saved_game_data.txt"));
writerOut.write(String.valueOf(Game.biDamageOutput) + "\r\n" +
String.valueOf(Game.biPoints) + "\r\n" +
String.valueOf(Game.biNewPoints) + "\r\n" +
String.valueOf(Game.biSpentPoints) + "\r\n" +
String.valueOf(Game.biKnifeCount) + "\r\n" +
String.valueOf(Game.biPistolCount) + "\r\n" +
String.valueOf(Game.biShotgunCount) + "\r\n" +
String.valueOf(Game.biRifleCount) + "\r\n" +
String.valueOf(Game.biRLauncherCount) + "\r\n" +
String.valueOf(Game.intTotalClicks));
writerOut.close();
} catch (Exception e1) {
System.err.println("Error: " + e1.getMessage());
}
};
}
个人对问题的思考:
我写的 Window 侦听器不正确。但我正在尝试 class 每个值得注意的操作,加载、保存,UI,作为学习更多关于 classes、可持续性、我的代码的可重用性的一部分。或者我可能只是缺少一个支架或支架。
谢谢。
您的方法 SaveGameData.saveGameOnClose(WindowEvent e)
需要一个 WindowEvent
类型的参数,但您在调用它时没有任何参数 SaveGameData.saveGameOnClose();
并且也没有实现任何侦听器方法
应该是这样的
FRAME.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
SaveGameData.saveGameOnClose(e);
}
});