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现在想说的话。