JavaFX ile Sistem İzleme Uygulaması Oluşturma Rehberi

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

HaktanOzkan

Demir Cevheri Gibiyim
Katılım
22 Temmuz 2014
Mesajlar
206
Elmaslar
116
Puan
13.825
Minecraft
HaktanOzkan

Discord:

hktanozkan

Merhaba forum üyeleri!

Bu rehberde sizlerle JavaFX kullanarak bir sistem izleme uygulaması nasıl oluşturabileceğinizi paylaşacağım. Bu uygulama, CPU ve RAM kullanımını grafiklerle gösterirken, aynı zamanda çeşitli sistem bilgilerini de ekranda sergiliyor olacak. Bu tarz bir uygulama, sistem performansını izlemek ve analiz etmek isteyenler için oldukça faydalıdır.

Gereksinimler​

  • Java Development Kit (JDK)
  • JavaFX Kütüphanesi
  • Bir IDE (Eclipse, IntelliJ IDEA vb.)

Adım 1: Proje Oluşturma​

Öncelikle IDE'nizde yeni bir JavaFX projesi oluşturun. Projeyi oluşturduktan sonra gerekli kütüphaneleri (JavaFX) eklediğinizden emin olun.

Adım 2: Gerekli Aktarmaları Yapma​

Projeye başlamadan önce, kullanacağımız sınıfları ve kütüphaneleri içe aktarmamız gerekiyor:

Java:
package com.sysmon;

import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;


Adım 3: Ana Sınıfı Oluşturma​

Herhangi bir isimde bir sınıf oluşturun ve Application sınıfından türetin:

Java:
public class SwingMain extends Application {
    private OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
    private XYChart.Series<Number, Number> cpuSeries = new XYChart.Series<>();
    private XYChart.Series<Number, Number> ramSeries = new XYChart.Series<>();
    private int time = 0;
}

Adım 4: Kullanıcı Arayüzünü Hazırlama​

Kullanıcı arayüzü (UI) bileşenlerini tanımlayın ve ekranda görüntülemek için gerekli düzenlemeleri yapın:

4.1 - start Metodu ve UI Bileşenleri

