Может ли кто-нибудь помочь объяснить проблему с этим java-кодом
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.geom.*; public class Ball extends JPanel implements ActionListener,KeyListener { private static final long serialVersionUID = -3622302774061996117L; //created an obj for the class Timer Timer t=new Timer(5,this); // created the x y coordinates and made the velocity variables int x=0,y=0,velX=0,velY=0; //created the method and started the timer and added the KeyListener public Ball() { t.start(); addKeyListener(this); setFocusable(true); setFocusTraversalKeysEnabled(false); } //over rode the paint component method and created the obj that is gonna be controled by the arrow keys @Override public void paintComponent(Graphics g) { super.paintComponent(g); this.setBackground(Color.WHITE); g.setColor(new Color(66, 134, 244)); Graphics2D g2= (Graphics2D) g; Ellipse2D circle=new Ellipse2D.Double(x,y,40,40); g2.fill(circle); } //Over rode the action performed method and gave the obj the ability to move @Override public synchronized void actionPerformed(ActionEvent e) { if(x<-40) { velX=0; x=600; } if(y<-40) { velY=0; y=600; } if(x>600) { velX=0; x=-40; } if(y>600) { velY=0; y=-40; } x+=velX; y+=velY; repaint(); } //Over rode the key pressed method so as the user can control the obj by the arrow keys @Override public synchronized void keyPressed(KeyEvent e) { int c=e.getKeyCode(); if(c==KeyEvent.VK_UP) { velY=-3; velX=0; } if(c==KeyEvent.VK_DOWN) { velY=3; velX=0; } if(c==KeyEvent.VK_RIGHT) { velX=3; velY=0; } if(c==KeyEvent.VK_LEFT) { velX=-3; velY=0; } } //Over rode the key released method so as the obj would stop moving when the arrow keys are released @Override public void keyReleased(KeyEvent e) { velY=0; velX=0; } @Override public void keyTyped(KeyEvent e) {} //created the main window public static void main(String [] args) { JFrame frame=new JFrame("moving ball"); Ball b=new Ball(); frame.setSize(600,600); frame.setVisible(true); frame.setResizable(false); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.add(b); JOptionPane.showMessageDialog(null, "let's start\nif it doesn't work then re-run the program please", "message", JOptionPane.DEFAULT_OPTION); } }
теперь этот код должен просматривать круг в окне, которым можно управлять с помощью клавиш со стрелками
это хорошо работает
но проблема в том, что когда я запускаю его, иногда он не работает там, где мяч не движется
когда я перезапускаю его он работает отлично
может ли кто-нибудь дать мне объяснение и некоторые возможные исправления
Спасибо.
Что я уже пробовал:
Я не знаю в чем проблема поэтому хочу от вас ребята помочь
Richard MacCutchan
Я вообще не могу заставить это работать, и кажется, что нажатия клавиш вообще не захватываются. Есть ли какая-то дополнительная опция, которую вы используете при построении программы?
Member 13946476
нет просто попробуйте несколько раз иногда требуется 5-6 чтобы работать ИДК почему
если вы можете проверить код и если вы найдете некоторые возможные исправления пожалуйста помогите мне
Richard MacCutchan
Смотреть ниже.