gpt4 book ai didi

java - 让线程 hibernate 的更好方法

转载 作者:行者123 更新时间:2023-11-30 07:58:19 25 4
gpt4 key购买 nike

我一直在用 Java 8 编写 2D 图形教程,当时 NetBeans 提示我执行 Thread.Sleep 会影响性能。然而,尽管我已经能够找到几种更好的方法,但我一直无法找到一种方法来包含它们而不会使您的代码困惑。

package platformer;

import java.awt.*;
import javax.swing.*;
import java.util.Scanner;

@SuppressWarnings("serial")
public class Platformer extends JPanel {
int x = 0;//Sets the starting coords. of the ball
int y = 0;
private void moveBall() {//How much the ball moves by
x = x+1;
y = y+1;
}
@Override
public void paint(Graphics g) {//Essentially al the graphics functions
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.fillOval(x, y, 30, 30);
}

public static void main(String[] args) throws InterruptedException {
Scanner reader = new Scanner(System.in);
Scanner reader1 = new Scanner(System.in);
System.out.print("Enter an x-value for the window (whole numbers only): ");
int setx = reader.nextInt();
System.out.print("Enter a y-value for the window (whole numbers only): ");
int sety = reader.nextInt();

JFrame gameFrame = new JFrame("Sample Frame");//Makes the window variable w/ the name in quotations.
Platformer game = new Platformer();//'Copies' the graphics functions above into a variable
gameFrame.add(game);//Adds the above variable into th window
gameFrame.setSize(setx,sety);//Sets the resolution/size of the window(x,y)
gameFrame.setVisible(true);//Makse the window visible
gameFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//Makes the window close when the close button is hit

while (true){
game.moveBall();
game.repaint();
Thread.sleep(10);
}
}
}

我想知道如何包含一种更好的方法让线程在循环中 hibernate ,或者让 NetBeans 只执行循环。

最佳答案

though I've been able to find several better ways

嗯,您不认为您应该告诉我们您找到的方法,这样我们就不会花时间提出您已经知道的建议吗?我们不是介意读者,我们无法猜测您尝试了什么。

I haven't been able to find a way to include them without messing u the code.

好吧,你的代码无论如何都应该重新设计。

代码的动画应该是游戏面板的函数,而不是 main() 方法。因此,您应该在面板中内置可以调用的方法,例如 startGame()stopGame()

Netbeans gave me a hint that doing thread.sleep would affect performance.

是的,一般来说您不应该使用 Thread.sleep(),因为通常代码是作为某些用户操作的结果执行的,并且代码是在 Event Dispatch Thread (EDT) 上执行的。由于 EDT 负责绘制 GUI,如果您一直告诉它 hibernate ,那么这显然会影响性能。

但是,在您的情况下,循环逻辑不会在 EDT 上执行,因此这应该不是问题(整体设计问题除外)。

实际上你不应该使用循环。相反,您应该使用 Swing Timer安排动画。

另请查看教程中有关 Concurrency in Swing 的部分,该部分将解释有关 EDT 的更多信息以及为什么应在 EDT< 上更新 Swing 组件.

关于java - 让线程 hibernate 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40568903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com