Java:
@Override
public void start(Stage stage) throws Exception {
    Text cpuUsageText = new Text();
    Text ramUsageText = new Text();
    Text cpuCountText = new Text();
    Text systemLoadText = new Text();
    Text freePhysicalMemoryText = new Text();
    Text totalPhysicalMemoryText = new Text();
    Text freeSwapSpaceText = new Text();
    Text totalSwapSpaceText = new Text();
    ProgressBar cpuProgressBar = new ProgressBar(0);
    ProgressBar ramProgressBar = new ProgressBar(0);

  • @Override: start metodunun Application sınıfından türediğini belirtir.
  • Text...: Metin bileşenleri oluşturur.
  • ProgressBar...: İlerleme çubukları oluşturur.

4.2 - Grafik ve Eksenlerin Oluşturulması
Java:
NumberAxis xAxis = new NumberAxis();
NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Time (seconds)");
yAxis.setLabel("Usage (%)");

LineChart<Number, Number> lineChart = new LineChart<>(xAxis, yAxis);
lineChart.setTitle("System Usage Over Time");
cpuSeries.setName("CPU Usage");
ramSeries.setName("RAM Usage");
lineChart.getData().add(cpuSeries);
lineChart.getData().add(ramSeries);

  • NumberAxis xAxis = new NumberAxis();: X eksenini oluşturur.
  • NumberAxis yAxis = new NumberAxis();: Y eksenini oluşturur.
  • xAxis.setLabel("Time (seconds)");: X eksenine etiket ekler.
  • yAxis.setLabel("Usage (%)");: Y eksenine etiket ekler.
  • LineChart<Number, Number> lineChart...: Grafik bileşenini oluşturur.
  • lineChart.setTitle("System Usage Over Time");: Grafiğe başlık ekler.
  • cpuSeries.setName("CPU Usage");: CPU serisine ad verir.
  • ramSeries.setName("RAM Usage");: RAM serisine ad verir.
  • lineChart.getData().add(cpuSeries);: CPU serisini grafiğe ekler.
  • lineChart.getData().add(ramSeries);: RAM serisini grafiğe ekler.

4.3 - Layout (Düzen) ve Sahne (Scene) Oluşturma
Java:
VBox root = new VBox();
root.setPadding(new Insets(10));
root.setSpacing(10);
root.getChildren().addAll(
    cpuUsageText, cpuProgressBar,
    ramUsageText, ramProgressBar, lineChart,
    cpuCountText, systemLoadText,
    freePhysicalMemoryText, totalPhysicalMemoryText,
    freeSwapSpaceText, totalSwapSpaceText
);
Scene scene = new Scene(root, 800, 750);
scene.getStylesheets().add(getClass().getResource("css/style.css").toExternalForm());
stage.setScene(scene);
stage.setTitle("System Monitor");
stage.setResizable(false);
stage.show();

  • VBox root = new VBox();: Dikey kutu düzeni oluşturur.
  • root.setPadding(new Insets(10));: İç boşluk ekler.
  • root.setSpacing(10);: Bileşenler arası boşluk ekler.
  • root.getChildren().addAll(...);: Bileşenleri dikey kutu düzenine ekler.
  • Scene scene = new Scene(root, 800, 750);: Yeni bir sahne oluşturur ve kök düzenini ekler.
  • scene.getStylesheets().add(getClass().getResource("css/style.css").toExternalForm());: CSS stil dosyasını sahneye ekler.
  • stage.setScene(scene);: Sahneyi sahneye ekler.
  • stage.setTitle("System Monitor");: Sahne başlığını ayarlar.
  • stage.setResizable(false);: Sahnenin yeniden boyutlandırılmasını engeller.
  • stage.show();: Sahneyi gösterir.
4.4 - Zaman Çizelgesi ve Güncelleme
Java:
Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), event -> {
    double cpu = osBean.getSystemCpuLoad() * 100;
    cpuUsageText.setText(String.format("CPU Usage: %.2f%%", cpu));
    cpuProgressBar.setProgress(cpu / 100);
    cpuSeries.getData().add(new XYChart.Data<>(time, cpu));

    long totalMemory = osBean.getTotalPhysicalMemorySize();
    long freeMemory = osBean.getFreePhysicalMemorySize();
    long usedMemory = totalMemory - freeMemory;
    double ramPercentage = (double) usedMemory / totalMemory * 100;
    ramUsageText.setText(String.format("RAM Usage: %.2f%%", ramPercentage));
    ramProgressBar.setProgress(ramPercentage / 100);
    ramSeries.getData().add(new XYChart.Data<>(time, ramPercentage));

    int cpuCount = osBean.getAvailableProcessors();
    long freePhysicalMemorySize = osBean.getFreePhysicalMemorySize();
    long totalPhysicalMemorySize = osBean.getTotalPhysicalMemorySize();
    long freeSwapSpaceSize = osBean.getFreeSwapSpaceSize();
    long totalSwapSpaceSize = osBean.getTotalSwapSpaceSize();

    cpuCountText.setText(String.format("CPU Count: %d", cpuCount));
    systemLoadText.setText(String.format("System Load: %.2f%%", cpu));
    freePhysicalMemoryText.setText(String.format("Free Physical Memory: %d MB", freePhysicalMemorySize / (1024 * 1024)));
    totalPhysicalMemoryText.setText(String.format("Total Physical Memory: %d MB", totalPhysicalMemorySize / (1024 * 1024)));
    freeSwapSpaceText.setText(String.format("Free Swap Space: %d MB", freeSwapSpaceSize / (1024 * 1024)));
    totalSwapSpaceText.setText(String.format("Total Swap Space: %d MB", totalSwapSpaceSize / (1024 * 1024)));

    time++;
}));
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.play();

  • Timeline timeline...: Yeni bir zaman çizelgesi oluşturur.
  • new KeyFrame(Duration.seconds(1), event -> { ... });: Her saniyede bir çalışacak anahtar kareyi tanımlar.
  • double cpu = osBean.getSystemCpuLoad() * 100;: CPU kullanımını yüzdelik olarak hesaplar.
  • cpuUsageText.setText(String.format("CPU Usage: %.2f%%", cpu));: CPU kullanım metnini günceller.
  • cpuProgressBar.setProgress(cpu / 100);: CPU ilerleme çubuğunu günceller.
  • cpuSeries.getData().add(new XYChart.Data<>(time, cpu));: CPU kullanım verisini grafiğe ekler.
  • long totalMemory = osBean.getTotalPhysicalMemorySize();: Toplam fiziksel belleği alır.
  • long freeMemory = osBean.getFreePhysicalMemorySize();: Boş fiziksel belleği alır.
  • long usedMemory = totalMemory - freeMemory;: Kullanılan belleği hesaplar.
  • double ramPercentage = (double) usedMemory / totalMemory * 100;: RAM kullanımını yüzdelik olarak hesaplar.
  • ramUsageText.setText(String.format("RAM Usage: %.2f%%", ramPercentage));: RAM kullanım metnini günceller.
  • ramProgressBar.setProgress(ramPercentage / 100);: RAM ilerleme çubuğunu günceller.
  • ramSeries.getData().add(new XYChart.Data<>(time, ramPercentage));: RAM kullanım verisini grafiğe ekler.
  • int cpuCount = osBean.getAvailableProcessors();: Mevcut işlemci sayısını alır.
  • long freePhysicalMemorySize = osBean.getFreePhysicalMemorySize();: Boş fiziksel belleği alır.
  • long totalPhysicalMemorySize = osBean.getTotalPhysicalMemorySize();: Toplam fiziksel belleği alır.
  • long freeSwapSpaceSize = osBean.getFreeSwapSpaceSize();: Boş swap alanını alır.
  • long totalSwapSpaceSize = osBean.getTotalSwapSpaceSize();: Toplam swap alanını alır.
  • cpuCountText.setText(String.format("CPU Count: %d", cpuCount));: İşlemci sayısı metnini günceller.
  • systemLoadText.setText(String.format("System Load: %.2f%%", cpu));: Sistem yükü metnini günceller.
  • freePhysicalMemoryText.setText(String.format("Free Physical Memory: %d MB", freePhysicalMemorySize / (1024 * 1024)));: Boş fiziksel bellek metnini günceller.
  • totalPhysicalMemoryText.setText(String.format("Total Physical Memory: %d MB", totalPhysicalMemorySize / (1024 * 1024)));: Toplam fiziksel bellek metnini günceller.
  • freeSwapSpaceText.setText(String.format("Free Swap Space: %d MB", freeSwapSpaceSize / (1024 * 1024)));: Boş swap alanı metnini günceller.
  • totalSwapSpaceText.setText(String.format("Total Swap Space: %d MB", totalSwapSpaceSize / (1024 * 1024)));: Toplam swap alanı metnini günceller.
  • time++;: Zaman sayacını artırır.
  • timeline.setCycleCount(Timeline.INDEFINITE);: Zaman çizelgesinin sonsuz döngüde çalışmasını sağlar.
  • timeline.play();: Zaman çizelgesini başlatır.

