Java 中有用的环境设置列表 [英] List of useful environment settings in Java

查看:16
本文介绍了Java 中有用的环境设置列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

谁有链接之类的?

我没有愚蠢到没有检查系统和运行时的文档:P我只是想知道是否还有其他类存储了用于确定您正在运行的机器状态的类似方法.

解决方案

General Properties

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

import java.awt.*;导入 javax.swing.*;导入 javax.swing.border.EmptyBorder;导入 java.util.*;导入 java.security.*;/** 一个小的 GUId 应用程序.这显示了许多系统和环境属性.设计为与 Java 1.4+ 兼容(因此有许多要求,例如没有 foreach,没有泛型,没有 StringBuilder ......).@作者安德鲁汤普森@版本 2008-06-29*/类系统属性{static String sentence = "敏捷的棕色狐狸跳过了懒惰的狗.";静态字符串 sep = System.getProperty("line.separator");静态字符串 fontText =句子 +九月 +句子.toUpperCase() +九月 +"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(排序);返回排序;}静态字符串数据对表行(字符串属性,对象值){String val = valueToString(property, value);返回"+"+<代码>"+财产 +</代码>"+</th>"+<td>"+值 +</td>"+"</tr>";}静态字符串值到字符串(字符串属性,对象值){如果(颜色的值实例){颜色颜色=(颜色)值;字符串转换="<div style='width: 100%; height: 100%; " +"背景颜色:#" +Integer.toHexString(color.getRed()) +Integer.toHexString(color.getGreen()) +Integer.toHexString(color.getBlue()) +";'>"+value.toString() +"</div>";回报转换;} else if (property.toLowerCase().endsWith("path") ||property.toLowerCase().endsWith("dirs")) {返回 delimitedToHtmlList((字符串值,System.getProperty("path.separator"));} 别的 {返回值.toString();}}静态字符串分隔ToHtmlList(字符串值,字符串分隔符){String[] 部分 = values.split(delimiter);StringBuffer sb = new StringBuffer();sb.append("

    ");for (int ii = 0; ii ");sb.append(parts[ii]);sb.append("</li>");}返回 sb.toString();}静态组件 getExampleOfFont(String fontFamily) {Font font = new Font(fontFamily, Font.PLAIN, 24);JTextArea ta = new JTextArea();ta.setFont(字体);ta.setText(fontText);ta.setEditable(false);//不允许这些获得焦点,因为它//干扰所需的滚动行为ta.setFocusable(false);返回 ta;}静态公共 JScrollPane getOutputWidgetForContent(String content) {JEdi​​torPane op = new JEditorPane();op.setContentType("文本/html");op.setEditable(false);op.setText(内容);返回新的 JScrollPane(op);}公共静态无效主(字符串 [] args){JTabbedPane tabPane = new JTabbedPane();StringBuffer 某人;String header = "";sb = 新的 StringBuffer(header);属性 prop = System.getProperties();String[] propStrings = convertObjectToSortedStringArray(prop.stringPropertyNames().toArray());for (int ii = 0; ii < propStrings.length; ii++) {sb.append(数据对表行(propStrings[ii],System.getProperty(propStrings[ii])));}tabPane.addTab(系统",getOutputWidgetForContent(sb.toString()));sb = 新的 StringBuffer(header);地图环境 = System.getenv();String[] envStrings = convertObjectToSortedStringArray(environment.keySet().toArray());for (int ii = 0; ii < envStrings.length; ii++) {sb.append(数据对表行(envStrings[ii],environment.get(envStrings[ii])));}tabPane.addTab(环境",getOutputWidgetForContent(sb.toString()));sb = 新的 StringBuffer(header);GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();GraphicsDevice[] gs = ge.getScreenDevices();for (int j = 0; j ");sb.append("");sb.append("");sb.append("");sb.append("");sb.append("");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++) {字符串前缀 = "";字符串后缀 = "";Locale locale = sortableLocale[ii].getLocale();如果 (locale.equals(Locale.getDefault())) {前缀 = "";后缀 = "</b>";}sb.append(dataPairToTableRow(前缀 +语言环境.toString() +后缀,前缀 +locale.getDisplayLanguage() +后缀 +</td><td>"+前缀 +locale.getDisplayCountry() +后缀 +</td><td>"+前缀 +locale.getDisplayVariant() +后缀));}tabPane.add("语言环境",getOutputWidgetForContent(sb.toString()));Locale.getDefault();国际边界= 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("属性");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);}}SortableLocale 类实现了 Comparable {语言环境;SortableLocale(Locale locale) {this.locale = 语言环境;}公共字符串 toString() {返回 locale.toString();}公共语言环境 getLocale() {返回语言环境;}公共 int compareTo(Object object2) {SortableLocale locale2 = (SortableLocale) object2;//Locale locale2 = (Locale)object2;返回 locale.toString().compareTo(locale2.toString());}}

    媒体

    与合成和采样的声音和图像相关的属性.

    /*<小程序代码='媒体类型'宽度='900'高度='600'><param name='show' value='Sound|Sampled|Mixers|Primary Sound Capture Driver'></小程序>*/导入 javax.imageio.ImageIO;导入 javax.sound.sampled.*;导入 javax.sound.midi.*;导入 java.awt.*;导入 javax.swing.*;导入 javax.swing.table.DefaultTableModel;导入 javax.swing.tree.*;导入 javax.swing.event.*;导入 javax.swing.text.Position;公共类 MediaTypes 扩展 JApplet {JTable 表;布尔排序 = 假;JTree 树;@覆盖公共无效初始化(){可运行 r = () ->{MediaTypes mediaTypes = new MediaTypes();字符串显示 = "";if (getParameter("show")!=null) {show = getParameter("show");}JPanel p = new JPanel();mediaTypes.createGui(p, show);添加(p);证实();};SwingUtilities.invokeLater(r);}公共静态无效主(字符串 [] args){可运行 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 {如果(可排序){output.setText("点击表格列标题进行排序.");}DefaultMutableTreeNode 节点 = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();如果(节点== null)返回;对象 nodeInfo = node.getUserObject();if (nodeInfo instanceof MediaData) {MediaData mediaData = (MediaData)nodeInfo;table.setModel( 新的 DefaultTableModel(mediaData.getData(),mediaData.getColumnNames()) );}});for (int ii=0; ii

    其他

    你也可以调查:

    • InetAddress
    • KeyStore
    • 经理
      • CookieManager
      • KeyManagerFactory
      • 日志管理器

    I've been wondering a long time if there was a comprehensive list of (probably static) methods/fields that store runtime information for the JVM. An incomplete list of examples:

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

    Does anyone have a link or something?

    EDIT: I'm not so dumb as to have not checked the docs for System and Runtime :P I was just wondering if there were other classes where similar methods to determine the state of the machine you're running on are stored.

    解决方案

    General Properties

    I use this code to get a handle on some of the things known to Java classes that are of particular interest to me.

    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

    Properties related to synthesized and sampled sound, and images.

    /*
    <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;
        }
    }
    

    Other

    You might also investigate:

    • InetAddress
    • KeyStore
    • Managers
      • CookieManager
      • KeyManagerFactory
      • LogManager

    这篇关于Java 中有用的环境设置列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆
    ");sb.append("代码");sb.append("");sb.append("语言");sb.append("");sb.append("国家");sb.append("");sb.append("变体");sb.append("