моя программа не может прочитать ключи из-за "Исключение в потоке" AWT-EventQueue-0 "java.lang.UnsupportedOperationException: пока не поддерживается". - PullRequest
0 голосов
/ 28 января 2019

Я программирую игру со змеями на Netbeans Java 8, и когда я программировал часть клавиш, она не работала из-за Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: Not supported yet.

Может кто-нибудь сказать мне, что решение или любой другой метод, который я могу использовать, чтобы управлять моей змеей, особенно в строке 135.

**package mainclass;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;

/**
 *

 */
public class gamepanel extends JPanel implements Runnable,KeyListener{


       private static final long serialversionid = 1L;

    public static final int WIDTH =500,HEIGHT =500;

    private Thread thread;

    private boolean  running;
    private boolean right =true,left=false,up=false,down=false;
    private bodyparts b;
    private ArrayList<bodyparts> snake;
    private int xcoor = 10,ycoor = 10, size= 5;
    private int ticks =0;


public gamepanel(){

    setFocusable(true);
    setPreferredSize(new Dimension(WIDTH,HEIGHT));
    addKeyListener(this);
    snake = new ArrayList<bodyparts>();
    start();


}
  public void start(){

           running = true;
           thread = new Thread(this);
           thread.start();
  }  
  public void stop(){

           try {
               running = false;
               thread.join();
           } catch (InterruptedException ex) {
               Logger.getLogger(gamepanel.class.getName()).log(Level.SEVERE, null, ex);
           }



  } 
  public void tick(){
      if (snake.size() == 0) {
          b = new bodyparts(xcoor,ycoor,10);
          snake.add(b);
      }
      ticks++;
      if(ticks>250000){
      if(right)xcoor++;
      if(left)xcoor--;
      if(up)ycoor--;
      if(down)ycoor++;
      ticks = 0;
      b = new bodyparts(xcoor,ycoor,10);
      snake. add (b);
      if(snake.size()>size){
          snake.remove(0);
          if(snake.size()>size){

          snake.remove(0);
          }
      }





  }
  }
  public void paint(Graphics g){
      g.setColor(Color.black);
      g.fillRect(0, 0, WIDTH, HEIGHT);



      for (int i = 0; i < WIDTH/10; i++) {
         g.drawLine(i*10, 0, i*10, HEIGHT);


      }
   for (int i = 0; i < WIDTH/10; i++) {
         g.drawLine(0,i*10, HEIGHT, i*10);


      }
      for (int i = 0; i < snake.size(); i++) {
          snake.get(i).draw (g);

      }

  }
  public void run(){
while (running){
repaint();
    tick();


}







}



   // @Override
    public void keyPressed(KeyEvent e) {

int key = e.getKeyCode();
if(key==KeyEvent.VK_RIGHT&&!left){
right = true;
left=false;
up= false;
down = false;

}
if(key==KeyEvent.VK_LEFT&&!right){
right = false;
left=true;
up= false;
down = false;

}
if(key==KeyEvent.VK_UP&&!down){
right = false;
left=false;
up= true;
down = false;

}
if(key==KeyEvent.VK_DOWN&&!up){
right = false;
left=false;
up= false;
down = true;

}
    }

   // @Override
    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
     //@Override
    public void keyTyped(KeyEvent e) {


}

    }**

Я ожидаю, что змею будут контролировать, но это не так, и когда я пытаюсь контролировать ее, это большое исключение Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: Not supported yet.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

@ SizeableShrimp идентифицировал причину вашего исключения.

Когда вы реализуете KeyListener в классе приложения, вам необходимо предоставить реализации для методов keyPressed и keyReleased,По-видимому, вы сделали это, используя IDE для генерации реализаций заглушки.

Проблема в том, что реализации заглушки не обязательно будут работать .IDE не "знает", что означают методы ... или что они должны делать в вашем приложении.В этом случае IDE вставила реализацию, которая предназначена , чтобы вызвать исключение, если оно вызывается ... напоминая вам, что нужно , чтобы посмотреть на код и реализовать метод


В этом случае действительно необходимо правильно реализовать метод keyRelease, так как он будет вызываться всякий раз, когда вы отпускаете клавишу, которую вы ранее нажимали.

Нореализация проста.Действительно просто.Ваш метод вообще ничего не делает, потому что ключевые выпуски не имеют отношения к вашей игре.

ИЛИ ЛУЧШЕ ЕЩЕ : Делайте это иначе, согласно комментариям @ MadProgrammer!


Уроки:

  1. Рекомендуется прочитать javadocs для интерфейсов, которые вы добавляете в свои классы, чтобы вы поняли что нужно реализовать.
  2. Прочитайте код, который добавляют для вас мастера завершения IDE.Они не всегда понимают это правильно.(Они не могут!)
  3. Когда вы получите исключение, прочитайте трассировку стека.Он скажет вам, где произошло исключение.Затем посмотрите на код ... и подумайте о нем.
  4. Сообщение "Пока не поддерживается".большая подсказкаГоворят, что кто-то еще не закончил работу по кодированию чего-либо.(В данном случае это кто-то был вы.)

Самый важный инструмент отладки для программистов - это его / ее мозг и способность собирать ключи для диагностики проблем.Это требует практики.Мой совет - начать практиковать!

0 голосов
/ 28 января 2019
public void keyReleased(KeyEvent e) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

Этот метод вызывает проблему.Удалите строку, в которой выдается исключение, и оставьте его пустым.В тот момент, когда вы отпускаете ключ, этот метод запускается и выдает исключение.

...