Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
java中的包帮助-导入不起作用 我是C++开发人员——不是java开发人员,但必须让这个代码工作……/P>_Java_Import_Packages - Fatal编程技术网

java中的包帮助-导入不起作用 我是C++开发人员——不是java开发人员,但必须让这个代码工作……/P>

java中的包帮助-导入不起作用 我是C++开发人员——不是java开发人员,但必须让这个代码工作……/P>,java,import,packages,Java,Import,Packages,我有两个公共类将被另一个产品使用。我在每个java文件中使用了package指令 package com.company.thing; class MyClass ... 当我试图编译一个使用我添加的 import com.company.thing.*; javac编译器失败,出现关于com.company不存在的错误。(即使我将其编译在与我刚刚制作的包中的类文件相同的目录中) 我肯定我在做一些愚蠢的事 我已经阅读了这些页面,并试图建立一个目录结构,如/com/company/thing

我有两个公共类将被另一个产品使用。我在每个java文件中使用了package指令

package com.company.thing;

class MyClass ...
当我试图编译一个使用我添加的

import com.company.thing.*;
javac编译器失败,出现关于com.company不存在的错误。(即使我将其编译在与我刚刚制作的包中的类文件相同的目录中)

我肯定我在做一些愚蠢的事

我已经阅读了这些页面,并试图建立一个目录结构,如/com/company/thing等,但要么我完全搞砸了,要么我错过了其他东西

编辑 谢谢你的建议-我以前试过classpath。这没有帮助

我试着编译

javac -classpath <parent> client.java 
我在\com\company\product中有要导入的代码(两个java文件)。我把这些都编好了。(它们包含MyClass)我甚至为它们制作了一个jar文件。我将jar文件复制到父目录

然后我做了(在客户端java文件的父目录中)

编辑

如果我使用MyClass的完全限定名并在父目录中编译它,我将获得要编译和运行的客户机代码。我现在完全糊涂了

编译时未设置类路径-仅

javac *.java 
在父目录中,它工作得很好

我可以编译一个测试应用程序,但当我必须将它集成到生产代码中时,这并不能阻止它。仍在寻求帮助

编辑:

最后,我不知道为什么以前它不工作,但是我清理了目录结构中所有的文件,现在它工作了


谢谢

听起来你的目录结构是正确的。编译依赖代码时,请指定
javac
-classpath
参数。使用
com
目录的父目录,其中
com
依次包含
company/thing/YourClass.class

因此,当您这样做时:

javac -classpath <parent> client.java
javac-classpath client.java

应该是指
com
的父级。如果您在
com
,则可能是
。/

是的,这是一个类路径问题。您需要告诉编译器和运行时.class文件所在的目录是类路径的一部分。需要添加的目录是包结构开头的“com”目录的父目录

您可以使用javac.exe和java.exe的-classpath参数来执行此操作

还应询问您使用的第三方类是如何打包的。如果它们在一个JAR中,我建议您将它们放在一个JAR中,您可以将.JAR文件添加到类路径中:

java -classpath .;company.jar foo.bar.baz.YourClass
谷歌搜索“Java类路径”。它会找到像这样的链接


还有一件事:“导入”不是加载类。它所做的一切都节省了你打字的时间。当您包含导入语句时,您不必在代码中使用完全解析的类名-您可以键入“Foo”而不是“com.company.thing.Foo”。这就是它所做的一切。

你得到了一大堆好答案,所以我就提出一个建议。如果您打算在这个项目上工作2天以上,请下载eclipse或netbeans并在其中构建您的项目

如果您通常不是java程序员,那么它将为您提供无价的帮助

如果你只花2个小时下载/安装它,那么它就不值得花1/2个小时下载/安装


两者都有用于“修复导入”的热键/菜单项,这样您就不必再担心导入了。

标准Java类加载器是一个目录结构的粘滞器。类路径中的每个条目都是一个目录或jar文件(实际上是zip文件),然后它会搜索给定的类文件。例如,如果您的类路径为“;my.jar”,它将在以下位置搜索com.example.Foo:

./com/example/
my.jar:/com/example/
也就是说,它将在具有包的“修改名称”的子目录中查找,其中“.”替换为文件分隔符


另外,值得注意的是,您不能嵌套.jar文件。

好的,只是为了澄清已经发布的内容

您应该拥有目录
com
,其中包含目录
company
,包含目录
example
,包含文件
MyClass.java

从包含
com
的文件夹中,运行:

$ javac com\company\example\MyClass.java 在testpackage2内部,我创建了MyClass.java,其中包含以下代码:

package testpackage;

import testpackage2.MyClass;

public class TestPackageClass {
    public static void main(String[] args) {
        System.out.println("Hello from testpackage.TestPackageClass!");
        System.out.println("Now accessing " + MyClass.NAME);
    }
}
package testpackage2;
public class MyClass {
    public static String NAME = "testpackage2.MyClass";
}
从包含两个新文件夹的目录中,我运行了:

C:\examples>javac testpackage\*.java C:\examples>javac testpackage2\*.java C:\examples>javac测试包\*.java C:\examples>javac testpackage2\*.java 然后:

C:\examples>java testpackage.TestPackageClass 您好,来自testpackage.TestPackageClass! 现在正在访问testpackage2.MyClass 这会让事情变得更清楚吗?

只需在系统变量和用户变量菜单下添加类路径条目(我指的是父目录位置)。。。
如下:右键单击“我的电脑”>“属性”>“高级”>“环境变量”

向我们显示文件(.java和更重要的.class)的确切布局以及类路径的设置。然后向我们显示来自编译器的确切错误消息。如果没有这些,我们只能将您引导到通用资源/教程。我已经给出了确切的错误消息。很遗憾,我不能发布公司代码。我给出的通用信息是完整的,只是用我公司的名称替换了“company”,我想这是一个类路径问题-但是没有任何建议可以解决这个问题。在
javac-classpath client.java
中,
应该是指
com
上面的目录。如果您在
com
,它将是
。/
。是。
com
目录的
parent
目录。他可能正在使用
com
目录,并将其称为
。但说明中提到的是< $ java com.company.example.MyClass Hello from MyClass!
package testpackage;

import testpackage2.MyClass;

public class TestPackageClass {
    public static void main(String[] args) {
        System.out.println("Hello from testpackage.TestPackageClass!");
        System.out.println("Now accessing " + MyClass.NAME);
    }
}
package testpackage2;
public class MyClass {
    public static String NAME = "testpackage2.MyClass";
}
C:\examples>javac testpackage\*.java C:\examples>javac testpackage2\*.java C:\examples>java testpackage.TestPackageClass Hello from testpackage.TestPackageClass! Now accessing testpackage2.MyClass