Java 分离类和源文件时出现问题
在我的Java 分离类和源文件时出现问题,java,directory-structure,Java,Directory Structure,在我的\u数学软件包中。我将源文件分为bin和src文件夹,如下所示: _Mathematics -> Formulas -> src -> // source files containing mathematical formulas... // Factorial.java bin -> // Factorial.class //
\u数学
软件包中。我将源文件分为bin
和src
文件夹,如下所示:
_Mathematics ->
Formulas ->
src ->
// source files containing mathematical formulas...
// Factorial.java
bin ->
// Factorial.class
// class files containing mathematical formulas...
Problems ->
src ->
// Permutation.java
// source files containing mathematical problems...
bin ->
// Permutation.class
// class files containing mathematical problems...
但是,当我使用main()
编译文件时,出现如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: _Mathematics\Problems
\bin\Permutations (wrong name: _Mathematics/Problems/bin/Permutations)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
下面是Permutation.java
文件,它位于main()
package _Mathematics.Problems.bin;
import _Mathematics.Formulas.bin.Factorial;
public class Permutations {
public static void main(String args[]) {
System.out.printf("There are 10 students. Five are to be chosen and seated in a row for a picture.%nHow many linear arrangements are possible?%n" +
(new Factorial(10).r/new Factorial(5).r) + "%n%n");
System.out.printf("How many permutations are there in the word 'permutation'?%n" +
new Factorial(11).r + "%n%n");
}
}
这是我的另一个文件,Factorial.java
:
package _Mathematics.Formulas.bin;
public class Factorial {
public int o;
public long r;
public Factorial(int num) {
long result = 1;
for(int i = num; i > 0; i--)
result *= i;
this.o = num;
this.r = result;
}
}
我是否应该保留包\u Mathematics.Problems.bin
,或者我应该将其更改为package\u Mathematics.Problems.src代码>
我的代码有什么问题
非常感谢您的帮助。对于类文件,您需要维护程序所期望的文件夹结构
_数学\问题\宾\排列两个值得一提的问题:
bin
目录通常用于可执行文件。这是因为(通常)你的操作系统会有一个指向这些目录的环境设置,所以当你试图运行一个程序时,它知道去哪里看。当您运行Java程序时,Java本身就是可执行文件(您的操作系统需要知道在哪里可以找到它)。操作系统不需要找到实际的Java类文件,Java需要找到它们,因为它使用完全不同的环境设置(类路径)。因此,如果您将Java类文件放在bin目录中,可能是做错了什么
其次,您的包结构(\u Mathematics.Problems.bin
)应该与目录结构完全匹配,但它应该反映类的用途,因此\u Mathematics
和Problems
是包结构的合理部分,但是,bin
或src
不是。通常,我会创建类
和src
目录,然后我的包结构从那里开始
因此,如上所述,要解决此问题:
确保的目录和包结构相同
你的src和类
通过删除包结构的bin部分,这将是
更容易
bin
不是这里的包(或者至少不应该是)。因此,它不应该出现在包名称中(在导入中)。您应该确保bin目录出现在传递给javac
的classpath参数中。线程“main”中的异常仅指示其“main”找不到特定类的线程可以是任何线程,因此不要担心,请确保编译时给出的路径正确。使用Eclipse或Netbeans之类的IDE可以帮助您防止此类问题。这是什么意思?请检查java文件的文件夹结构。你的类文件应该在完全相同的文件夹结构中。谢谢。这是一个很好的解释。我明白了@gv现在想说的话。