2013-12-11 4 views
0

Можно ли добавить 4000 itmes в ChoiceBox. Мой код работает нормально, но я получаю сообщение об ошибке Недостаточно памяти.JavaFx Как добавить 4000 элементов в ChoiceBox

Мой код:

listItemsDevices.setItems(FXCollections.observableArrayList(resultSet)); 
listItemsDevices.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() { 
@Override 
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { 
indexOfSumarnoTehtniceDropdown =listItemsDevices.getSelectionModel().getSelectedIndex(); 
System.out.println("INDEX "+indexOfSumarnoTehtniceDropdown); 
} 
}); 

Мой FXML является:

<ChoiceBox fx:id="listItemsDevices"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
     <String fx:value="Item 1" /> 
     <String fx:value="Item 2" /> 
     <String fx:value="Item 3" /> 
     </FXCollections> 
    </items> 
</ChoiceBox> 

Я получаю ошибку наиболее важным вызывается: java.lang.OutOfMemoryError: пространство кучи Java. Любая идея, как решить эту проблему?

 Exception in Application start method java.lang.OutOfMemoryError: Java heap space 
at java.util.jar.Manifest.read(Unknown Source) 
at java.util.jar.Manifest.<init>(Unknown Source) 
at java.util.jar.JarFile.getManifestFromReference(Unknown Source) 
at java.util.jar.JarFile.getManifest(Unknown Source) 
at sun.misc.URLClassPath$JarLoader$2.getManifest(Unknown Source) 
at java.net.URLClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.access$100(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at javafx.scene.Scene$MouseHandler.updateCursorFrame(Unknown Source) 
at javafx.scene.Scene$ScenePulseListener.pulse(Unknown Source) 
at com.sun.javafx.tk.Toolkit.firePulse(Unknown Source) 
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source) 
at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(Unknown Source) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source) 
at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
    Exception in thread "main" java.lang.RuntimeException: Application launch error 
at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
    Caused by: java.lang.OutOfMemoryError: Java heap space 
at java.util.jar.Manifest$FastInputStream.<init>(Unknown Source) 
at java.util.jar.Manifest$FastInputStream.<init>(Unknown Source) 
at java.util.jar.Manifest.read(Unknown Source) 
at java.util.jar.Manifest.<init>(Unknown Source) 
at java.util.jar.JarFile.getManifestFromReference(Unknown Source) 
at java.util.jar.JarFile.getManifest(Unknown Source) 
at sun.misc.URLClassPath$JarLoader$2.getManifest(Unknown Source) 
at java.net.URLClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.access$100(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at com.sun.javafx.application.PlatformImpl.tkExit(Unknown Source) 
at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source) 
at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source) 
... 2 more 

ответ

1

Сначала вы можете попытаться увеличить размер кучи :)

Но моя рекомендация состоит в том, чтобы использовать ленивые отображающее стратегию, как андроид делает это с видом списка. Загружайте только те элементы, которые видны. Это означает, что создайте ScrollPane с фиксированным количеством CheckBox (или меньше, если у вас меньше предметов). Прослушивание события прокрутки. Загрузите элементы коллекции и подключитесь к ним с помощью CheckBoxes. Как правило, вы можете улучшить работу пользователей, загрузив фиксированное количество элементов до и после текущего списка, чтобы ускорить прокрутку.

+0

Как увеличить размер кучи или это шутка ?? : D – wanttobeprofessional

+0

@RobertP, вы можете указать размер начальной и максимальной кучи. Пожалуйста, взгляните на параметры -Xms и -Xmx: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html – Vertex

+0

Благодарим вас за вершину !!! – wanttobeprofessional

Смежные вопросы