Home : Course Map : Chapter 23 :
System Properties
JavaTech
Course Map
Chapter 23

Access Platform
System Properties
  Demo 1
Run Ext. Programs
  Demo 2
Java Comm API
Port Classes
Port Operations
  Demo 3   Demo 4   Demo 5
Serial Port IO
Demo: Serial Port
  Code Listings

    Demo 6
Parallel Port
Port I/O Apps
Exercises

     About JavaTech
     Codes List
     Exercises
     Feedback
     References
     Resources
     Tips
     Topic Index
     Course Guide
     What's New

The class java.util.Properties is a subclass of Hashtable. Java uses Properties tables to hold environment variables in key/value string pairs. See the API Specification for a listing of the keys for the Properties instance returned from the method System.getProperties()

Applets are restricted by the SystemManager from accessing many of the properties such as the user's directory info. This applet shows the values for those properties that are accessible by applets:

SysProperties


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

/** List the system properties available to applets and
  * to applications.
**/
public class SysProperties extends JApplet
             implements ActionListener
{
  // A Swing textarea for display of string info
  JTextArea fTextArea = null;

  /** Set up the user interface.**/
  public void init () {

    JPanel panel = new JPanel (new BorderLayout ());

    // Create an instance of DrawingPanel
    fTextArea = new JTextArea ();

    // Create an instance of DrawingPanel
    fTextArea = new JTextArea ();
    fTextArea.setEditable (false);

    // Add to a scroll pane so that a long list of
    // computations can be seen.
    JScrollPane area_scroll_pane = new JScrollPane (fTextArea);

    panel.add (area_scroll_pane,"Center");

    JButton go_button = new JButton ("Go");
    go_button.addActionListener (this);

    JButton clear_button = new JButton ("Clear");
    clear_button.addActionListener (this);

    JPanel control_panel = new JPanel ();
    control_panel.add (go_button);
    control_panel.add (clear_button);

    panel.add (control_panel,"South");

    // Add text area with scrolling to the contentPane.
    add (panel);

  } // init

  /**  Print out the system properties list. **/
  public void start () {

    try {
      Properties sysProps = System.getProperties ();
      int i=0;
      Enumeration names = sysProps.propertyNames ();
      while  (names .hasMoreElements ()) {
        String key =  (String)names .nextElement ();
        i++;
        print (i +". " + key + " = " +
            sysProps.getProperty (key) + "\n");
      }
    }
    catch (Exception e) {
      // If security error thrown by browser,
      // then only ask for the following key values.

      String [] key =  {
        "java.version",
        "java.vendor",
        "java.class.version",
        "os.name",
        "os.arch",
        "os.version",
        "file.separator",
        "path.separator",
        "line.separator",
      };

      for (int i=0; i < key.length; i++)
          print (i +". "+ key[i] + " = " +
              System.getProperty (key[i]) + "\n");
    }
  } // start

  /**  Respond to the buttons. **/
  public void actionPerformed (ActionEvent e) {
    if  (e.getActionCommand ().equals ("Go"))
        start ();
    else
        fTextArea.setText (null);
  } // actionPerformed

  /**  Send println () output to the text area. **/
  public void println (String str) {
    fTextArea.append (str + '\n');
  }

  /**  Send print () output to the text area. **/
  public void print (String str) {
    fTextArea.append (str);
  }

  /**  Display the applet in a JFrame. **/
  public static void main (String[] args) {
    int frame_width=350;
    int frame_height=350;
    JApplet applet = new SysProperties ();
    applet.init ();

    // Creat a frame and add the applet to it.
    JFrame f = new JFrame ("Frame & Image Demo");

    f.getContentPane ().add ( applet);
    f.setSize (new Dimension (frame_width,frame_height));
    f.setVisible (true);

    applet.start ();
  } // main

} // class SysProperties

 

A standalone application, on the other hand, has no such restrictions. The above program will run also as an application. Run it on your machine to see your system properties. The output below shows a typical set of properties (line breaks added in some cases to fit within this page frame.)

1. java.runtime.name = Java(TM) 2 Runtime Environment, Standard Edition
2. sun.boot.library.path = C:\JAVA\J2SDK1.4.0\JRE\bin
3. java.vm.version = 1.4.0-b92
4. java.vm.vendor = Sun Microsystems Inc.
5. java.vendor.url = http://java.sun.com/
6. path.separator = ;
7. java.vm.name = Java HotSpot(TM) Client VM
8. file.encoding.pkg = sun.io
9. user.country = US
10. sun.os.patch.level =
11. java.vm.specification.name = Java Virtual Machine
      Specification
12. user.dir = C:\Java\Book\WebCourse\Course\Code\Java\Utilities\Properties
13. java.runtime.version = 1.4.0-b92
14. java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment
15. java.endorsed.dirs = C:\JAVA\J2SDK1.4.0\JRE\lib\endorsed
16. os.arch = x86
17. java.io.tmpdir = C:\WINDOWS\TEMP\
18. line.separator =


