我尝试为简单游戏制作标准表单,但每次我尝试在我的mac上编译它时,都会说:
move.java:31: error: unreachable statement
repaint();
^
Note: move.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error
当我尝试在Windows计算机上编译它时,它运行得很好!我找不到任何关于修复它的东西,并且根据java网站,不推荐使用repaint()方法!这是我的代码:
import java.awt.*;
public class move extends java.applet.Applet implements Runnable {
Image osI;
Graphics osG;
Thread runner;
char currkey;
int x;
int y;
public void init() {
x = 0;
y = 1;
setBackground(Color.yellow);
osI = createImage(size().width, size().height);
osG = osI.getGraphics();
}
public void start() {
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}
public void run() {
while (true) {
y = 1;
}
repaint();
try { Thread.sleep(1000); }
catch (InterruptedException e) { }
}
public void stop() {
if (runner != null) {
runner.stop();
runner = null;
}
}
public boolean keyDown(Event evt, int key) {
switch (key) {
case Event.DOWN:
x = 1;
break;
}
repaint();
return true;
}
public void paint(Graphics g) {
if (x == 1) {
g.drawString("x is 1!!!", 150, 150);
} else {
g.drawString("x is geen 1!!!", 150, 150);
}
if (y == 1) {
g.drawString("y is 1!!!", 150, 175);
} else {
g.drawString("y is geen 1!!!", 150, 175);
}
g.drawImage(osI, 0, 0, this);
osG.setColor(getBackground());
osG.fillRect(0, 0, size().width, size().height);
osG.setColor(getForeground());
}
}
答案 0 :(得分:1)
您的错误并不是说不推荐使用repaint()。事实上,使用弃用的方法根本就没有错误。
因为你的无限循环:
while (true) {
y = 1;
}
repaint();
答案 1 :(得分:0)
这while-loop
...
while (true) {
y = 1;
}
repaint();
永远不会退出,因此,永远不能调用repaint
Thread#stop
已被弃用...
runner.stop();
你永远不应该使用它。相反,请创建一个AtomicBoolean
标记,您可以在while-loop
中使用该标记,当它的值为true
时,保持循环。在stop
方法中,将AtomicBoolean
的值设置为false
,循环将退出。
请参阅Java Thread Primitive Deprecation了解stop
(以及其他Thread
方法已被弃用的原因)
Applet#size
已被弃用...
osG.fillRect(0, 0, size().width, size().height);
使用getWidth
和getHeight
java.awt.Applet
已超过15年。说真的,相反,你应该至少使用JApplet
,但即便如此,我还是建议将你的核心逻辑移到JPanel
,然后简单地将它添加到你想要使用的容器中除了获得双缓冲支持而无需任何额外工作外,您还可以灵活地决定如何使用该组件,坦率地说,现在有更好的方法使用applet。
答案 2 :(得分:0)
错误是因为您有无法访问的代码
while (true) {
y = 1;
}
意味着永远不会调用repaint()方法,因为循环永远不会结束。