This DrJava-based Java programming environment is no longer being supported(because DrJava in no longer being actively developed and DrJava is incompatible with Java 11).It has been replaced by the following IntelliJ-based programming environment forMac 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.
You will need an Intel-based Mac runningMac OS X 10.8 (Mountain Lion) to Mac OS X 10.13 (High Sierra).
Installing Java 8 and Eclipse on Mac OS X. This page tells you how to download and install Java 8 and Eclipse on Mac OS X, and how to configure Eclipse. Java software for your computer, or the Java Runtime Environment, is also referred to as the Java Runtime, Runtime Environment, Runtime, JRE, Java Virtual Machine, Virtual Machine, Java VM, JVM, VM, Java plug-in, Java plugin, Java add-on or Java download.
You can defer steps 4–6 until Section 1.5 of the textbook.
Our installer downloads, installs, and configures the Java programming environment you will be using, including 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.
- Install Oracle's implementation of the Java Platform, Standard Edition Development Kit (JDK 8).Do not install either JDK 9 or JDK 10, as they are currently incompatible with DrJava.
- Browse toJava SE Development Kit 8u171.In the first table, check Accept License Agreementand the click jdk-8u171-macosx-x64.dmg,which corresponds to the entry for Mac OS X.The exact verison 8u171 is not essential.
- Double click the downloaded file jdk-8u171-macosx-x64.dmg to begin the installation.Enter your OS X password when prompted.We recommend all of the default options.
- Delete jdk-8u171-macosx-x64.dmg.
- To install,
- Download introcs.zip to the Desktop;double-click it to unzip (if necessary). This creates introcs.app. Security and Privacy -> General -> Allow applications downloaded from: Anywhere.To enable this option, you may need to click the lock in the lower left-hand corner(and type your password when prompted).-->
- Double-click introcs.app to perform the installation.If you receive a warning that introcs.app is an applicationdownloaded from the Internet, click Open.
- Enter your OS X password when prompted.
- Download introcs.zip to the Desktop;double-click it to unzip (if necessary). This creates introcs.app. Security and Privacy -> General -> Allow applications downloaded from: Anywhere.
- If the installation succeeds, you will see the following:
- A Terminal window containing approximately thisexecution log.
- A Standard Drawing window containing a red bullseye and a textbook graphic.
- Delete introcs.zip and introcs.app.
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 programHelloWorld.java exactly as it appears below. If you omit even a semicolon, the program won't work. As you type, DrJava does the indenting for you.
- Finally, click the Save button to save the file, using the name HelloWorld.java.The filename is case sensitive and must exactly match the name of theclass in the Java program.
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 Outputpane at the bottom:
If DrJava complains in some way, you mistyped something.Check your program carefully, using the error messages in the Compiler Output paneas a guide.
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. If all goes well, you should see the following message:
- 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.
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: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:It's important that you see the number 1.8for the Java version number, but the rest is not critical.
- To confirm that you the Java interpreter is installed, typethe command in boldface below and check that the results match:Again, it's important that you see the number 1.8for the Java version number, but the rest is not critical.
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 ~/Desktop/hello,by typing the cd (change directory) commands below:The ~ is shorthand for /Users/<username>.
- Compile it by typing the javac command below:Assuming the file HelloWorld.java is in the current working directory,you should see no error messages.
- To make our textbook standard libraries accessible to Java,use the command javac-introcs instead.For example,BouncingBall.javais a program that uses our standard drawing library.After downloading the file to the current directory,you can compile it with the following command:
You will use the java command to execute your program.
- From the Terminal, type the java command below.You should see the output of the program.
- To make our textbook standard libraries accessible to Java,use the command java-introcs instead. For example, to executeBouncingBall.java(assuming you downloaded and compiled it in the previous step), type the following command:
How long should the installer take?Once downloaded, the Oracle Java installer should take about 10 seconds and the introcs.app installer should take about 20 seconds. If you have virus detection software running (such as McAfee Endpoint), each could take 5–10 minutes (or more).
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.
![Mac Mac](/uploads/1/2/5/8/125860239/319446522.jpg)
When I run the installer, the terminal window just waits after asking for a password.But, I don't even have a password-enabled account.You must have a non-blank password. Here are instructions forresetting a user's password.
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.
When I run the installer, I get an error like bash: /private/var/folders/70/n8stth1d1x33hrw8n07kf1280000gn/T/AppTranslocation/45FC25B7-17E3-46DF-AC27-9A7EF56DDFD3/d/algs4.app/Contents/Resources/launcher.sh: No such file or directory.What should I do? This is likely due to OS X Sierra path randomization.Use the Finder to move introcs.app to some other folder and try again.
What does the installer do?In short, it downloads, installs, and configures Checkstyle, Findbugs, and DrJava, and the textbook standard libraries.Here is a more detailed list:
- Checks that Java is installed.
- Downloads the textbook standard libraries fromstdlib.jar.
- Downloads the Java wrapper scriptsjavac-introcs andjava-introcs.
- Downloads and installsFindbugs 3.0.1from findbugs.zip.Downloads our findbugs configuration file findbugs.xml and wrapper script findbugs-introcs.
- Downloads and installsPMD 5.8.1from pmd.zip.Downloads our PMD configuration file pmd.xmland wrapper script pmd-introcs.
- Downloads and installsCheckstyle 8.2from checkstyle.zip.Downloads our checkstyle configuration file checkstyle-introcs.xml and wrapper script checkstyle-introcs.
- Downloads and installs the latest stable version ofDrJava,from DrJava.zip.Creates a shortcut to DrJava on the Desktop.Downloads and installs the DrJava configuration file fromdrjava-config.txtto /Users/<username>/.drjava.Note that this will overwrite any existing .drjava configuration file.
- Tests that the installation succeeded by compiling and executing TestIntroCS.java.
Why does the installer need my password?The installer copies files into /usr/local/bin and/usr/local/introcs,which require superuser privileges.
How do I completely uninstall introcs.app?
- Delete the directory /usr/local/introcs.
- To uninstall DrJava, delete the following two files:
- /Applications/DrJava.app.
- /Users/<username>/.drjava.
- To uninstall the Java, Checkstyle, and Findbugs wrapper scripts,delete the following files:
- /usr/local/bin/javac-introcs
- /usr/local/bin/java-introcs
- /usr/local/bin/findbugs-introcs
- /usr/local/bin/pmd-introcs
- /usr/local/bin/checkstyle-introcs
- Delete the shortcut to DrJava and Terminal on the Desktop.
What happens if I re-run the installer?It will re-download, install, and configure Checkstyle, Findbugs, DrJava, and our textbook libraries.
Can I use a different version of Java?Any version of Java 8 (either Oracle or OpenJDK) should work fine.Note that DrJava does not currently work with Java 9.
I have both Java 8 and Java 9 installed, but the default version is Java 9. How doI change the default version back to Java 8?To disable Java 9, type the following commands in the Terminal:
You should still be able to use Java 9 by specifying the full path tojavac
and java
, e.g.,/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/javac
.Why I try to run DrJava, I get the following error message. How should I proceed?
Are you sure that you are using the version of DrJava that was installedby our auto-installer (and not downloaded from the DrJava website)?We suggest deleting any older versions of DrJava and using the one that the auto-installer copied to the /Applications directory.Can I use a different IDE? Yes you can use another IDE (such as Eclipse) butyou will have to configure the IDE properties yourself (such as the classpath). 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 typing input in the Terminal or DrJava, type Ctrl-d on its own line.
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 .classor .java.-->
When I compile or execute a program in Terminal that uses thetextbook 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 add stdlib.jar to the Java classpath.
Which shell should I use in the Terminal?Bash is the default shell in Mac OS X, but feel free to usewhichever one you prefer.
Where can I learn more about the command line?Here is a short tutorial on thecommand line.
Last modified on August 14, 2019.
Copyright © 2000–2019Robert SedgewickandKevin Wayne.All rights reserved.
Copyright © 2000–2019Robert SedgewickandKevin Wayne.All rights reserved.
In the past two articles you have seen how to customize your Java application so that it looks and feels more like a native Macintosh application when running on Mac OS X without changing the end user experience on other platforms. A combination of runtime properties and coding changes that targeted Mac OS X specific APIs made a big difference to that audience.
Recall that Mac OS X is a melding of two worlds. Hard core UNIX programmers can pop open a Terminal window and write their Java code using vi and compile and run it from the command line. There is, however, the more traditional Mac audience that interacts with their computer through a friendly UI that follows Apple Human Interface guidelines.
In this article, we look at deploying your Java application. The technical geek audience might be happy with running a class with a
main()
method from the command line but the wider audience expects a double-clickable icon that looks and acts like every other native application. In this article, we travel from one end of the spectrum to the other to broaden your potential user base.Although you should 'test everywhere', your build machine may not be a Mac. Fortunately, as you will see, a double-clickable Macintosh application is just a directory with some special contents and a name that ends with
.app
. Even on a Windows machine you should be able to modify your build script to package up a Mac-specific version of your application.Primitive Distributions
Because Mac OS X ships with J2SE 1.4.1 and J2SE 1.3.1, you can distribute your application as class files or jar files and - in theory - your customer could run your application from the Terminal application. We start with these models and quickly move to double-clickable jar files and shell scripts.
For this article, use the Java Sound Demo as the running example. Download and unzip the zip file. Inside the
JavaSoundDemo
directory you will find the source files inside of the src
subdirectory, a jar file, audio files, and html files that we will not use.Raw Class Files
As a developer, you don't think twice about compiling the source files and running the application using the command line. Compiling the eight files in the
src
directory generates fifty class files. You can then run the sample application from the command line like this.java JavaSound
The Java Sound Demo starts up. We haven't customized the application in any way so the menu appears at the top of the JFrame and not where Macintosh users expect. The application looks like this out of the box.
You have done this compile and run step so many times that you hardly think twice about it. Think of the least technical person you know and ask whether they would be likely to follow these steps to run your application if a competing application were easier to install and run.
This example demonstrates two separate areas of usability. Once we got the application up and running it looked good and ran fine. You would not, however, want to distribute an application to an end user this way. You would have to somehow bundle up the fifty class files for easy download and installation. You would then have to provide instructions for running the application using, in the case of Mac OS X, the Terminal application.
Jar Files
If you are going to have to package up the class files for distribution anyways, you may as well produce a jar file. And, if you are going to produce a jar file, it ought to be executable. In the case of the Java Sound Demo, the file
JavaSoundDemo.jar
is executable. Because Mac OS X ships with the Jar Launcher application, the end user needs only double click on the jar file and the application will launch.To make the jar file executable, the manifest must include the name of the Main class file. Unjar
JavaSoundDemo.jar
with the command jar xvj JavaSoundDemo.jar
. Here's the file META-INF/MANIFEST.MF
.Shell Scripts and Helper Applications
For larger or more complicated applications you are likely to have more than one jar file along with resource files. A common strategy for targeting multiple platforms is to include a batch file and a shell script. Choose the non-platform specific download from the NetBeans homepage. Inside of the bin subdirectory you will find applications for running NetBeans on a variety of platforms.
The shell script
runide.sh
can be run from the command line like this.sh runide.sh -jdkhome /Library/Java/Home
The NetBeans IDE starts up with this decidedly non-Mac OS X look and feel.
You could, of course, modify the shell script to modify this look and feel, but the NetBeans developers decided on a different approach. Even though the typical NetBeans audience member is technically competent, there should be a friendlier way to start the IDE. They have created a native Mac OS X application called
NetBeansLauncher
.The version of
NetBeansLauncher
that is included in the generic NetBeans download is a good next step. You will see how the team took it farther in the next section. On a Mac OS X computer you can double click on the macosx_launcher.dmg
file inside of the bin
directory. This is a disk image. Drag the NetBeansLauncher
from the expanded disk image back into the bin
directory. Now double click on the NetBeansLauncher
. The ReadMe file that was also in the disk image provides the following information about usage.When launched for the first time, NetBeansLauncher needs to find NetBeans root directory. First it looks into NetBeansLauncher.app itself. If it does not find NetBeans root directory there user must specify NetBeans root directory manually.
For this download, the first time the user starts up the
NetBeansLauncher
, they need to navigate to the netbeans
directory. After that, double clicking on the NetBeansLauncher
starts up the NetBeans IDE as if it were any other native Mac OS X application.First Class Mac OS X Applications
If you download the Mac OS X disk image from the NetBeans distribution and mount it you may be surprised at the simplicity of what you find. Unlike the complex structure visible in the other distributions, you will see five files with documentation and a single application. To install, you can move this
NetBeansLauncher
application anywhere on your hard drive. Double click on it and the NetBeans IDE starts right up.This is the experience that is expected on Mac OS X. The package structure and complexity is hidden from the user and they can't accidentally move a file that renders the IDE unusable. In this section we'll look more closely at the package structure and how to create a Mac OS X application whether or not our build machine is a Mac.
Packages in Mac OS X
Consider again the sentence from the
NetBeansLauncher
instructions that says in order to locate the NetBeans root directory, 'First it looks into NetBeansLauncher.app itself.' This implies that NetBeansLauncher
is a directory with the name 'NetBeansLauncher.app'. In the mounted disk image, either right click or Ctrl-click on the NetBeansLauncher icon and choose to 'Show Package Contents'.The structure is the same for all Mac OS X applications. There is a
Contents
directory with an XML file named info.plist
, a text file named PkgInfo, a MacOS directory, and a Resources directory. If you don't have a creator code registered with Apple the PkgInfo text file should contain only the following.If you have a creator code, use it in place of the question marks. Ordinarily the MacOS folder contains a small stub file that launches the Java VM. In this case the NetBeans team has written their own application. We will look more closely at a property list file in the next section. For now, take a look at the contents of the
Resources
directory.You can see the contents of the same
netbeans
package inside of the Resources
subdirectory. This is your key to deploying on Mac OS X. Add in the necessary pieces and then just bundle up your ordinary distribution in the appropriate location. If you have a more flexible build process you should also strip out those pieces that aren't needed for the Mac OS X application such as the Windows executables.If you are interested in digging deeper into the structure of a Mac OS X application, you will find more information in the Apple publication Anatomy of a Bundle.
Creating 'Native' Java Applications on Mac OS X
If you develop on Mac OS X you can use the
Jar Bundler
application to turn jar files into Mac OS X applications. Jar Bundler
is distributed with the other developer tools and is located in Developer/Applications/
. Start it, select the 'Classpath and Files' tab and add the file JavaSoundDemo.jar
.Select the 'Build Information' tab. For 'Main Class', navigate to the
JavaSoundDemo.jar
file again and select JavaSound
from the drop down list. This list is populated by any classes in the jar file containing a main()
method. Accept all of the default settings for the options. You can use the default Java application icon or you can create your own. The icon you see below started as a screen shot of the running Java Sound Demo and was transformed into an icon using the IconComposer
application that is also distributed as part of the developer tools.Press 'Create Application' and enter the name 'JavaSoundDemo'. A Mac OS X application is created for you. You can show the package contents of the generated application as before. You can view the property list with Apple's Property List Editor or with any text editor. It is just an XML file with properties stored as name - value pairs.
The Java properties indicate the location of the jar file, the name of the Main class, and the version of the JRE to be used. The other properties include a pointer to the icon file and to the Java application stub file that is the native executable.
Creating Mac OS X Java Applications on Other Platforms
Take a look at the contents of the package that was generated by
Jar Bundler
on Mac OS X.On another platform you need to duplicate this structure. To create an application named 'JavaSoundDemo' on, say, a Windows machine, start by creating a directory and naming it
JavaSoundDemo.app
. Next, create a subdirectory named Contents
. Inside of Contents
you will need a MacOS
directory with the JavaAPplicationStub
. You can create the PkgInfo
text file and your Info.plist
can also be generated by hand and should contain the following XML.You will need a
Resources
directory with a Java
subdirectory into which you put the JavaSoundDemo.jar
file. In other words, with the exception of the JavaApplicationStub
and the music.icns
file, everything else can be created on another platform.If you use Ant you can easily add a target that takes your jar files, images, and other resources and bundles it up as a Mac OS X application bundle that includes the plist file and Java application stub in the appropriate locations. Every time you create a new build you will automatically have your Mac OS X version. You can also find a growing number of Ant tasks that automate some of the steps outlined in this article.
Summary
When it comes time to deploy your Java application, consider the ease of use of your target audience. Even developers appreciate the double clickable version of the NetBeans IDE. Creating a Java application that looks and feels like a native application does not require a lot of extra work and can easily be integrated into your build process even if your build machine runs a different operating system.