CardLayout约束适用于Windows,但不适用于OS X.

all*_*ate 0 java swing

作为序言:我知道代码很粗糙 - 我上周刚刚学习了Java,所以我可以将这个东西放到跨平台进行实验,这样即使我的学生也可以参加OS X机器的研究.

所以我现在在大约10台Windows机器上测试它没有问题,但在OS X上,frame3显示没有任何面板(例如只是一个空白帧).我现在在OS X机器上编译,我看到以下控制台输出:

Exception in thread "main" java.lang.IllegalArgumentException: cannot add to layout:     constraint must be a string
at java.awt.CardLayout.addLayoutComponent(CardLayout.java:190)
at java.awt.Container.addImpl(Container.java:1072)
at java.awt.Container.add(Container.java:363)
at Reflexology1.<init>(Reflexology1.java:150)
at Reflexology1.main(Reflexology1.java:51)
Run Code Online (Sandbox Code Playgroud)

该代码发布在http://pastebin.com/t3vqa0s6

是否有人知道在OS X下可能导致此问题的原因是什么?

Cod*_*ice 6

我的第一个猜测是Windows和Mac机器正在使用不同版本的JDK.您可以通过运行javac -version编译器和java -version运行时环境从命令行进行检查.


Gui*_*let 6

JVM 6仅允许非空 String约束CardLayout.

JVM 7还允许null-value并用emtpy String("")替换它

您可能在一个平台上使用一个版本而在另一个平台上使用另一个版本.