gpt4 book ai didi

java - Java 中有用的环境设置列表

转载 作者:IT老高 更新时间:2023-10-28 21:15:02 26 4
gpt4 key购买 nike

我一直想知道是否有一个完整的(可能是静态的)方法/字段列表来存储 JVM 的运行时信息。不完整的示例列表:

  • System.out/System.in
  • System.currentTimeMillis()
  • System.getProperty()
  • System.getConsole()
  • Runtime.freeMemory()

有人有链接吗?

编辑:我没有那么笨到没有检查系统和运行时的文档:P我只是想知道是否还有其他类存储了类似的方法来确定您正在运行的机器的状态。

最佳答案

一般属性

我使用这段代码来处理一些我特别感兴趣的 Java 类已知的事情。

System Properties

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.util.*;

import java.security.*;

/** A small GUId app. that shows many system and environment properties.
Designed to be compatible with Java 1.4+ (hence many requirements like
no foreach, no generics, no StringBuilder..).
@author Andrew Thompson
@version 2008-06-29
*/
class SystemProperties {

static String sentence = "The quick brown fox jumped over the lazy dog.";
static String sep = System.getProperty("line.separator");
static String fontText =
sentence +
sep +
sentence.toUpperCase() +
sep +
"0123456789 !@#$%^&*()_+ []\\;',./ {}|:\"<>?";

static String[] convertObjectToSortedStringArray(Object[] unsorted) {
String[] sorted = new String[unsorted.length];
for (int ii = 0; ii < sorted.length; ii++) {
sorted[ii] = (String) unsorted[ii];
}
Arrays.sort(sorted);
return sorted;
}

static String dataPairToTableRow(String property, Object value) {
String val = valueToString(property, value);
return "<tr>" +
"<th>" +
"<code>" +
property +
"</code>" +
"</th>" +
"<td>" +
val +
"</td>" +
"</tr>";
}

static String valueToString(String property, Object value) {
if (value instanceof Color) {
Color color = (Color) value;
String converted =
"<div style='width: 100%; height: 100%; " +
"background-color: #" +
Integer.toHexString(color.getRed()) +
Integer.toHexString(color.getGreen()) +
Integer.toHexString(color.getBlue()) +
";'>" +
value.toString() +
"</div>";
return converted;
} else if (property.toLowerCase().endsWith("path") ||
property.toLowerCase().endsWith("dirs")) {
return delimitedToHtmlList(
(String) value,
System.getProperty("path.separator"));
} else {
return value.toString();
}
}

static String delimitedToHtmlList(String values, String delimiter) {
String[] parts = values.split(delimiter);
StringBuffer sb = new StringBuffer();
sb.append("<ol>");
for (int ii = 0; ii < parts.length; ii++) {
sb.append("<li>");
sb.append(parts[ii]);
sb.append("</li>");
}
return sb.toString();
}

static Component getExampleOfFont(String fontFamily) {
Font font = new Font(fontFamily, Font.PLAIN, 24);
JTextArea ta = new JTextArea();
ta.setFont(font);
ta.setText(fontText);
ta.setEditable(false);
// don't allow these to get focus, as it
// interferes with desired scroll behavior
ta.setFocusable(false);
return ta;
}

static public JScrollPane getOutputWidgetForContent(String content) {
JEditorPane op = new JEditorPane();
op.setContentType("text/html");
op.setEditable(false);

op.setText(content);

return new JScrollPane(op);
}

public static void main(String[] args) {
JTabbedPane tabPane = new JTabbedPane();
StringBuffer sb;
String header = "<html><body><table border=1 width=100%>";

sb = new StringBuffer(header);
Properties prop = System.getProperties();
String[] propStrings = convertObjectToSortedStringArray(
prop.stringPropertyNames().toArray());
for (int ii = 0; ii < propStrings.length; ii++) {
sb.append(
dataPairToTableRow(
propStrings[ii],
System.getProperty(propStrings[ii])));
}
tabPane.addTab(
"System",
getOutputWidgetForContent(sb.toString()));

sb = new StringBuffer(header);
Map environment = System.getenv();
String[] envStrings = convertObjectToSortedStringArray(
environment.keySet().toArray());
for (int ii = 0; ii < envStrings.length; ii++) {
sb.append(
dataPairToTableRow(
envStrings[ii],
environment.get(envStrings[ii])));
}
tabPane.addTab(
"Environment",
getOutputWidgetForContent(sb.toString()));

sb = new StringBuffer(header);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
for (int j = 0; j < gs.length; j++) {
GraphicsDevice gd = gs[j];
sb.append(
dataPairToTableRow(
"Device " + j,
gd.toString() +
" " +
gd.getIDstring()));
GraphicsConfiguration[] gc =
gd.getConfigurations();
for (int i = 0; i < gc.length; i++) {
sb.append(
dataPairToTableRow(
"Config " +
i,
(int) gc[i].getBounds().getWidth() +
"x" +
(int) gc[i].getBounds().getHeight() +
" " +
gc[i].getColorModel() +
", " +
" Accelerated: " +
gc[i].getImageCapabilities().isAccelerated() +
" True Volatile: " +
gc[i].getImageCapabilities().isTrueVolatile()));
}
}
tabPane.addTab(
"Graphics Environment",
getOutputWidgetForContent(sb.toString()));

String[] fonts = ge.getAvailableFontFamilyNames();
JPanel fontTable = new JPanel(new BorderLayout(3, 1));
// to enable key based scrolling in the font panel
fontTable.setFocusable(true);
JPanel fontNameCol = new JPanel(new GridLayout(0, 1, 2, 2));
JPanel fontExampleCol = new JPanel(new GridLayout(0, 1, 2, 2));
fontTable.add(fontNameCol, BorderLayout.WEST);
fontTable.add(fontExampleCol, BorderLayout.CENTER);
for (int ii = 0; ii < fonts.length; ii++) {
fontNameCol.add(new JLabel(fonts[ii]));
fontExampleCol.add(getExampleOfFont(fonts[ii]));
}
tabPane.add("Fonts", new JScrollPane(fontTable));

sb = new StringBuffer(header);

sb.append("<thead>");
sb.append("<tr>");
sb.append("<th>");
sb.append("Code");
sb.append("</th>");
sb.append("<th>");
sb.append("Language");
sb.append("</th>");
sb.append("<th>");
sb.append("Country");
sb.append("</th>");
sb.append("<th>");
sb.append("Variant");
sb.append("</th>");
sb.append("</tr>");
sb.append("</thead>");

Locale[] locales = Locale.getAvailableLocales();
SortableLocale[] sortableLocale = new SortableLocale[locales.length];
for (int ii = 0; ii < locales.length; ii++) {
sortableLocale[ii] = new SortableLocale(locales[ii]);
}
Arrays.sort(sortableLocale);
for (int ii = 0; ii < locales.length; ii++) {
String prefix = "";
String suffix = "";
Locale locale = sortableLocale[ii].getLocale();
if (locale.equals(Locale.getDefault())) {
prefix = "<b>";
suffix = "</b>";
}
sb.append(dataPairToTableRow(
prefix +
locale.toString() +
suffix,
prefix +
locale.getDisplayLanguage() +
suffix +
"</td><td>" +
prefix +
locale.getDisplayCountry() +
suffix +
"</td><td>" +
prefix +
locale.getDisplayVariant() +
suffix));
}
tabPane.add("Locales",
getOutputWidgetForContent(sb.toString()));

Locale.getDefault();
int border = 5;
JPanel p = new JPanel(new BorderLayout());
p.setBorder(new EmptyBorder(border, border, border, border));
p.add(tabPane, BorderLayout.CENTER);
p.setPreferredSize(new Dimension(400, 400));
JFrame f = new JFrame("Properties");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.getContentPane().add(p, BorderLayout.CENTER);
f.pack();
f.setMinimumSize(f.getPreferredSize());
f.setSize(600, 500);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}

class SortableLocale implements Comparable {

Locale locale;

SortableLocale(Locale locale) {
this.locale = locale;
}

public String toString() {
return locale.toString();
}

public Locale getLocale() {
return locale;
}

public int compareTo(Object object2) {
SortableLocale locale2 = (SortableLocale) object2;
//Locale locale2 = (Locale)object2;
return locale.toString().compareTo(
locale2.toString());
}
}

媒体

与合成和采样的声音以及图像相关的属性。

Media Types

/*
<applet
code='MediaTypes'
width='900'
height='600'>
<param name='show' value='Sound|Sampled|Mixers|Primary Sound Capture Driver'>
</applet>
*/
import javax.imageio.ImageIO;
import javax.sound.sampled.*;
import javax.sound.midi.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.*;
import javax.swing.event.*;
import javax.swing.text.Position;

public class MediaTypes extends JApplet {

JTable table;
boolean sortable = false;
JTree tree;

@Override
public void init() {
Runnable r = () -> {
MediaTypes mediaTypes = new MediaTypes();

String show = "";
if (getParameter("show")!=null) {
show = getParameter("show");
}

JPanel p = new JPanel();
mediaTypes.createGui(p, show);
add(p);
validate();
};
SwingUtilities.invokeLater(r);
}

public static void main(String[] args) {
Runnable r = () -> {
MediaTypes mediaTypes = new MediaTypes();

JPanel p = new JPanel();
mediaTypes.createGui(p);
JOptionPane.showMessageDialog(null,p);
};
SwingUtilities.invokeLater(r);
}

public Object[][] mergeArrays(String name1, Object[] data1, String name2, Object[] data2) {
Object[][] data = new Object[data1.length+data2.length][2];
for (int ii=0; ii<data1.length; ii++) {
data[ii][0] = name1;
data[ii][1] = data1[ii];
}
int offset = data1.length;
for (int ii=offset; ii<data.length; ii++) {
data[ii][0] = name2;
data[ii][1] = data2[ii-offset];
}
return data;
}

public void createGui(JPanel panel) {
createGui(panel, "");
}

public String getShortLineName(String name) {
String[] lineTypes = {
"Clip",
"SourceDataLine",
"TargetDataLine",
"Speaker",
"Microphone",
"Master Volume",
"Line In"
};
for (String shortName : lineTypes) {
if ( name.toLowerCase().replaceAll("_", " ").contains(shortName.toLowerCase() )) {
return shortName;
}
}
return name;
}

public void createGui(JPanel panel, String path) {

//DefaultMutableTreeNode selected = null;

panel.setLayout( new BorderLayout(5,5) );
final JLabel output = new JLabel("Select a tree leaf to see the details.");
panel.add(output, BorderLayout.SOUTH);

table = new JTable();
try {
table.setAutoCreateRowSorter(true);
sortable = true;
} catch (Throwable ignore) {
// 1.6+ functionality - not vital
}
JScrollPane tableScroll = new JScrollPane(table);
Dimension d = tableScroll.getPreferredSize();
d = new Dimension(450,d.height);
tableScroll.setPreferredSize(d);
panel.add( tableScroll, BorderLayout.CENTER );

DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Media");
DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);

DefaultMutableTreeNode imageNode = new DefaultMutableTreeNode("Image");
rootNode.add(imageNode);

Object[][] data;
int offset;
String[] columnNames;

data = mergeArrays(
"Reader",
ImageIO.getReaderFileSuffixes(),
"Writer",
ImageIO.getWriterFileSuffixes() );
columnNames = new String[]{"Input/Output", "Image File Suffixes"};
MediaData md = new MediaData( "Suffixes", columnNames, data);
imageNode.add(new DefaultMutableTreeNode(md));

data = mergeArrays(
"Reader",
ImageIO.getReaderMIMETypes(),
"Writer",
ImageIO.getWriterMIMETypes() );
columnNames = new String[]{"Input/Output", "Image MIME Types"};
md = new MediaData( "MIME", columnNames, data);
imageNode.add(new DefaultMutableTreeNode(md));

DefaultMutableTreeNode soundNode = new DefaultMutableTreeNode("Sound");
rootNode.add(soundNode);

DefaultMutableTreeNode soundSampledNode = new DefaultMutableTreeNode("Sampled");
soundNode.add(soundSampledNode);

md = new MediaData("Suffixes", "Sound File Suffixes", AudioSystem.getAudioFileTypes());
soundSampledNode.add(new DefaultMutableTreeNode(md));

Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
String[][] mixerData = new String[mixerInfo.length][4];
for (int ii=0; ii<mixerData.length; ii++) {
mixerData[ii][0] = mixerInfo[ii].getName();
mixerData[ii][1] = mixerInfo[ii].getVendor();
mixerData[ii][2] = mixerInfo[ii].getVersion();
mixerData[ii][3] = mixerInfo[ii].getDescription();
}
columnNames = new String[]{"Name", "Vendor", "Version", "Description"};
md = new MediaData("Mixers", columnNames, mixerData);
DefaultMutableTreeNode soundSampledMixersNode = new DefaultMutableTreeNode(md);
soundSampledNode.add(soundSampledMixersNode);

for (Mixer.Info mixerInfo1 : mixerInfo) {
Mixer mixer = AudioSystem.getMixer(mixerInfo1);
data = mergeArrays(
"Source",
mixer.getSourceLineInfo(),
"Target",
mixer.getTargetLineInfo() );
columnNames = new String[]{ "Input/Output", "Line Info" };
md = new MediaData(mixerInfo1.getName(), columnNames, data);
DefaultMutableTreeNode soundSampledMixerNode = new DefaultMutableTreeNode(md);
soundSampledMixersNode.add( soundSampledMixerNode );
Line.Info[] source = mixer.getSourceLineInfo();
Line.Info[] target = mixer.getTargetLineInfo();
Line[] all = new Line[source.length + target.length];
try {
for (int jj=0; jj<source.length; jj++) {
all[jj] = AudioSystem.getLine(source[jj]);
}
for (int jj=source.length; jj<all.length; jj++) {
all[jj] = AudioSystem.getLine(target[jj-source.length]);
}
columnNames = new String[]{"Attribute", "Value"};
for (Line line : all) {
Control[] controls = line.getControls();
if (line instanceof DataLine) {
DataLine dataLine = (DataLine)line;
AudioFormat audioFormat = dataLine.getFormat();
data = new Object[7+controls.length][2];

data[0][0] = "Channels";
data[0][1] = audioFormat.getChannels();

data[1][0] = "Encoding";
data[1][1] = audioFormat.getEncoding();

data[2][0] = "Frame Rate";
data[2][1] = audioFormat.getFrameRate();

data[3][0] = "Sample Rate";
data[3][1] = audioFormat.getSampleRate();

data[4][0] = "Sample Size (bits)";
data[4][1] = audioFormat.getSampleSizeInBits();

data[5][0] = "Big Endian";
data[5][1] = audioFormat.isBigEndian();

data[6][0] = "Level";
data[6][1] = dataLine.getLevel();

} else if (line instanceof Port) {
Port port = (Port)line;
Port.Info portInfo = (Port.Info)port.getLineInfo();
data = new Object[2+controls.length][2];

data[0][0] = "Name";
data[0][1] = portInfo.getName();

data[1][0] = "Source";
data[1][1] = portInfo.isSource();
} else {
System.out.println( "?? " + line );
}
int start = data.length-controls.length;
for (int kk=start; kk<data.length; kk++) {
data[kk][0] = "Control";
int index = kk-start;
data[kk][1] = controls[index];
}
md = new MediaData(getShortLineName(line.getLineInfo().toString()), columnNames, data);
soundSampledMixerNode.add(new DefaultMutableTreeNode(md));
}
} catch(Exception e) {
e.printStackTrace();
}
}

int[] midiTypes = MidiSystem.getMidiFileTypes();
data = new Object[midiTypes.length][2];
for (int ii=0; ii<midiTypes.length; ii++) {
data[ii][0] = midiTypes[ii];
String description = "Unknown";
switch (midiTypes[ii]) {
case 0:
description = "Single Track";
break;
case 1:
description = "Multi Track";
break;
case 2:
description = "Multi Song";
}
data[ii][1] = description;
}
columnNames = new String[]{"Type", "Description"};
md = new MediaData("MIDI", columnNames, data);
DefaultMutableTreeNode soundMIDINode = new DefaultMutableTreeNode(md);
soundNode.add(soundMIDINode);

columnNames = new String[]{
"Attribute",
"Value"};
MidiDevice.Info[] midiDeviceInfo = MidiSystem.getMidiDeviceInfo() ;
for (MidiDevice.Info midiDeviceInfo1 : midiDeviceInfo) {
data = new Object[6][2];
data[0][0] = "Name";
data[0][1] = midiDeviceInfo1.getName();
data[1][0] = "Vendor";
data[1][1] = midiDeviceInfo1.getVendor();
data[2][0] = "Version";
String version = midiDeviceInfo1.getVersion();
data[2][1] = version.replaceAll("Version ", "");
data[3][0] = "Description";
data[3][1] = midiDeviceInfo1.getDescription();
data[4][0] = "Maximum Transmitters";
data[5][0] = "Maximum Receivers";
try {
MidiDevice midiDevice = MidiSystem.getMidiDevice(midiDeviceInfo1);
Object valueTransmitter;
if (midiDevice.getMaxTransmitters()==AudioSystem.NOT_SPECIFIED) {
valueTransmitter = "Not specified";
} else {
valueTransmitter = midiDevice.getMaxTransmitters();
}
Object valueReceiver;
if (midiDevice.getMaxReceivers()==AudioSystem.NOT_SPECIFIED) {
valueReceiver = "Not specified";
} else {
valueReceiver = midiDevice.getMaxReceivers();
}
data[4][1] = valueTransmitter;
data[5][1] = valueReceiver;
}catch(MidiUnavailableException mue) {
data[4][1] = "Unknown";
data[5][1] = "Unknown";
}
md = new MediaData(midiDeviceInfo1.getName(), columnNames, data);
soundMIDINode.add( new DefaultMutableTreeNode(md) );
}

tree = new JTree(treeModel);
tree.setRootVisible(false);
tree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.addTreeSelectionListener((TreeSelectionEvent tse) -> {
if (sortable) {
output.setText("Click table column headers to sort.");
}

DefaultMutableTreeNode node = (DefaultMutableTreeNode)
tree.getLastSelectedPathComponent();

if (node == null) return;

Object nodeInfo = node.getUserObject();
if (nodeInfo instanceof MediaData) {
MediaData mediaData = (MediaData)nodeInfo;
table.setModel( new DefaultTableModel(
mediaData.getData(),
mediaData.getColumnNames()) );
}
});

for (int ii=0; ii<tree.getRowCount(); ii++) {
tree.expandRow(ii);
}

String[] paths = path.split("\\|");
int row = 0;
TreePath treePath = null;
for (String prefix : paths) {
treePath = tree.getNextMatch( prefix, row, Position.Bias.Forward );
row = tree.getRowForPath(treePath);
}

panel.add(new JScrollPane(tree),BorderLayout.WEST);

tree.setSelectionPath(treePath);
tree.scrollRowToVisible(row);
}
}

class MediaData {

String name;
String[] columnNames;
Object[][] data;

MediaData(String name, String columnName, Object[] data) {
this.name = name;

columnNames = new String[1];
columnNames[0] = columnName;

this.data = new Object[data.length][1];
for (int ii=0; ii<data.length; ii++) {
this.data[ii][0] = data[ii];
}
}

MediaData(String name, String[] columnNames, Object[][] data) {
this.name = name;
this.columnNames = columnNames;
this.data = data;
}

@Override
public String toString() {
return name;
}

public String[] getColumnNames() {
return columnNames;
}

public Object[][] getData() {
return data;
}
}

其他

你也可以调查一下:

  • InetAddress
  • KeyStore
  • 经理
    • CookieManager
    • KeyManagerFactory
    • LogManager

关于java - Java 中有用的环境设置列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com