编译Java程序“找不到符号"时发生错误 [英] error when compiling java program 'Cannot find symbol'
问题描述
尝试在终端中使用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:
- 必须有一个名为
main.pong.Ball
的类
- 必须提供
Ball.java
或Ball.class
- 如果它是源文件,则必须在编译时类路径上位于编译器可用的目录
main/pong
中,或者必须在javac
命令行上命名 - 如果是类文件,则它必须位于编译时类路径上的目录
main/pong
中.
- There has to be a class named
main.pong.Ball
- Either
Ball.java
orBall.class
has to be available - 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 thejavac
command line - 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屋!