我正在做一个实验2D物理的个人项目。现在,我正在尝试设置JFrame,以便它每秒更新60次。但是,当我调用方法开始更新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=true,但它仍然应该关闭,因为这在我的旧计算机上可以工作。即使我需要使running=false,我也已经尝试过在Frame中为f添加一个WindowListener。它会调用一个方法,使running=false,但由于某种原因,当我按下关闭按钮时,WindowListener不会激活。提前感谢您的帮助。如果这对您有任何帮助,我必须从网站上直接下载Eclipse IDE包,因为每次使用安装程序时,每个项目都会出现错误“未能初始化ct.sym…”出于某种原因,当我运行一个带有JFrame的Java程序时,Java吉祥物“Duke”会显示为图标,而不是通常的Jar徽标,这让我很不舒服。
确保您有两个方法来控制程序是否正在运行。
但是,请确保使用-
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();
}
}
问题内容: 我想知道是否有一种方法,通过单击“ X”,让程序在关闭JFrame之前执行一些代码。该方法仅使用整数。 问题答案: 您可能对使用感兴趣。本教程。
我有一个带有登录名(JPanel)的JFrame,可以从菜单栏中选择。菜单栏还根据用户角色显示选项。当用户第一次登录创建的JFrame实例时,当我在菜单栏上选择login并在new JFrame上实例化时,我的问题就出现了,因为我显然打开了两个JFrame,我找不到从JPanel隐藏或关闭之前JFrame的方法。在实例化新JFrame或任何其他可能的解决方案之前,有没有办法隐藏/处理所有打开的窗口
我有一个Jframe窗口,里面有一个按钮。通过单击该按钮,它将打开一个新的JFrame窗口。但是当我关闭这个窗口时,它会自动用按钮关闭第一个Jframe窗口。当我关闭第二个Jframe窗口时,如何防止第一个Jframe窗口关闭?
问题内容: 我正在尝试制作一个在鼠标本地化处绘制一个圆的简单Java程序,它获取了鼠标的X和Y坐标,但是它没有绘制任何内容,我试图绘制一个String,一个圆和一条线,但是没有任何效果,我稍微修改了代码,但仍然无法正常工作 问题答案: 不要直接在上执行自定义绘画。如果可以,请始终在替代方法上进行操作。 为此,请勿使用无限循环。有用于Mouse Motion收听的
嗨,我有一个jFrame,我想问问用户,当单击close按钮时,他是否确定要关闭jFrame: 当他从jpanel弹出窗口中选择“否”按钮时,我该如何撤消关闭操作?
问题内容: 我创建了一个程序,可以在屏幕上移动一个球。我以前把所有内容都放在一个类中,但认为它看起来太乱了,所以我将其分为三个不同的类:Main …初始化所有内容,Game …绘制所有内容并为一个JPanel,AL则为一个KeyListener(这也是问题所在)。问题是,无论我尝试将其传递给我的类,我都无法从AL类获得重绘程序。有人能帮忙吗?这是我的三个班级: -- -- 问题答案: 让我们从显而