【问题标题】:Javac compilation and execution of 2 java filesjavac编译执行2个java文件
【发布时间】:2011-12-28 06:12:54
【问题描述】:

该程序由两个文件 filter.java 编写 - 其中是主要功能和 ClasifiedWord.java 是唯一的容器类。我在 eclipse 上的 windows 上写的,但想在 Linux javac 编译器上编译它。

javac filter.java ClasifiedWord.java

运行没有错误,但是当我尝试运行程序时:

snowy:Filter$ java filter 
Exception in thread "main" java.lang.NoClassDefFoundError: filter
Caused by: java.lang.ClassNotFoundException: filter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: filter.  Program will exit.
snowy:Filter$ javac filter.java ClasifiedWord.java
snowy:Filter$ java filter ClasifiedWord
Exception in thread "main" java.lang.NoClassDefFoundError: filter
Caused by: java.lang.ClassNotFoundException: filter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: filter.  Program will exit.

如何运行程序?看来编译没问题。我怀疑我可能对程序中的文件路径犯了一个错误....但我认为情况并非如此? 感谢您的回答!

【问题讨论】:

  • 当前目录是否自动添加到类路径中?如果没有,运行 java -classpath . filter 可能会有所帮助。
  • 拼写说明:您的班级可能应该命名为ClassifiedWord(有两个s)。

标签: java compilation terminal javac execution


【解决方案1】:

键入以下命令。

java -classpath . filter

如果您只想输入 java filter,请按照这些指南操作。

附:最后一条命令java filter ClasifiedWord 表示运行程序 filter 并使用字符串 ClasifiedWord 作为参数。

【讨论】:

    【解决方案2】:

    Roland 在评论中是正确的,您应该可以使用java -classpath <folderContainingDotClassFiles> filter 运行它。此外,您应该将 filter.java 更改为 Filter.java,因为类名(包括包含它们的文件)的标准 Java 约定是将第一个字母大写。

    【讨论】:

      【解决方案3】:

      这看起来你要么有一个错误的 CLASSPATH 设置(通常你根本不需要这个,但如果你有它,它应该在列表中包含.,用于当前目录),或者你正在使用包(错误地),或两者兼而有之。对于类路径问题,请参阅其他答案。

      如果您使用包,即您的文件在开头包含package ...; 行,则应根据包结构将源文件放在目录结构中。例如,如果您有package example;,那么您的当前目录中应该有一个example 目录,并且在这两个源文件中。

      然后像这样调用编译器和解释器:

      javac example/filter.java example/ClasifiedWord.java
      java example.filter
      

      (这里假设filter是主类,否则替换它的名字。)

      【讨论】:

        猜你喜欢
        • 2015-08-11
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多