编译Java程序“找不到符号"时发生错误 [英] error when compiling java program 'Cannot find symbol'

查看:84
本文介绍了编译Java程序“找不到符号"时发生错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试在终端中使用javac -g命令编译"PongMain.java"时出现这些错误:

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

错误:

    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

我正在尝试编译一个pong游戏,所有其他java文件都可以正常编译,但是这个文件没有. 这是我要编译的文件的代码:

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:

文件源代码:

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();
        }
}

感谢您阅读,请回复并注意,我是Java和Java的完整入门者. 堆栈交换,所以我将需要很多帮助来解决这个问题!

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!

推荐答案

为正确编译,需要满足一些外部条件:

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

  1. 必须有一个名为main.pong.Ball
  2. 的类
  3. 必须提供Ball.javaBall.class
  4. 如果它是源文件,则必须在编译时类路径上位于编译器可用的目录main/pong中,或者必须在javac命令行上命名
  5. 如果是类文件,则它必须位于编译时类路径上的目录main/pong中.
  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.

其中一个条件未得到满足;遇到所有问题,这些问题就应该消失了(当然可以用新问题代替.)通常,鉴于您似乎拥有的设置,最简单的方法是使用"cd"命令更改为目录/Users/finnfallowfield/Desktop/Developer/Java:Javascript/Game Development/Java Pong/src/,然后运行javac main/pong/PongMain.java.

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.

这篇关于编译Java程序“找不到符号"时发生错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