2015-02-12 3 views
-2

Я пытаюсь сделать стандартную форму для простых игр, но каждый раз, когда я пытаюсь скомпилировать его на мой макинтош, он говорит:осуждается перекрасить() на макинтош

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

Недостатки и недостижимый код не связаны. Кстати, вы можете сделать то, что он предлагает: «Перекомпиляция с -Xlint: устаревание для деталей». Если это вас беспокоит. –

+0

Это не говорит о том, что 'repaint' устарел, он говорит, что ваш вызов' repaint(); 'недостижим, а также что * something * устарел (и использовать параметр командной строки' -Xlint: устаревший', если вы хочу посмотреть подробности) – immibis

ответ

1

Вы ошиблись, говорят, что repaint() устарел. Фактически, использование устаревших методов вызывает ошибку вообще.

Его из-за своего бесконечного цикла:

while (true) { 
    y = 1; 
} 
repaint(); 
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 и просто добавить это к тому, что когда-либо предназначалось для использования, помимо получения двойной поддержки буферизации без любая дополнительная работа, вы также получаете гибкость, чтобы решить, как использовать компонент, так как, честно говоря, есть лучшие подходы, а затем использование апплета в настоящее время.

0

Ошибка в том, что у вас есть код недостижим

while (true) { 
     y = 1; 
    } 

означает, что метод перекрасить() никогда не будет называться как цикл никогда не заканчивается.

Смежные вопросы