# Hello World in Java on Mac OS X

This document instructs you on how to set up our Java programming environment for your Mac OS X computer. It also provides a step-by-step guide for creating, compiling, and executing a Java program using either DrJava or the Terminal. All of the software used is freely available.

These instructions apply to Mac OS X 10.4.11 (Tiger) to Mac OS X 10.11 (El Capitan).

You can defer steps 4–6 until Section 1.5 of the textbook.

We strongly recommend using the Mac OS X installer described below; however, we do have manual instructions.

 0.   Install the Programming Environment

Our installer downloads, installs, and configures the Java programming environment you will be using, including Java SE 6, DrJava, and the standard libraries from our textbook.

• Log in to the user account in which you will be programming. Your account must have Administrator privileges (with a non-blank password) and you must be connected to the Internet.

• You will need a Apple's Java runtime. It is installed by default on all versions of Mac OS X prior to 10.7. If have Mac OS X 10.7 or newer and don't have Apple's Java runtime, install Java SE 6.

• To install,

• Download introcs.zip to the Desktop; double-click it to unzip (if necessary). This creates introcs.app.

• Double-click introcs.app to perform the installation. If you receive a warning that introcs.app was downloaded from the Internet, click Open.

• If the installation succeeds, you will see the following:

• A terminal window containing approximately this execution log.

• A Standard Draw window containing a red bullseye and a textbook graphic.

• Delete introcs.zip and introcs.app.

• The autoinstaller creates a new folder /Users/<username>/introcs, where <username> is replaced by your OS X username. Do not delete or move this folder (unless your intent is to uninstall everything).

 1.   Create the Program in DrJava

Now you are ready to write your first Java program. You will develop your Java programs in an application called DrJava. DrJava features many specialized programming tools including syntax highlighting, bracket matching, auto indenting, and line numbering.

• The installer creates a shortcut to DrJava on the desktop. Double-click it to launch DrJava. If you receive a warning about incoming network connections, click Allow.

• In the main DrJava window, type the Java program HelloWorld.java exactly as it appears below. If you omit even a semicolon, the program won't work.
 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } } 
As you type, DrJava does the indenting for you.

• Finally, click the Save button to save the file. Use DrJava to create the subfolder hello under /Users/<username>/introcs and name the file HelloWorld.java. The file name is case sensitive and must exactly match the name of the class in the Java program.

 2.   Compile the Program in DrJava

It is now time to convert your Java program into a form more amenable for execution on a computer. To do this, click the Compile button. If all goes well, you should see the following message in the Compiler Output pane at the bottom:

 Compilation completed. 

If DrJava complains in some way, you mistyped something. Check your program carefully, using the error messages in the Compiler Output pane as a guide.

 3.   Execute the Program in DrJava

Now it is time to run your program. This is the fun part.

• Type the following in the Interactions pane at the bottom. By convention, we highlight the text you type in boldface.
 > java HelloWorld 
If all goes well, you should see the following message:
 Welcome to DrJava. Working directory is /Users//introcs/hello > java HelloWorld Hello, World 

• You may need to repeat this edit-compile-execute cycle a few times before it works. Ask for help if you can't see the mistake.
Congratulations, you are now a Java programmer!

 4.   Command-Line Interface with the Terminal

The command-line provides capabilities beyond those available in DrJava, including redirection and piping. You will type commands in an application called the Terminal.

• The installer creates a shortcut on the desktop to the Terminal. Double-click it to launch the Terminal. You should see something like:
 machine:~ $ The ~ is shorthand for your home directory /Users/<username>. • To confirm that the Java compiler is installed, type the command in boldface below and check that the results match:  machine:~$ javac -version javac 1.6.0_65 
It's important that you see the number 1.6, 1.7, or 1.8 for the Java version number, but the rest is not critical.

• To confirm that you the Java interpreter is installed, type the command in boldface below and check that the results match:
 machine:~ $java -version java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609) Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)  Again, it's important that you see the number 1.6, 1.7, or 1.8 for the Java version number, but the rest is not critical.  5. Compile the Program from the Terminal You will use the javac command to convert your Java program into a form more amenable for execution on a computer. • From the Terminal, navigate to the directory containing HelloWorld.java, say /Users/<username>/intros/hello, by typing the cd (change directory) commands below:  machine:~$ cd introcs machine:~/introcs $cd hello machine:~/introcs/hello$ 
• Compile it by typing the javac command below:
 machine:~/introcs/hello $javac HelloWorld.java machine:~/introcs/hello$ 
