-
Bug
-
Resolution: Fixed
-
P4
-
8u66
-
b16
-
x86
-
os_x
FULL PRODUCT VERSION :
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Darwin Chrystas-Air.home 15.0.0 Darwin Kernel Version 15.0.0: Sat Sep 19 15:53:46 PDT 2015; root:xnu-3247.10.11~1/RELEASE_X86_64 x86_64
A DESCRIPTION OF THE PROBLEM :
The number of items enumerated over by UIDefaults.keys() is different than the number of items included in UIDefaults.keySet(). I expect these to be the same.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
This is demonstrated by compiling and running the following code:
import java.util.Enumeration;
import javax.swing.UIManager;
public class UIManagerTest {
public static void main(String[] args) {
int ie = 0;
int is = 0;
Enumeration e = UIManager.getDefaults().keys();
while (e.hasMoreElements()) {
ie = ie + 1;
System.out.println("Enumerated: " + e.nextElement());
}
for (Object k : UIManager.getDefaults().keySet()) {
is = is + 1;
System.out.println("Set: " + k);
}
System.out.println("UIDefaults.keys() contains " + ie + " elements.");
System.out.println("UIDefaults.keySet() contains " + is + " elements.");
}
}
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I was expecting the last two lines to read:
UIDefaults.keys() contains 719 elements.
UIDefaults.keySet() contains 719 elements.
ACTUAL -
The last two lines read:
UIDefaults.keys() contains 719 elements.
UIDefaults.keySet() contains 0 elements.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.Enumeration;
import javax.swing.UIManager;
public class UIManagerTest {
public static void main(String[] args) {
int ike = 0;
int iks = 0;
Enumeration e = UIManager.getDefaults().keys();
while (e.hasMoreElements()) {
ike = ike + 1;
System.out.println("Enumerated: " + e.nextElement());
}
for (Object k : UIManager.getDefaults().keySet()) {
iks = iks + 1;
System.out.println("Set: " + k);
}
System.out.println("UIDefaults.keys() contains " + ike + " elements.");
System.out.println("UIDefaults.keySet() contains " + iks + " elements.");
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
The workaround is to not use enhanced for loops or streams to iterate over the keys in UIDefaults.
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Darwin Chrystas-Air.home 15.0.0 Darwin Kernel Version 15.0.0: Sat Sep 19 15:53:46 PDT 2015; root:xnu-3247.10.11~1/RELEASE_X86_64 x86_64
A DESCRIPTION OF THE PROBLEM :
The number of items enumerated over by UIDefaults.keys() is different than the number of items included in UIDefaults.keySet(). I expect these to be the same.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
This is demonstrated by compiling and running the following code:
import java.util.Enumeration;
import javax.swing.UIManager;
public class UIManagerTest {
public static void main(String[] args) {
int ie = 0;
int is = 0;
Enumeration e = UIManager.getDefaults().keys();
while (e.hasMoreElements()) {
ie = ie + 1;
System.out.println("Enumerated: " + e.nextElement());
}
for (Object k : UIManager.getDefaults().keySet()) {
is = is + 1;
System.out.println("Set: " + k);
}
System.out.println("UIDefaults.keys() contains " + ie + " elements.");
System.out.println("UIDefaults.keySet() contains " + is + " elements.");
}
}
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I was expecting the last two lines to read:
UIDefaults.keys() contains 719 elements.
UIDefaults.keySet() contains 719 elements.
ACTUAL -
The last two lines read:
UIDefaults.keys() contains 719 elements.
UIDefaults.keySet() contains 0 elements.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.util.Enumeration;
import javax.swing.UIManager;
public class UIManagerTest {
public static void main(String[] args) {
int ike = 0;
int iks = 0;
Enumeration e = UIManager.getDefaults().keys();
while (e.hasMoreElements()) {
ike = ike + 1;
System.out.println("Enumerated: " + e.nextElement());
}
for (Object k : UIManager.getDefaults().keySet()) {
iks = iks + 1;
System.out.println("Set: " + k);
}
System.out.println("UIDefaults.keys() contains " + ike + " elements.");
System.out.println("UIDefaults.keySet() contains " + iks + " elements.");
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
The workaround is to not use enhanced for loops or streams to iterate over the keys in UIDefaults.
- duplicates
-
JDK-4813448 UIDefaults Map interface is broken
-
- Closed
-
-
JDK-4918080 UIManager.getDefaults().keySet() is empty
-
- Closed
-