error when compiling java program 'Cannot find symbol'

本小妞迷上赌 提交于 2019-12-12 01:45:15

问题


I get these errors when trying to compile 'PongMain.java' with the javac -g command in terminal:

Errors:

    tests-iMac:~ finnfallowfield$ javac -g /Users/finnfallowfield/Desktop/Developer/Java\:Javascript/Game\ Development/Java\ Pong/src/main/pong/PongMain.java 
/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/main/pong/PongMain.java:9: error: cannot find symbol
import main.pong.Ball;
                ^
  symbol:   class Ball
  location: package main.pong
/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/main/pong/PongMain.java:10: error: cannot find symbol
import main.pong.PaddleLeft;
                ^
  symbol:   class PaddleLeft
  location: package main.pong
/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/main/pong/PongMain.java:11: error: cannot find symbol
import main.pong.PaddleRight;
                ^
  symbol:   class PaddleRight
  location: package main.pong
/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/main/pong/PongMain.java:15: error: cannot find symbol
    Ball ball;
    ^
  symbol:   class Ball
  location: class PongMain
/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/main/pong/PongMain.java:16: error: cannot find symbol
    PaddleLeft pLeft;
    ^
  symbol:   class PaddleLeft
  location: class PongMain
/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/main/pong/PongMain.java:17: error: cannot find symbol
    PaddleRight pRight;
    ^
  symbol:   class PaddleRight
  location: class PongMain
/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/main/pong/PongMain.java:29: error: cannot find symbol
        ball = new Ball();
                   ^
  symbol:   class Ball
  location: class PongMain
/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/main/pong/PongMain.java:30: error: cannot find symbol
        pLeft = new PaddleLeft();
                    ^
  symbol:   class PaddleLeft
  location: class PongMain
/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/main/pong/PongMain.java:31: error: cannot find symbol
        pRight = new PaddleRight(ball.getY() - 35);
                     ^
  symbol:   class PaddleRight
  location: class PongMain
9 errors

I'm trying to compile a pong game, all other java files compiled fine but this one did not. Here is the code for the file I'm trying to compile:

File source code:

package main.pong.main;

import java.applet.*;
import java.awt.event.*;
import java.awt.*;

import javax.swing.Timer;

import main.pong.Ball;
import main.pong.PaddleLeft;
import main.pong.PaddleRight;

public class PongMain extends Applet implements MouseMotionListener, ActionListener
{
        Ball ball;
        PaddleLeft pLeft;
        PaddleRight pRight;
        Font newFont = new Font("sansserif", Font.BOLD, 20);
        Graphics bufferGraphics;
        Image offscreen;
        final int WIDTH = 500, HEIGHT = 300;
        long currentTime;

        public void init()
        {
                //Sets the applet to be 500 * 300
                setSize(500, 300);
                //Initiate ball and two paddles
                ball = new Ball();
                pLeft = new PaddleLeft();
                pRight = new PaddleRight(ball.getY() - 35);

                //Add mousMotionListener
                addMouseMotionListener(this);
                setBackground(Color.blue);
                offscreen = createImage(WIDTH, HEIGHT);
                bufferGraphics = offscreen.getGraphics();
        }

        public void start(){
                currentTime = System.currentTimeMillis();
                //Set up frame-rate
                Timer time = new Timer(15, this);
                time.start();
                while(pRight.getScore() < 10){
                }
                time.stop();
                currentTime = System.currentTimeMillis() - currentTime;
                repaint();
        }

        public void stop(){

        }

        public void paint(Graphics g)
        {
                bufferGraphics.clearRect(0,0,WIDTH,HEIGHT);
                bufferGraphics.setColor(Color.green);
                //Left side
                bufferGraphics.fillRect(pLeft.XPOS,pLeft.getPos(),10,70);
                //Right side
                bufferGraphics.fillRect(pRight.XPOS, pRight.getPos(), 10, 70);

                //White lines
                bufferGraphics.setColor(Color.white);
                bufferGraphics.setFont(newFont);
                bufferGraphics.drawString("Futile", 150, 15);
                bufferGraphics.drawString(""+ pRight.getScore(),300,15);
                bufferGraphics.fillRect(240,0,20,300);

                if(pRight.getScore() == 10){
                        //Display for how long game lasted
                        bufferGraphics.drawString("You Lasted: " + (currentTime/ 1000) + "sec.", 40, 150);
                }

                //We draw the ball
                bufferGraphics.setColor(Color.red);
                bufferGraphics.fillRect(ball.getX(), ball.getY(),10, 10);

                g.drawImage(offscreen,0,0,this);
                Toolkit.getDefaultToolkit().sync();
    }


    // STUFF
        public void update(Graphics g)
        {
                paint(g);
        }

        public void mouseMoved(MouseEvent evt)
        {
                pLeft.setPos(evt.getY()- 35);
        }

        public void mouseDragged(MouseEvent evt)
        {
        }

        public void checkCollision(){
                if(ball.getY() == 0 || ball.getY() == 290){
                        ball.dy = (ball.dy * -1);
                }

                if((ball.getX() == 40) && hitPaddle()){
                        ball.dx = (ball.dx * -1);
                }

                if(ball.getX() == 460){
                        ball.dx = (ball.dx * -1);
                }

                if(ball.getX() == 0){
                         pRight.setScore(pRight.getScore() + 1);
                         ball.reset();
                }
        }

        public boolean hitPaddle(){
                boolean didHit = false;

                if((pLeft.getPos() - 10) <= ball.getY() && (pLeft.getPos() + 70) > ball.getY()){
                        didHit = true;
                }
                return didHit;
        }

        @Override
        public void actionPerformed(ActionEvent arg0) {
                ball.move();
                pRight.setPos(ball.getY() - 35);
                checkCollision();
                repaint();
        }
}

Thank you for reading, please reply and note that I am a complete beginner to java and stack exchange so I will need a lot of help fixing this!


回答1:


For this to compile correctly, a few external conditions need to be true:

  1. There has to be a class named main.pong.Ball
  2. Either Ball.java or Ball.class has to be available
  3. If it's the source file, it either has to be in a directory main/pong available to the compiler on the compile-time class path, or it has to be named on the javac command line
  4. If it's the class file, then it needs to be in a directory main/pong on the compile-time class path.

One of these conditions isn't being met; meet them all, and these problems should disappear (replaced, perhaps, with new ones, of course.) In general, the easiest way to achieve this given the setup you seem to have would be to use a "cd" command to change into the directory /Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/, and then run javac main/pong/PongMain.java.



来源:https://stackoverflow.com/questions/18674797/error-when-compiling-java-program-cannot-find-symbol

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!