Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javac:未找到包错误_Java - Fatal编程技术网

javac:未找到包错误

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

我试图编译一个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 
... 

有什么想法吗?

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
一旦完成了这些更改,就可以编译类了。要执行此操作,请在CLASSPATH环境变量中显式定义用户类路径,以包括源代码树的根:

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。除非包名和文件夹名匹配,否则它不会让我编译。谢谢你的提示