编译带外部Jar的Java程序后执行提示找不到主类求助
解决Java运行时找不到主类WriterSample的问题
我来帮你分析下问题所在,以及对应的解决办法:
你的WriterSample.java开头有包声明package com.spotfire.samples;,这意味着Java虚拟机需要在com/spotfire/samples/这个层级目录下找到WriterSample.class文件才能正确加载类,但你之前的编译命令只是把class文件生成在了当前根目录,没有按照包结构存放,所以运行时会出现找不到主类的错误。
正确的操作步骤:
重新编译,生成符合包结构的class文件
使用-d参数指定输出目录(这里用.表示当前目录),让编译器自动创建对应的包目录并把class文件放入正确位置:javac -cp "sbdf.jar" -d . WriterSample.java执行完这个命令后,你会在当前目录下看到
com/spotfire/samples/WriterSample.class文件,这才是符合Java包规范的存放方式。使用全限定类名运行程序
运行时不能再直接写WriterSample,而要使用完整的「包名+类名」,同时保持类路径包含当前目录和sbdf.jar:- 如果你用的是Linux/macOS系统:
java -cp .:./sbdf.jar com.spotfire.samples.WriterSample output.sbdf - 如果你用的是Windows系统,注意类路径的分隔符是
;而非::java -cp .;sbdf.jar com.spotfire.samples.WriterSample output.sbdf
别忘了加上程序要求的输出文件参数
output.sbdf,你的代码里明确需要传入一个参数指定生成的SBDF文件名。- 如果你用的是Linux/macOS系统:
按照上述步骤操作后,程序应该就能正常运行并生成目标文件了。
内容的提问来源于stack exchange,提问作者Bo Qiang
相关产品推荐
相关产品推荐