Assuming the file HelloWorld.java is in the current working directory, you should see no error messages.
• To make our standard libraries accessible to Java, use the command javac-introcs instead. For example, BouncingBall.java is a program that uses our standard drawing library. After downloading the file to the current directory, you can compile it with the following command:
 machine:~/introcs/hello $javac-introcs BouncingBall.java   6. Execute the Program from the Terminal You will use the java command to execute your program. • From the Terminal, type the java command below.  machine:~/introcs/hello$ java HelloWorld Hello, World 
You should see the output of the program.
• To make our standard libraries accessible to Java, use the command java-introcs instead. For example, to execute BouncingBall.java (assuming you downloaded and compiled it in the previous step), type the following command:
 machine:~/introcs/hello \$ java-introcs BouncingBall [ displays a bouncing ball in a graphics window ] 

 Troubleshooting

The installer didn't work on my machine. What should I do? Check out the following three Q+As. If these don't resolve the issue, please contact a staff member to identify what went wrong.

When I run the installer, I get the error message "bash: /Volumes/Macintosh: No such file or directory". Your user account and OS must be on the same volume. Also, the directory from which you run the installer cannot have spaces.

When I run the installer, the terminal windows just waits after asking for a password. But, I don't even have a password-enabled account. As indicated in the instructions, you must have a non-blank password. Here are instructions for resetting a user's password.

What does the installer do? In short, it downloads, installs, and configures Java3D, Java OpenGL, our standard libraries, Checkstyle, Findbugs, and DrJava. Here is a more detailed list:

1. Checks that Java is installed.

2. Downloads and installs Java3D 1.5.2 from j3d.zip and Java OpenGL 1.1a from jogl.zip.

7. Downloads and installs the latest stable version of DrJava, from drjava-osx.tar.gz. Creates a shortcut to DrJava on the desktop. Downloads and installs the DrJava configuration file from drjava-config.txt to /Users/<username>/.drjava. Note that this will overwrite any existing .drjava configuration file.

8. Tests that the installation succeeded by compiling and executing TestIntroCS.java.

Why does the installer need my password? The installer copies four files into the /usr/bin/local directory, which requires superuser privileges.

How do I completely uninstall introcs.app?

• Delete the directory /Users/<username>/introcs (but save any of the .java files you created, if desired).

• To uninstall DrJava, delete the following two files:

• /Applications/DrJava.app.

• To uninstall the Java, Checkstyle, and Findbugs wrapper scripts, delete the following four files:

• /usr/local/bin/javac-introcs

• /usr/local/bin/java-introcs

• /usr/local/bin/checkstyle-introcs

• /usr/local/bin/findbugs-introcs

• Delete the shortcut to DrJava and Terminal on the desktop.

What happens if I rerun the installer? It will re-download, install, and configure Java 3D, Java OpenGL, our standard libraries, Checkstyle, Findbugs, and DrJava.

What should I do if I have previously installed DrJava in another location? We suggest deleting it and using the version in /Users/<username>/introcs by using the newly created shortcut to DrJava on the desktop.

Why Java 6 instead of Java 7 or Java 8? Apple provides direct support for Java 6 (but not Java 7 or Java 8).

Can I use a different version of Java? Yes, any version of Java 6, Java 7, or Java 8 should work fine. However, DrJava requires Apple Java 6 to launch (though it will support Java 7 or Java 8 if installed).

Why I try to run DrJava, I get the following error message. How should I proceed?

DrJava needs the legacy Java SE 6 runtime. Click More Info and install Java SE 6. If you upgrade to OS X 10.11 (El Capitan), OS X may remove your Java SE 6 runtime, in which case, you'll need to re-install it.

When I try to install Java SE 6, it gets stuck on "verifying." Any advice? You made need to temporarily disable rootless SIP protection. Consult a lab TA for assistance.

Can I use a different IDE? Yes you can use another IDE (such as Eclipse) but you will have to configure the IDE properties yourself (such as the classpath).

How do I break out of an infinite loop? In DrJava, click the Reset button in the menubar or select the menu option Tools -> Reset Interactions. From the Terminal, type Ctrl-c.

When using standard input, how do I signify that there is no more data? If you are entering input from the keyboard, type Ctrl-d for EOF (end of file).

I successfully compiled HelloWorld.java with javac, but, when I execute, I get the error message "Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld". What am I doing wrong? First, verify that the file HelloWorld.class is in the current directory. Be sure to type java HelloWorld without a trailing .class or .java.

When I compile or execute a program in Terminal that uses the standard library, I get an error that it cannot find the library. How can I fix this? Use the wrapper scripts javac-introcs and java-introcs.

Which shell should I use in the Terminal? Bash is the default shell in Mac OS X, but feel free to use whichever one you prefer.

Where can I learn more about the command line? Here is a short tutorial on the command line.