Как говорит заголовок, я использую WorldMapView, предоставляемый в зависимости от ControlsFX, однако сталкиваюсь с проблемами с памятью ...
Мой сервер отправляет список {широта, долгота} каждого пользователя в сети. Я создаю список объектов Location и добавляю его в ListProperty WorldMapView.
// Attributes
public static ScheduledExecutorService EXECUTOR = Executors.newScheduledThreadPool(1);
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage stage) throws Exception{
BorderPane contentPane = new BorderPane();
contentPane.setBackground(new Background(new BackgroundFill(Color.BLACK, null, null)));
WorldMapView worldMapView = new WorldMapView();
worldMapView.setCountryViewFactory((country) -> {
CountryView view = new CountryView(country);
Color fillColor = Color.BLACK;
view.fillProperty().set(Color.BLACK);
view.strokeProperty().set(fillColor);
view.strokeWidthProperty().set(1);
return view;
});
worldMapView.getLocations().add(new Location(0, 0));
worldMapView.setLocationViewFactory(location -> {
Circle circle = new Circle();
Color fillColor = Color.BLACK;
circle.setFill(fillColor);
circle.setRadius(8);
circle.setTranslateX(-4);
// translate to center node on location
circle.setTranslateY(-4);
// translate to center node on location
return circle;
});
contentPane.setCenter(worldMapView);
stage.setScene(new Scene(contentPane, 500, 500));
stage.show();
EXECUTOR.scheduleAtFixedRate(() -> {
List<Location> locations = IntStream.range(0, 50).boxed().map((value) -> {
return new Location(generateRandomDoubleInRange(60, -60), generateRandomDoubleInRange(120, -120));
}).collect(Collectors.toList());
Platform.runLater(() -> {
worldMapView.locationsProperty().clear();
worldMapView.locationsProperty().addAll(locations);
});
}, 0, 500, TimeUnit.MILLISECONDS);
}
Я ожидаю, что он очистит объекты Circle после очистки списка, однако это не так. Кажется, это происходит, но со временем объекты Circle не очищаются, и в итоге программа использует столько памяти, сколько позволяет максимально допустимый (хотя это не приводит к ошибкам). Это займет некоторое время (примерно 6 минут, чтобы получить полную картину; с предоставленным мною кодом). https://github.com/controlsfx/controlsfx/issues/1091 Я создал отчет о проблемах, но, честно говоря, это может даже не быть ошибкой, поэтому я решил приехать сюда.
Я должен также отметить, что я ускорил время, чтобы вы могли видеть его быстрее. В моей обычной программе обновления установлены примерно на 15 секунд. Требуется некоторое время, чтобы увидеть зависание графического интерфейса с 15 секундами, но в конечном итоге это происходит.