Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 爪哇语;无法找到或加载主类“;带有类路径错误_Java_Command Line_Jar_Classpath - Fatal编程技术网

Java 爪哇语;无法找到或加载主类“;带有类路径错误

Java 爪哇语;无法找到或加载主类“;带有类路径错误,java,command-line,jar,classpath,Java,Command Line,Jar,Classpath,在Java中使用-cp或-classpath标志编译时,我一直面临一个问题。我将尝试解释以下问题: 比方说;我有两个文件-A.java和B.java。java有一个简单的公共类,带有一个私有实例变量、一个get和一个set方法。java是A的驱动方法,它实例化A;为A的实例变量设置一些值,并最终使用A中的get方法打印出该值 我可以从命令行编译A.java和B.java。如果两个编译的类文件位于同一文件夹中;以下各项运行良好: javab 但是,;假设我在一个单独的文件夹中保存一个.class。

在Java中使用-cp或-classpath标志编译时,我一直面临一个问题。我将尝试解释以下问题:

比方说;我有两个文件-A.java和B.java。java有一个简单的公共类,带有一个私有实例变量、一个get和一个set方法。java是A的驱动方法,它实例化A;为A的实例变量设置一些值,并最终使用A中的get方法打印出该值

我可以从命令行编译A.java和B.java。如果两个编译的类文件位于同一文件夹中;以下各项运行良好:

javab

但是,;假设我在一个单独的文件夹中保存一个.class。甚至更好;我将类文件的JAR文件设为.class。现在;我应该能够用正确声明的类路径编译B.java

编辑工作

javac-cp..\Lib\A.jar-d..\Bin B.java

它按预期将B.class文件放入Bin文件夹中。现在;如果我转到Bin文件夹并尝试执行以下操作

java -cp ..\Lib\A.jar B
我得到一个错误:

Error: Could not find or load main class B
现在;在过去的几天里,我一直在徒劳地试图解决这个问题。这是一个演示问题的简单用例;但实际上,我无法使用-classpath或-cp标志链接到现有的JAR库。从命令行运行Java程序的唯一方法是从JAR归档文件中提取类文件,并将其与输出类放在同一目录中。因此,我不需要在执行命令中包含classpath标志

但这是我不想要的。我希望将JAR存档与源代码的输出类文件分开。我知道使用IDE;这是我不需要担心的事情。但我对命令行解决方案更感兴趣;了解引擎盖后面的内容

我已经看过了关于StackOverflow的所有其他建议,但似乎都不起作用。仅供参考,我在所有情况下都使用默认软件包。没有明确规定包装

请帮忙。提前谢谢

更新:我被要求以可读的格式提供我的目录结构,因此:

$pwd
C:\My\Path\To\Java\Programs\Top
$ls
Source
Bin
Lib
$cd Bin 
$ls
B.class
$ls ..\Source\
A.java
B.java
$ls ..\Lib
A.jar
$jar tf ..\Lib\A.jar
META-INF
META-INF/MANIFEST.MF
A.java
A.class

我希望这能澄清这一点。我正在使用Windows Powershell,因此子目录标记为“\”。如果我在Unix终端中键入,它将改为“/”。顺便说一下,我在Ubuntu14.04上试过这个,但没有成功。我还用JDK1.6到JDK1.8测试了这一点——同样的错误。

而不是以下内容:

java-cp..\Lib\A.jar B

提供这个

java B-cp..\Lib\A.jar

谢谢

Aritra

您在尝试运行程序时遗漏了“类路径”

有人错误地认为“-cp..\Lib\A.jar”是在运行时包含一个.class。但问题是,“-cp”选项是设置类路径而不是包含。这样一来,就丢失了类“B”的类路径

因此,要从“Bin”文件夹运行程序,正确的命令(对于任何Windows系统)是:“java-cp...\Lib\A.jar B”。“.”表示当前目录,起着至关重要的作用

对于Linux,来自“Bin”文件夹的命令变成:“java-cp.../Lib/A.jar B”


主要区别在于分隔符“”用于Windows,“”用于Linux

源文件顶部的包声明是什么?没有包声明。我使用的是默认软件包,不能在Windows上运行(bot Windows 7和8,以及JDK 1.7)。编译工作正常,但如果我试图通过调用
java-cp..\Lib\A.jar B
运行,则会出现以下错误:
错误:另一方面,如果我在命令末尾添加
-cp
标志,则无法找到或加载主类B
;我得到这个错误:
线程“main”java.lang.NoClassDefFoundError:A在B.main(B.java:6)中出现异常,原因是:java.lang.ClassNotFoundException:A
我也试过了。这是我第一次尝试的事情之一。不起作用。这个
和适用于Linux的
非常有用。也许你想大胆一点。