哪些问题阻止Java应用程序在多个平台上运行?

时间:2009-01-17 16:36:55

标签: java cross-platform

Java应该是“一次编写,随处运行”,它确实可以,但在某些情况下,它会变成“一次编写,到处调试”。

将Java应用程序从一个平台移动到另一个平台时出现问题的最常见原因是什么?

什么是不常见但有趣的原因?

8 个答案:

答案 0 :(得分:31)

  • 不要对文件系统的案例(in)敏感性做出假设
  • 不要对路径或目录分隔符进行假设
  • 不要对行终止符进行假设
  • 请不要使用默认的平台编码,除非您真的,非常确定您的意思
  • 不要启动“cmd.exe”等(我知道,这听起来很明显 - 但我看到它会导致问题)

答案 1 :(得分:14)

UI领域很少:

  • 按钮的排序不正确,例如“确定/取消”
  • 使用绝对布局
  • 不同的加速键
  • 不同尺寸/字体渲染
  • 指出某些键存在(Windows键,Meta键)

(但这些不是Java特定的)

答案 2 :(得分:9)

我只能从个人经历中说出来。这些是我见过的东西:

  1. 在某些体系结构上,线程的抽象方式不同,因此在延迟和可能的排序方面存在细微差别。 (这可能导致一些竞争条件)
  2. 控制键盘的状态(大写锁定,数字锁定等)并不总是按预期工作(Linux不允许我将大写锁定更改为当时禁用的v1.5)

答案 3 :(得分:7)

使用Sun JDK附带的com.sun.*包中的类。

答案 4 :(得分:6)

假设您可以写入包含您的应用程序的目录。

答案 5 :(得分:4)

使用JNI是值得研究的问题。为每个目标平台提供本机库可以减少这个问题。

答案 6 :(得分:1)

有许多不同的JVM,因此根据客户端在其盒子上安装的JVM,它们的结果可能略有不同。

答案 7 :(得分:1)

脱离我的头脑......其中一些实际上发生在工作中

  • JNI

  • 介绍了开发工具 字符到格式化字符串 在Windows下工作的文字 但是在Linux下没有用(这个 实际上发生了)

  • 文件系统不一致(将应用程序紧密耦合到一个环境)

  • 可用内存或内核等基础硬件可能会导致行为更改