4.5 - Ana Metod
Java:
public static void main(String[] args) {
    launch(args);
}

  • public static void main(String[] args);: Programın giriş noktası.
  • launch(args);: JavaFX uygulamasını başlatır.

Adım 5: CSS Dosyası Ekleme​

Arayüzü daha şık hale getirmek için bir CSS dosyası oluşturun ve scene'e ekleyin. Örneğin, style.css dosyasını projenizin css klasörüne ekleyip şu şekilde düzenleyebilirsiniz:

CSS:
/* Genel stil ayarları */
.root {
    -fx-padding: 10;
    -fx-spacing: 10;
    -fx-alignment: center;
    -fx-background-color: #f0f0f0;
}

/* Metin stili */
.text {
    -fx-font-size: 16px;
    -fx-font-family: "Arial";
    -fx-fill: #333;
}

/* CPU ve RAM kullanım metinlerinin farklı renklerde görünmesi için ayarlar */
.text-cpu {
    -fx-font-size: 16px;
    -fx-font-family: "Arial";
    -fx-fill: #ff4500; /* Turuncu */
}

.text-ram {
    -fx-font-size: 16px;
    -fx-font-family: "Arial";
    -fx-fill: #1e90ff; /* Mavi */
}

/* ProgressBar stili */
.progress-bar {
    -fx-pref-width: 200px;
    -fx-pref-height: 20px;
}

/* LineChart stili */
.chart-title {
    -fx-font-size: 18px;
    -fx-font-weight: bold;
}

.chart-legend {
    -fx-background-color: transparent;
    -fx-font-size: 14px;
}

.chart-series-line {
    -fx-stroke-width: 2px;
}

Adım 6: Uygulamayı Çalıştırma​

Tüm kodlarınızı ve dosyalarınızı hazırladıktan sonra, uygulamanızı çalıştırarak sistem izleme arayüzünüzün sorunsuz bir şekilde çalıştığını doğrulayın.

Sonuç​

javafxsysmonitor.png


Bu rehberde JavaFX kullanarak basit bir sistem izleme uygulaması nasıl oluşturabileceğinizi öğrendiniz. Bu uygulama, sistem performansınızı izlemenize yardımcı olabilir ve aynı zamanda JavaFX ile GUI uygulamaları geliştirme konusundaki yeteneklerinizi geliştirmenize katkı sağlar. Umarım bu rehber faydalı olmuştur.

Sorularınız veya geri bildirimleriniz varsa, lütfen yorumlar kısmında paylaşmaktan çekinmeyin. Herkese iyi çalışmalar!

Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.

Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Hala Discord sunucumuza katılmadın mı?

Büyük bir topluluğun parçası ol, etkinliklere katıl ve özel hediyeler kazanma şansı yakala!

Şimdi Katıl
Üst