【问题标题】:Compiled package does not run编译的包不运行
【发布时间】:2012-10-07 15:35:58
【问题描述】:

我在D:\ProjectGsc\ 中有一个包含一些类的包。包根文件夹名为gsc,包含三个子目录,即util、core 和modules。它们每个内部都有一些文件,core 内部有一个名为gsc.class 的文件。除此之外,gsc 文件夹内还有一个文件夹 res,其中包含一些由我的包类中的 JFrames 和 JDialogs 使用的图像。我设法使用-classpath \projectgsc 编译所有内容,并且由于代码已经过调试,所有内容都可以顺利编译。但我根本无法运行它。我在D:\ProjetctGsc\gsc\core\ 内部时尝试java gsc -classpath \projectgsc,但它在线程主线程中给了我异常(主线程的语法肯定是正确的)java.lang.NoClassDefFoundError: gsc (wrong name: gsc/core/gsc)。是因为我的班级名称在包gsc.core 内是gsc 吗?

提前致谢! (顺便说一句,我不允许我将问题命名为“运行时的类路径问题”,所以这是我能想到的最好的标题,请随意编辑)

【问题讨论】:

    标签: java classpath packages


    【解决方案1】:

    是的,要在包 gsc.core 中运行一个名为 gsc 的类(这违反了 Java 命名约定,顺便说一句)(ick - 包含类名的包名;令人困惑!)你会写

    java -classpath d:\ProjectGsc gsc.core.gsc
    

    但你必须编译它,以便你有一个目录结构

    d:\ProjectGsc
                 \gsc
                     \core
                          \gsc.class
    

    如果你对 javac 使用-d 选项,你会自动得到这个:

    javac -d d:\ProjectGsc *.java
    

    (当然要相应地调整。)

    您可能会发现,如果您是 Java 新手,使用可以为您处理所有这些的 IDE 会让您的生活更轻松。

    【讨论】:

    • 我知道我违反了命名约定,我打算在某个时候更改名称,我只是想检查一下这是否有效。谢谢 试试看! :)
    • @Spiritios:我会敦促您尽快修复代码以遵循约定。除此之外,每当您使用非常规名称提出问题时,都会让人们更难遵循代码。
    • 好的,现在我可以再问你一件事,因为我对类路径很陌生:当把它变成一个指定类路径的 Jar 时,它会像 jar ...parameters... -classpath \projectgsc 一样好吗?它会在任何地方运行良好还是我会有任何位置依赖性?
    • 我肯定会在其他课程结束后立即这样做,但现在我坚持这样做只是为了快速检查。顺便说一句,我想知道命名类 Gsc 是否会遵循约定?
    • @Spiritios:构建 jar 文件时,您不会使用-classpath。您只需要确保包含所有相关文件,并在 jar 文件中保留适当的目录结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多