I am looking to monitor the resources used by my Minecraft server using my own custom resource monitor that uses JProgressBars to display a percentage for CPU usage and memory usage. I have the GUI coded for it already, but I have no idea where to even begin to start to code the resource monitoring part. I know I can use Jconsole to monitor the resources or even the Minecraft server's GUI, but I would really like to make my own customized GUI resource monitor for it.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Scanner;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleScriptContext;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.Painter;
import javax.swing.Timer;
import javax.swing.UIDefaults;
import javax.swing.border.Border;
import javax.swing.plaf.ProgressBarUI;
import javax.swing.plaf.metal.MetalProgressBarUI;
public class ResourceMonitor {
public ResourceMonitor() {
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
Font largeFont = new Font("segoe ui black", Font.PLAIN, 14);
Font smallFont = new Font("segoe ui black", Font.PLAIN, 12);
Font titleFont = new Font("rockwell", Font.BOLD, 20);
JFrame frame = new JFrame();
JLabel label1 = new JLabel(" CPU Usage ");
JLabel label2 = new JLabel(" RAM Usage ");
JLabel label3 = new JLabel(" Resource Monitor ");
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JPanel panel4 = new JPanel();
JPanel panel5 = new JPanel();
JPanel panel6 = new JPanel();
JProgressBar cpuLoad = new JProgressBar();
JProgressBar ramLoad = new JProgressBar();
int w = frame.getSize().width;
int h = frame.getSize().height;
int x = (dim.width - w) / 3;
int y = (dim.height - h) / 3;
var labelColor = new Color(121,192,90);
var borderColor = new Color(67,70,75);
var panelColor = new Color(101,67,33);
var titleColor = new Color(67,70,75);
var barColor = Color.GRAY;
var minSize = new Dimension(300, 185);
Border titleBorder = BorderFactory.createLineBorder(borderColor, 3);
Border barBorder = BorderFactory.createLineBorder(borderColor, 2);
ProgressBarUI cpuUI = new MetalProgressBarUI() {
protected Color getSelectionForeground() {
return Color.DARK_GRAY;
}
protected Color getSelectionBackground() {
return Color.DARK_GRAY;
}
};
ProgressBarUI ramUI = new MetalProgressBarUI() {
protected Color getSelectionForeground() {
return Color.DARK_GRAY;
}
protected Color getSelectionBackground() {
return Color.DARK_GRAY;
}
};
Runtime python = Runtime.getRuntime();
//Runtime
//JProgressBar 1
cpuLoad.setUI(cpuUI);
cpuLoad.setStringPainted(true);
cpuLoad.setBackground(Color.LIGHT_GRAY);
cpuLoad.setForeground(barColor);
cpuLoad.setFont(smallFont);
cpuLoad.setBorder(barBorder);
//JProgressBar 2
ramLoad.setUI(ramUI);
ramLoad.setStringPainted(true);
ramLoad.setBackground(Color.LIGHT_GRAY);;
ramLoad.setForeground(barColor);
ramLoad.setFont(smallFont);
ramLoad.setBorder(barBorder);
//JPanel 1
panel1.add(label1);
panel1.add(cpuLoad);
panel1.setBackground(panelColor);
//JPanel 2
panel2.add(label2);
panel2.setBackground(panelColor);
panel2.add(ramLoad);
//JPanel 3
panel3.add(label3);
panel3.setBackground(panelColor);
//JPanel 4
panel4.setLayout(new GridLayout(3,1,0,5));
panel4.add(panel3);
panel4.add(panel1);
panel4.add(panel2);
panel4.setBackground(panelColor);
//JPanel 5
panel5.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
panel5.setLayout(new BoxLayout(panel5, BoxLayout.PAGE_AXIS));
panel5.add(panel4);
//JPanel 6
panel6.add(panel5);
panel6.setBackground(panelColor);
//JLabel 1
label1.setBackground(labelColor);
label1.setFont(largeFont);
label1.setOpaque(true);
//JLabel 2
label2.setBackground(labelColor);
label2.setFont(largeFont);
label2.setOpaque(true);
//JLabel 3
label3.setForeground(titleColor);
label3.setBackground(Color.LIGHT_GRAY);
label3.setFont(titleFont);
label3.setBorder(titleBorder);
label3.setOpaque(true);
//JFrame
frame.add(panel6);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Resource Monitor");
frame.pack();
frame.setVisible(true);
frame.setMinimumSize(minSize);
frame.setBounds(x, y, 300, 150);
}
public static void main(String[] args){
new ResourceMonitor();
}
}
above is the code for the gui. I am a beginner with java so please try to be as explicit as possible.
I have tried using different MXBeans and such but Im not sure how to use them fully.