我正在尝试编译一个导入我创建的其他包的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
...
有什么想法吗?
答案 0 :(得分:8)
classpath
是目录根列表,其中加载了由package.ClassName
标识的类。您需要设置以下classpath
:
set classpath=c:\t
答案 1 :(得分:4)
我有几个评论(因为很多事情确实是错误的):
db
,invoicechange
,frame
等。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包。