Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringLayout不适用于Java 5(mac)垂直_中心_Java_Macos_Swing_Java 5_Springlayout - Fatal编程技术网

SpringLayout不适用于Java 5(mac)垂直_中心

SpringLayout不适用于Java 5(mac)垂直_中心,java,macos,swing,java-5,springlayout,Java,Macos,Swing,Java 5,Springlayout,SpringLayout的文档说,它从java 1.4开始就可以使用,我有7台旧mac电脑,无法升级到任何更新版本的mac os 10.5,这导致我最多只能使用java 1.5.030。问题是,我有一个与spring layout配合使用的应用程序,并且我总是得到这个堆栈跟踪: Exception in thread "main" java.lang.NullPointerException at javax.swing.SpringLayout$SpringProxy.getValue(Spr

SpringLayout的文档说,它从java 1.4开始就可以使用,我有7台旧mac电脑,无法升级到任何更新版本的mac os 10.5,这导致我最多只能使用java 1.5.030。问题是,我有一个与spring layout配合使用的应用程序,并且我总是得到这个堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
at javax.swing.SpringLayout$SpringProxy.getValue(SpringLayout.java:674)
at javax.swing.Spring$CompoundSpring.getValue(Spring.java:420)
at javax.swing.Spring$CompoundSpring.getValue(Spring.java:420)
at javax.swing.SpringLayout.layoutContainer(SpringLayout.java:1004)
at java.awt.Container.layout(Container.java:1401)
at java.awt.Container.doLayout(Container.java:1390)
at java.awt.Container.validateTree(Container.java:1473)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validateTree(Container.java:1480)
at java.awt.Container.validate(Container.java:1448)
at java.awt.Window.show(Window.java:516)
at java.awt.Component.show(Component.java:1317)
at java.awt.Component.setVisible(Component.java:1270)
有什么解决方案、罐子或类似的东西吗

请避免回答“升级您的计算机”

更新:我发现Java上有SpringLayout,但不能在SOUTH上使用垂直布局。我不知道为什么

更新2:按照Ian的指示,我编写了以下代码,但它仍然不能在Java5上工作

springLayout.putConstraint(SpringLayout.NORTH, myImage, 
            Spring.sum(springLayout.getConstraint(SpringLayout.SOUTH, myPanel) ,
                    Spring.sum(Spring.scale(Spring.minus(springLayout.getConstraint(SpringLayout.HEIGHT, myImage)),0.5f),

                            Spring.scale(Spring.minus(springLayout.getConstraint(SpringLayout.HEIGHT, myPanel)),0.5f)
                    )
             ), SpringLayout.NORTH, myPanel);

更新3:将
springLayout.getConstraint(springLayout.HEIGHT,myImage)
替换为
springLayout.getConstraints(myImage.getHeight()
效果非常好:

Java6引入了
VERTICAL\u CENTER
约束类型,这就是为什么它在Java5中不适用的原因。但不变量指定了这一点

VERTICAL_CENTER = NORTH + HEIGHT/2
SOUTH = NORTH + HEIGHT
替换并重新排列我们得到的方程

                     NORTH = SOUTH - HEIGHT

           VERTICAL_CENTER = SOUTH - HEIGHT/2
VERTICAL_CENTER + HEIGHT/2 = SOUTH
                  HEIGHT/2 = SOUTH - VERTICAL_CENTER
                    HEIGHT = 2*(SOUTH - VERTICAL_CENTER)
因此,如果当前正在设置
SOUTH
VERTICAL\u CENTER
,则可以通过将高度设置为
2*(SOUTH-VERTICAL\u CENTER)
大小的弹簧来实现相同的效果。因此,替换

constr.putConstraint(SpringLayout.SOUTH, southSpring);
constr.putConstraint(SpringLayout.VERTICAL_CENTER, vcSpring);


我们需要查看使用springlayout的代码。您正在将null组件添加到容器中,或者其他类似错误。
constr.putConstraint(SpringLayout.SOUTH, southSpring);
constr.setHeight(
  Spring.scale(Spring.sum(southSpring, Spring.minus(vcSpring)),
               2.0f));