package org.mychart import javafx.application.Application import javafx.scene.control.Label import javafx.scene.Scene import javafx.scene.paint.Color import javafx.scene.layout.BorderPane import javafx.stage.Stage import javafx.scene.chart.PieChart import javafx.collections.FXCollections import javafx.scene.layout.Pane sealed class RealtimeMemory extends Application { val timer = new java.util.Timer val usedMemData = new PieChart.Data("Used", 0.0) val freeMemData = new PieChart.Data("Free", 0.0) // val totalMemData = new PieChart.Data("Total", 0.0) val pieChartData = FXCollections.observableArrayList(usedMemData, freeMemData) val chart = new PieChart(pieChartData) val southPane = new Pane val southLabel = new Label override def start(stage: Stage) = { val borderPane = new BorderPane val scene = new Scene(borderPane, 800, 600, Color.BEIGE) stage.setTitle("JFX Xiphias Pricing Client") stage.setScene(scene) chart.setLabelsVisible(true) chart.setLegendVisible(false) borderPane.setCenter(chart) borderPane.setBottom(southPane) southPane.getChildren.addAll(southLabel) stage.show timer.schedule(new HeapSnapshotTask, 0L, 1000L) } def runInJFXThread(f: () => Unit) = javafx.application.Platform.runLater( new Runnable() { def run() {f()} } ) sealed class HeapSnapshotTask extends java.util.TimerTask { override def run = { val r = Runtime.getRuntime val totalMemory = r.totalMemory / 1024 / 1024 val freeMemory = r.freeMemory / 1024 / 1024 val maxMemory = r.maxMemory / 1024 / 1024 val usedMemory = totalMemory - freeMemory usedMemData.setPieValue(usedMemory) freeMemData.setPieValue(freeMemory) // totalMemData.setPieValue(totalMemory) runInJFXThread(()=>southLabel.setText( "Max: " +maxMemory+", Used:"+usedMemory+ ", Free:"+freeMemory+", Total:"+totalMemory)) } } } object RealtimeMemory { def main(args: Array[String]): Unit = { javafx.application.Application.launch(classOf[RealtimeMemory]) } }
File generation with SBT
10 years ago
No comments:
Post a Comment