javac:未找到包错误
我试图编译一个java文件,该文件导入我创建的其他包;然而,它似乎没有找到它们 在compile.bat文件中,我有:javac:未找到包错误,java,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 jav
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
...
有什么想法吗?
classpath
是目录根列表,在目录根列表中加载由package.ClassName
标识的类。您需要设置以下类路径
:
set classpath=c:\t
你至少有三个大问题。首先,类路径需要指向第一个答案中提到的“根”文件夹。导入DB时,它需要开始查找名为t的文件夹。(不过,让我有点不安的是,您发布的错误消息中列出了Import DB.*;在错误消息中,Import突出显示为类名而不是关键字。) 第二,没有框架包,因此尝试导入Frame.*的import语句毫无意义。如果要导入Frame类,可以导入java.awt.Frame;,但是您已经为java.awt包提供了一个通配符导入,所以您不需要它
最后,comChange.java文件必须位于C:\t\InvoiceChange文件夹中,而不是C:\t文件夹中。这是因为它属于InvoiceChange包 我有几点意见(因为很多事情实际上是错的):
- 传统上,包具有所有小写名称,即
、db
、invoicechange
等frame
- 要求类以大写字母开头,即
应命名为commChange
,编译单元应使用相同的名称commChange
commChange.java
- 源文件应排列在反映其包树的目录树中,这意味着
应位于invoicechange.CommChange
中C:\t\invoicechange\CommChange.java
C:> set CLASSPATH=C:\t;%CLASSPATH%
只需从C:\t
目录调用javac
:
C:> dir
invoicechange/ db/ frame/
C:> dir invoicechange
CommChange.java
C:> javac invoicechange\CommChange.java
C:> dir invoicechange
CommChange.class CommChange.java
请注意,如果不设置用户类路径(因此不覆盖默认类路径),javac
将使用当前目录作为默认目录。换句话说,从C:\t
调用javac
,而不在CLASSPATH环境变量中设置用户类路径就可以了
有关更多详细信息,请参阅。实际上,您还应该查看的文档。阅读前面提到的内容也是一个好主意。这是commChange.java文件位置吗?javac将包名的每个组件匹配为
CLASSPATH
中提到的每个路径内的目录。“导入框架”的目标是从\Frame文件夹导入类。我可能应该换个名字。invoicechange文件夹重命名为commChange。除非包名和文件夹名匹配,否则它不会让我编译。谢谢你的提示