2D 물리학을 실험하기 위해 개인 프로젝트를 진행 중입니다. 지금은 초당 60 회 업데이트되도록 JFrame을 설정하려고합니다. 그러나 JFrame 업데이트를 시작하는 메서드를 호출하면 JFrame을 닫을 수 없습니다. 그러나 메서드를 호출하는 부분을 생략하면 JFrame을 닫을 수 있습니다. 다음은 주요 코드입니다.
import javax.swing.JFrame;
import utils.Frame;
public class Engine {
Frame w;
boolean running = false;
JFrame f;
public void start() {
init();
updater();
}
public void init() {
w = new Frame();
running = true;
f = w.create(500, 500, "Work please");
}
public void updater() {
int fps = 60;
double timePerTick = 1000000000 / fps;
double delta = 0;
long now;
long lastTime = System.nanoTime();
long timer = 0;
while (running) {
now = System.nanoTime();
delta += now - lastTime;
timer += now - lastTime;
lastTime = now;
if (delta >= timePerTick) {
//render
delta -= timePerTick;
}
}
}
}
그리고 이것은 Frame의 코드입니다.
import javax.swing.JFrame;
public class Frame {
public JFrame create(int width, int height, String title) {
JFrame f = new JFrame();
f.setSize(width, height);
f.setTitle(title);
f.setLocationRelativeTo(null);
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
return f;
}
}
start ()에서 updater ()를 호출하지 않으면 JFrame을 닫을 수 있습니다. 나는 내가 계속 실행 = 사실이라는 것을 알고 있지만 그것은 내 이전 컴퓨터에서 작동하기 때문에 여전히 닫혀 있어야합니다. 그리고 running = false로 만들어야하더라도 Frame의 f에 WindowListener를 추가하여 이미 시도했습니다. running = false로 만드는 메소드를 호출하지만 어떤 이유로 닫기 버튼을 눌렀을 때 WindowListener가 활성화되지 않습니다. 미리 도와 주셔서 감사합니다. 이것이 도움이된다면 웹 사이트에서 Eclipse IDE의 직접 패키지를 다운로드해야했습니다. 설치 프로그램을 사용할 때마다 모든 프로젝트에 "Failed to init ct.sym ..."오류가 발생하기 때문입니다. 어떤 이유에서인지 JFrame이있는 Java 프로그램을 실행하면 일반적인 Jar 로고 대신 Java 마스코트 "Duke"가 아이콘으로 표시되어 저를 쫓아 냈습니다.
프로그램 실행 여부를 제어하는 두 가지 방법이 있는지 확인하십시오.
그러나 다음을 사용하여 두 방법이 모두 동기화되었는지 확인하십시오.
synchronized
-예어.
public synchronized void start() {
if (running) return;
running = true;
thread = new Thread(this);
thread.start();
}
public synchronized void stop() {
if (!running) return;
running = false;
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다