javac:找不到包错误

时间:2009-12-28 22:03:15

标签: java

我正在尝试编译一个导入我创建的其他包的java文件;然而,它似乎没有找到它们。

在我的compile.bat文件中,我有:

set classpath=c:\t\DB;c:\t\Frame 
javac comchange.java 

其中commChange.java的开头部分有

package commchange;

import java.sql.*;
import java.awt.event.*;
import java.applet.*;
import DB.*;
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.Graphics;
import Frame.*;

,目录结构为:

c:\t\commChange.java
c:\t\DB
c:\t\Frame

我得到的错误是:

commChange.java:12: package DB does not exist 
import DB.*; 

commChange.java:17: package Frame does not exist 
import Frame.*;

commChange.java:23: cannot find symbol 
symbol: class Frame 
... 

有什么想法吗?

3 个答案:

答案 0 :(得分:8)

classpath是目录根列表,其中加载了由package.ClassName标识的类。您需要设置以下classpath

set classpath=c:\t

答案 1 :(得分:4)

我有几个评论(因为很多事情确实是错误的):

  • 传统上,包具有所有小写名称,即dbinvoicechangeframe等。
  • Sun coding standards要求类以大写字母开头,即commChange应命名为CommChange,编译单元应使用相同的名称CommChange.java
  • 源文件应安排在反映其包树的目录树中,这意味着invoicechange.CommChange应位于C:\t\invoicechange\CommChange.java

完成这些更改后,您将能够编译您的课程。为此,请在CLASSPATH环境变量中显式定义用户类路径以包含源树的根目录:

C:> set CLASSPATH=C:\t;%CLASSPATH%

只需从javac目录中调用C:\t

C:> dir
invoicechange/ db/ frame/
C:> dir invoicechange
CommChange.java 
C:> javac invoicechange\CommChange.java
C:> dir invoicechange
CommChange.class  CommChange.java

请注意,如果未设置用户类路径(因此不覆盖默认类路径),javac将使用当前目录作为默认路径。换句话说,从javac调用C:\t而不在CLASSPATH环境变量中设置用户类路径就可以了。

有关详细信息,请参阅Setting the class path。实际上,您还应该查看javac的文档。阅读之前提到的Sun coding standards也是一个好主意。

答案 2 :(得分:2)

你至少有三个大问题。首先,类路径需要指向第一个答案中提到的“root”文件夹。导入数据库时​​,需要开始查找名为t的文件夹。 (令我烦恼的是,您发布的错误消息,列出导入数据库。*;在错误消息中,导出突出显示为类名而不是关键字。)

其次,没有Frame包,因此尝试导入Frame。*的import语句根本没有任何意义。如果要导入Frame类,可以导入java.awt.Frame;,但是已经有java.awt包的通配符导入,所以你不需要它。

最后,文件comChange.java必须位于文件夹C:\ t \ InvoiceChange中,而不是位于C:\ t文件夹中。那是因为它属于InvoiceChange包。