这是代码,方形呈现但不会移动,即使它应该呈现每个循环。问题似乎出现在Core类中,在run()
中 package com.game;
import java.awt.*;
import javax.swing.*;
public class Core implements Runnable{
private static boolean running = true;
public static JFrame frame = new JFrame();
public static void main(String[] args) {
frame.setResizable(false);
frame.setBounds(100,100,600,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
start();
}
package com.game;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Paint extends JPanel{
public static int x = 10;
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(x,10,100,100);
}
}
private static void start() {
running = true;
Thread thread = new Thread(new Core());
thread.setPriority(Thread.MAX_PRIORITY);
thread.start();
}
@Override
public void run() {
Paint p = new Paint();
Container pane = frame.getContentPane();
while(running){
pane.add(p);
pane.show();
System.out.println(Paint.x);
try {
Thread.sleep(100);
} catch (Exception e){}
}
}
}
抱歉,如果代码以任何方式令人讨厌,我不确定应该如何格式化它......
答案 0 :(得分:3)
你是while (running)
循环:
while(running){
pane.add(p);
pane.show();
//....
}
正在踩踏Swing事件线程并阻止该线程执行其操作 - 绘制GUI并与用户交互。如果你想在Swing应用程序中重复行为,请不要使用while(true)循环,而是使用Swing Timer。
答案 1 :(得分:1)
你没有改变x
所以它为什么要移动?
此外,您经常(每秒十次)将一个Paint(您的JPanel
子类)添加到框架并显示它。
您可能想要添加并显示一次,可能在您的main方法中(或更好的地方),只需在该循环中调用repaint()
即可。
请不要使用thread.setPriority(Thread.MAX_PRIORITY);
它很少能完成任何事情,可能不是你想要的。