b10: regression?

Jonathan Giles jonathan.giles at oracle.com
Thu May 31 17:41:09 PDT 2012


Actually, controls do need to know the screen, but this is just a recent 
change for use in embedded situations. We need to know the screen 
resolution to determine what CSS to load (so we can load CSS more suited 
to lower resolution monitors).

However, this email thread has popped up an issue - we're testing 
whether we're on a QVGA screen even when isEmbedded() is false. Moving 
the check inside the isEmbedded() if block will present getting the 
screen measurements. I'll make this change after lunch.

diff --git 
a/javafx-ui-controls/src/javafx/scene/control/UAStylesheetLoader.java 
b/javafx-ui-controls/src/javafx/scene/control/UAStylesheetLoader.java
--- a/javafx-ui-controls/src/javafx/scene/control/UAStylesheetLoader.java
+++ b/javafx-ui-controls/src/javafx/scene/control/UAStylesheetLoader.java
@@ -64,12 +64,13 @@
                          if (com.sun.javafx.PlatformUtil.isEmbedded()) {
                              url = 
SkinBase.class.getResource("caspian/embedded.css");
                              
StyleManager.getInstance().addUserAgentStylesheet(url.toExternalForm());
+
+                            if (com.sun.javafx.Utils.isQVGAScreen()) {
+                                url = 
SkinBase.class.getResource("caspian/embedded-qvga.css");
+                                
StyleManager.getInstance().addUserAgentStylesheet(url.toExternalForm());
+                            }
                          }

-                        if (com.sun.javafx.Utils.isQVGAScreen()) {
-                            url = 
SkinBase.class.getResource("caspian/embedded-qvga.css");
-                            
StyleManager.getInstance().addUserAgentStylesheet(url.toExternalForm());
-                        }
                          stylesheetLoaded = true;
                      return null;
                  }

-- Jonathan


On 1/06/2012 12:34 p.m., Richard Bair wrote:
> Definitely file a bug. CheckBox should never (ever!) require the Screen to be queried, since looking up the Screens takes time and will negatively impact startup.
>
> Thanks
> Richard
>
> On May 31, 2012, at 3:32 PM, Florian Brunner wrote:
>
>> Hi,
>>
>> On Linux (32-bit) with JavaFX 2.2 b08 I was able to instantiate a control in a unit test, e.g.
>>
>> import javafx.scene.control.CheckBox;
>> import org.junit.After;
>> import org.junit.Before;
>> import org.junit.Test;
>>
>>
>> public class MyTest {
>>
>>     public MyTest() {
>>     }
>>
>>
>>     @Before
>>     public void setUp() {
>>         CheckBox cb = new CheckBox("test");
>>     }
>>
>>     @After
>>     public void tearDown() {
>>     }
>>
>>
>>     @Test
>>     public void someTest() {
>>         System.out.println("someTest");
>>     }
>>
>> }
>>
>> With b10 I'm getting an error:
>>
>> java.lang.ExceptionInInitializerError
>> 	at mypackage.MyTest.setUp(MyTest.java:28)
>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> 	at java.lang.reflect.Method.invoke(Method.java:601)
>> 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
>> 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>> 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
>> 	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
>> 	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
>> 	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
>> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
>> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
>> 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
>> 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
>> 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
>> 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
>> 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
>> 	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
>> 	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:236)
>> 	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:134)
>> 	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:113)
>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> 	at java.lang.reflect.Method.invoke(Method.java:601)
>> 	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
>> 	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
>> 	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
>> 	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:103)
>> 	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)
>> Caused by: java.lang.NullPointerException
>> 	at com.sun.glass.ui.Screen.getMainScreen(Screen.java:15)
>> 	at com.sun.javafx.tk.quantum.QuantumToolkit.getPrimaryScreen(QuantumToolkit.java:589)
>> 	at javafx.stage.Screen.updateConfiguration(Screen.java:102)
>> 	at javafx.stage.Screen.checkDirty(Screen.java:97)
>> 	at javafx.stage.Screen.getPrimary(Screen.java:176)
>> 	at com.sun.javafx.Utils.isQVGAScreen(Utils.java:813)
>> 	at javafx.scene.control.UAStylesheetLoader$1.run(UAStylesheetLoader.java:69)
>> 	at java.security.AccessController.doPrivileged(Native Method)
>> 	at javafx.scene.control.UAStylesheetLoader.loadUAStylesheet(UAStylesheetLoader.java:58)
>> 	at javafx.scene.control.UAStylesheetLoader.doLoad(UAStylesheetLoader.java:51)
>> 	at javafx.scene.control.Control.<clinit>(Control.java:95)
>> 	... 31 more
>>
>>
>> Is this a regression or a desired behaviour? If it's a desired behaviour: Is there a way to write some simple JUnit tests for controls?
>>
>> Regards,
>> Florian


More information about the openjfx-dev mailing list