저는 작은 게임을 만들고 있으며 게임을 저장하는 저장 기능을 이미 구현했습니다 (새 XML 파일에 정보를 작성하여). 저축은 몇 초가 걸리므로 다음과 같이하고 싶습니다 : 프로그램이 게임을 저장하는 동안 JPanel의 모양을 바꾸고 싶습니다. 저장이 끝나면 다른 페이지로 돌아가고 싶습니다 (쇼 또 다른 JPanel). 나는 다음과 같은 코드가 있습니다 게임이 저장되고 사용자가 다시 teampage로 이동합니다,하지만 패널이 변경되지 않습니다 것입니다 어떻게됩니까Java : 게임을 저장하는 중 JPanel을 변경하십시오.
confirm.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
String fileNaam = saveGame.getText();
//This method changes the look of the panel
changePanel();
//This method saves the game
model.saveGame(fileNaam);
//This method takes the user back to a previous page
controller.viewTeamPage();
}
});
합니다. changePanel() 메서드가 작동하기 때문에 문제는 아니지만 결코 실행되지 않는 것처럼 보입니다. 누군가가 어떻게이 문제를 해결할 수 있는지 궁금합니다.
편집 :
private void changePanel() {
panel.removeAll();
panel.repaint();
panel.revalidate();
}
이 지금은 그냥 간단하게하기 위해 패널에 모든 것을 제거하기위한 패널의 모양을 변경할 수있는 방법입니다. 또한 저장은 별도의 스레드에서 수행되지 않습니다.
EDIT 2 : 게임을 저장하기 위해 스레드를 사용하여 수정하고 저장이 끝난 후 팀으로 돌아갑니다. 아래 코드를 참조하십시오.
같은 패널을 변경하고 새로운 패널을 intializing하지 않는 경우confirm.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
final String fileNaam = saveGame.getText();
changePanel();
Thread t = new Thread (new Runnable() {
@Override
public void run() {
model.saveGame(fileNaam);
controller.viewTeamPage();
}
});
t.start();
}
});
changePanel 메서드를 호출하는 방식이 아닌 자체를 표시해야합니다. – laune
절약에 몇 초가 걸렸으니 실제로 저장을 별도의 스레드에서 수행합니까? –
changePanel() 메서드를 추가했습니다. – casper04