19. java.vm.specification.vendor = Sun Microsystems Inc.
20. user.variant =
21. os.name = Windows Me
22. sun.java2d.fontpath =
23. java.library.path = C:\JAVA\J2SDK1.4.0\BIN;.;
    C:\WINDOWS\SYSTEM;C:\WINDOWS;
     C:\WINDOWS;C:\WINDOWS\COMMAND;
      c:\java\j2sdk1.4.0\bin;
24. java.specification.name = Java Platform API Specification
25. java.class.version = 48.0
26. java.util.prefs.PreferencesFactory =
      java.util.prefs.WindowsPreferencesFactory
27. os.version = 4.90
28. user.home = C:\WINDOWS
29. user.timezone =
30. java.awt.printerjob = sun.awt.windows.WPrinterJob
31. file.encoding = Cp1252
32. java.specification.version = 1.4
33. user.name = clarklindsey
34. java.class.path = .
35. java.vm.specification.version = 1.0
36. sun.arch.data.model = 32
37. java.home = C:\JAVA\J2SDK1.4.0\JRE
38. java.specification.vendor = Sun Microsystems Inc.
39. user.language = en
40. awt.toolkit = sun.awt.windows.WToolkit
41. java.vm.info = mixed mode
42. java.version = 1.4.0
43. java.ext.dirs = C:\JAVA\J2SDK1.4.0\JRE\lib\ext
44. sun.boot.class.path = C:\JAVA\J2SDK1.4.0\JRE\lib\rt.jar;
    C:\JAVA\J2SDK1.4.0\JRE\lib\i18n.jar;
     C:\JAVA\J2SDK1.4.0\JRE\lib\sunrsasign.jar;
      C:\JAVA\J2SDK1.4.0\JRE\lib\jsse.jar;
       C:\JAVA\J2SDK1.4.0\JRE\lib\jce.jar;
        C:\JAVA\J2SDK1.4.0\JRE\lib\charsets.jar;
         C:\JAVA\J2SDK1.4.0\JRE\classes
45. java.vendor = Sun Microsystems Inc.
46. file.separator = \
47. java.vendor.url.bug =
      http://java.sun.com/cgi-bin/bugreport.cgi
48. sun.cpu.endian = little
49. sun.io.unicode.encoding = UnicodeLittle
50. sun.cpu.isalist = pentium i486 i386

 

Environment Variables

From this output, you can see that the list of system properties includes many useful and interesting items. Everything you might need or want to know is not included there, however. One thing that is missing is a list of operating system or command shell environment variables. Alas, unlike C or C++, there is no getEnv() method in Java.

Part of the reason is that Java could conceivably be run on a platform that does not support the concept of environment variables. The expected way to pass environment-variable-like values to a Java application is with the -Dname=value syntax seen a few times in earlier chapters. Using the -D syntax on the java command line effectively adds the specified name and value to the list of system properties. Therefore, if you need to send a system environment variable named SomeEnvVar to your Java code, you can include it on the command line like this:

java -Dsome.env.variable=$SomeEnvVar YourClass (Unix/Linux)

or

java -Dsome.env.variable=%SomeEnvVar% YourClass (Windows)

Then you access the new system property as follows:

String some_value = System.getProperty ("some.env.variable");

Obviously, you can name the system property anything you want.

Graphics Settings

Information on the platform display is available from the java.awt.Toolkit, which we used in Chapter 6: Java to obtain images and in Chapter 12: Java to obtain instances of PrintJob. The method

int getScreenResolution ()

returns the resolution in dots-per-inch. (Unfortunately, on Windows systems the value returned is actually the font size setting rather than the actual current screen resolution setting.) The method

Dimension getScreenSize ()

returns the width and height of the screen in pixels. For example, you can use this to set the location of a frame at the center of the screen with a method like this:

public void center () {
  Dimension screenSize =
    Toolkit.getDefaultToolkit ().getScreenSize ();
  Dimension frameSize = getSize ();
  int x = (screenSize.width - frameSize.width) / 2;
  int y = (screenSize.height - frameSize.height) / 2;
  setLocation (x, y);
}

Other graphics information can be obtained via :

  • SystemColor class: provides via static fields the system windowing colors, which you could use, for example, for your own interface colors, as in

      myCanvas.setBackground (SystemColor.window);
      myCanvas.setForeground (SystemColor.text);

  • GraphicsEnvironment.getLocalGraphicsEnvironment() - static method which returns an instance of a concrete subclass of the GraphicsEnvironment abstract class. With a instance of this class you can find out lots of information on the local graphics system. For example, the methods:

References & Web Resources

 

Latest update: Dec. 13, 2004

  
  Part I Part II Part III
Java Core 1  2  3  4  5  6  7  8  9  10  11  12 13 14 15 16 17
18 19 20
21
22 23 24
Supplements

1  2  3  4  5  6  7  8  9  10  11  12

Tech 1  2  3  4  5  6  7  8  9  10  11  12
Physics 1  2  3  4  5  6  7  8  9  10  11  12

Java is a trademark of Sun Microsystems, Inc.