You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
2 weeks ago | |
|---|---|---|
| .. | ||
| AI.txt | 2 weeks ago | |
| Circle.class | 2 weeks ago | |
| Circle.java | 2 weeks ago | |
| Main.class | 2 weeks ago | |
| Main.java | 2 weeks ago | |
| QQ20260326-202006.png | 2 weeks ago | |
| README.md | 2 weeks ago | |
| Rectangle.class | 2 weeks ago | |
| Rectangle.java | 2 weeks ago | |
| ShapeUtil.class | 2 weeks ago | |
| ShapeUtil.java | 2 weeks ago | |
| Triangle.class | 2 weeks ago | |
| Triangle.java | 2 weeks ago | |
| class_diagram_matplotlib.png | 2 weeks ago | |
| shape.class | 2 weeks ago | |
| shape.java | 2 weeks ago | |
README.md
Lab 项目启动故障诊断与修复技术报告
项目路径:D:\VisualStudioProgram\VSCodePrograms\JavaProjects\Lab
运行环境:Windows + PowerShell 5 + JDK 25.0.2
目标与验收标准
- 诊断并修复导致项目无法编译/运行的全部错误
- 确保在
Lab目录下可以“一次性”完成编译并启动 - 验证既有图形面积计算与打印功能可正常工作,并保留日志证据
过程记录(按时间顺序)
1)首次复现:编译失败(类名与文件名不一致)
报错原始输出(完整)
执行命令(在 D:\VisualStudioProgram\VSCodePrograms\JavaProjects 目录下):
javac -encoding UTF-8 Lab\*.java
编译器输出:
Lab\Main.java:3: 错误: 类 main 是公共的, 应在名为 main.java 的文件中声明
public class main {
^
1 个错误
根本原因分析
Main.java文件内声明的是public class main(类名为小写main)。- Java 规则:
public顶级类名必须与文件名完全一致(区分大小写)。因此Main.java只能声明public class Main。
修复步骤
- 将
Main.java中的public class main更正为public class Main。
验证方式与结果
- 重新执行
javac编译,返回码为0(编译通过)。
2)启动方式问题:包声明与目录作为“项目根”不匹配(导致直接在 Lab 目录下不便运行)
现象说明
源码最初包含 package Lab;。当用户将 Lab 目录直接作为工作目录(也就是把 Lab 当作 classpath 根)时:
package Lab;期望类文件位于...\Lab\Lab\下(相对 classpath 根多一层Lab目录)。- 但实际源码文件就位于
...\Lab\,导致“在 Lab 目录直接编译/运行”的体验与包结构冲突。
根本原因分析
- “包名/目录层级/运行时 classpath 根”三者不一致。
- 本项目为单文件夹小练习,更符合“默认包 + 在 Lab 目录直接 javac/java”的使用方式。
修复步骤
- 从以下源码文件中移除
package Lab;声明,使其落在默认包:Main.javashape.javaCircle.javaRectangle.javaTriangle.javaShapeUtil.java
- 调整
Main.java以调用现有功能(创建图形并打印面积),用于功能验证。
验证方式与结果
在 D:\VisualStudioProgram\VSCodePrograms\JavaProjects\Lab 目录下执行:
javac -encoding UTF-8 *.java
java Main
程序成功启动并输出面积信息(见“最终成功证据”)。
3)验证阶段二次报错:PowerShell 5 不支持 && 作为语句分隔符
报错原始输出(完整)
执行命令(在 Lab 目录下):
javac -encoding UTF-8 *.java && java Main
PowerShell 输出:
所在位置 行:1 字符: 30
+ javac -encoding UTF-8 *.java && java Main ; exit $LASTEXITCODE
+ ~~
标记“&&”不是此版本中的有效语句分隔符。
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : InvalidEndOfLine
根本原因分析
- Windows PowerShell 5 不支持
&&作为命令连接符(该特性在 PowerShell 7 才提供)。
修复步骤
- 将“编译成功才运行”的命令改为 PowerShell 5 兼容写法:
javac -encoding UTF-8 *.java; if ($LASTEXITCODE -eq 0) { java Main }
验证方式与结果
- 以上命令在 PowerShell 5 下成功执行并得到正确输出(见“最终成功证据”)。
最终成功证据(日志)
JDK 版本:
javac 25.0.2
在 Lab 目录下编译并启动:
javac -encoding UTF-8 *.java; if ($LASTEXITCODE -eq 0) { java Main }
The area of the shape is: 12.566370614359172
The area of the shape is: 12.0
The area of the shape is: 25.0
预防同类问题的改进建议
- 规范类/文件命名:任何
public class X必须位于X.java中,并保持大小写一致。 - 明确“项目根”概念:若使用
package,应保证源码目录层级与包名一致;否则采用默认包并在同一目录下编译运行。 - 统一运行脚本:在 Windows 环境建议提供 PowerShell 5 兼容命令,或明确要求 PowerShell 7+ 才能使用
&&。