一个优化了部分使用体验的修改版 Mars

doc(助教)

同学们在使用 Mars 编写 P2 课下汇编程序时,一定遇到过以下问题:

  • IO 面板不能直接复制粘贴多行输入,否则会出现异常
  • Message/IO 面板尺寸较小,且无法进一步增加高度

也许充满创造力的你已经构建了一套基于第三方编辑器 + 命令行运行 Mars 的汇编“一条龙”方案,不再需要使用带 GUI 的 Mars 了,但也请留步,阅读一下这篇帖子,希望能抛砖引玉地为你将来的美妙发明带来一些启发。

注:以下内容为本人在 2022 秋计算机组成课程学习过程中所做的思考与成果分享,有部分适应性改动。本帖中发布内容均系个人过去的成果,对于未来可能发布的工具,请以课程组官方名义发布文件为准

通过阅读原版 Mars 源码(附于 jar 压缩包内),我分析出问题的原因:

  • GUI 读入文本时,如遇一次读入多行的情况(比如接受粘贴文本),会直接“打包”处理带有多个换行符的文本。比如当应用 5 号系统调用读取整数时,Mars 就会尝试转换这类文本到 Integer。正逐渐上手 Java 的你应该知道,这样会产生NumberFormatException异常。简单说就是 Mars 没有正确处理一次性输入的多行文本。我的补丁方案则是在对应的类内部加一个缓存队列,将输入文本中第一个换行符后的全部内容放入缓存,待下一次读取时分行取出。
  • Mars 在创建代码编辑面板时未指定该面板的最小尺寸,导致 Java AWT 在计算编辑面板的最小尺寸时默认了一个较大数值,编辑面板的最小尺寸进一步限制了其下方消息/IO 窗口的最大高度。解决方案就是为代码编辑面板显式地声明最小尺寸为 0。

当然,在经过这样一番修改后,Mars 读入数据的局限性仍然很强,比如我们依然不能在一行输入中方便地按空格来分隔多个整数。当然,本帖作为一个抛砖引玉的软件修改思路参考帖,如果你有更高、更妙的想法,我们鼓励大家在讨论区一起分享、交流。

现将修改后的代码与重打包的jar文件分享给大家。保证修改版 Mars 除输入外,其他功能行为与原版完全一致。

https://bhpan.buaa.edu.cn/link/AA3C6FD01AE6A94651BF709B162D12BEFE存档
文件夹名:MARS_mod
有效期限:2024-01-31 23:59
目录结构说明:jar单个文件可直接运行。modified_codes目录下包含了所有有改动的代码文件,可自行与原版代码比对差异。modified_classes内对应这些代码文件重新编译后的字节码文件。


pigKiller 回复 doc(助教)

在我的电脑上,双击后只出现了打开加载界面(如下),后续并没有打开,请问这可能是什么问题呢,本地环境需要调整吗

屏幕截图 20231020 091348.png


doc(助教) 回复 pigKiller

讨论区这位同学已经给出了解决方案:解决无法打开魔改MARS的问题


抱歉,卡在启动界面的原因应该是我使用了版本较高的 JDK17 进行编译。现已使用 JDK1.8 重新编译并替换了原文件,重新下载即可。感谢指出!

0%