Serial communications with java

I've tried to run a serial communication between my arduino and java as per the instructions here:
Arduino Playground - Java, but every time I run the program I get the output "Could not find COM port."
I verified that my arduino is on COM3, and that the program is looking for COM 3, but still no luck. I'm on windows 7 64 bit, if it matters.

Without seeing your code it is hard to say.

It should be pretty much identical to the code in the example.
Here's my arduino code:

void setup(){
 Serial.begin(9600); 
}

void loop(){
  Serial.println("Hellow world");
  delay(1000);
}

and here's my java code:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package serialtest;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier; 
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import java.util.Enumeration;


public class SerialTest implements SerialPortEventListener {
	SerialPort serialPort;
        /** The port we're normally going to use. */
	private static final String PORT_NAMES[] = { 
			"/dev/tty.usbserial-A9007UX1", // Mac OS X
                        "/dev/ttyACM0", // Raspberry Pi
			"/dev/ttyUSB0", // Linux
			"COM3", // Windows
	};
	/**
	* A BufferedReader which will be fed by a InputStreamReader 
	* converting the bytes into characters 
	* making the displayed results codepage independent
	*/
	private BufferedReader input;
	/** The output stream to the port */
	private OutputStream output;
	/** Milliseconds to block while waiting for port open */
	private static final int TIME_OUT = 2000;
	/** Default bits per second for COM port. */
	private static final int DATA_RATE = 9600;

	public void initialize() {
                // the next line is for Raspberry Pi and 
                // gets us into the while loop and was suggested here was suggested http://www.raspberrypi.org/phpBB3/viewtopic.php?f=81&t=32186
                System.setProperty("gnu.io.rxtx.SerialPorts", "/dev/ttyACM0");

		CommPortIdentifier portId = null;
		Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

		//First, Find an instance of serial port as set in PORT_NAMES.
		while (portEnum.hasMoreElements()) {
			CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
			for (String portName : PORT_NAMES) {
				if (currPortId.getName().equals(portName)) {
					portId = currPortId;
					break;
				}
			}
		}
		if (portId == null) {
			System.out.println("Could not find COM port.");
			return;
		}

		try {
			// open serial port, and use class name for the appName.
			serialPort = (SerialPort) portId.open(this.getClass().getName(),
					TIME_OUT);

			// set port parameters
			serialPort.setSerialPortParams(DATA_RATE,
					SerialPort.DATABITS_8,
					SerialPort.STOPBITS_1,
					SerialPort.PARITY_NONE);

			// open the streams
			input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
			output = serialPort.getOutputStream();

			// add event listeners
			serialPort.addEventListener(this);
			serialPort.notifyOnDataAvailable(true);
		} catch (Exception e) {
			System.err.println(e.toString());
		}
	}

	/**
	 * This should be called when you stop using the port.
	 * This will prevent port locking on platforms like Linux.
	 */
	public synchronized void close() {
		if (serialPort != null) {
			serialPort.removeEventListener();
			serialPort.close();
		}
	}

	/**
	 * Handle an event on the serial port. Read the data and print it.
	 */
	public synchronized void serialEvent(SerialPortEvent oEvent) {
		if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
			try {
				String inputLine=input.readLine();
				System.out.println(inputLine);
			} catch (Exception e) {
				System.err.println(e.toString());
			}
		}
		// Ignore all the other eventTypes, but you should consider the other ones.
	}

	public static void main(String[] args) throws Exception {
		SerialTest main = new SerialTest();
		main.initialize();
		Thread t=new Thread() {
			public void run() {
				//the following line will keep this app alive for 1000 seconds,
				//waiting for events to occur and responding to them (printing incoming messages to console).
				try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
			}
		};
		t.start();
		System.out.println("Started");
	}
}

Thanks.

The code looks fine to me.
I assume you haven't got the Arduino's serial monitor open have you?

Can you get Java to print out all the ports it can see?

I haven't had any luck getting it to print the ports it can see. Adding a System.out.println line to this program just prints null, haven't gotten anything else I could find on the web to work because of troubles with javax.comm and I don't have the serial monitor open

In Processing which is a flavor of java I use:-

println(Serial.list());

To get a list of serial ports.

Could you not change this code:-

for (String portName : PORT_NAMES) {
				if (currPortId.getName().equals(portName)) {
					portId = currPortId;
					break;
				}
			}

To print out each name as you test for it?

I tried that, and dind't get anything to print at all (?) , hovever, in the mean time I managed to get it to work by commenting out the line of code "System.setProperty("gnu.io.rxtx.SerialPorts", "/dev/ttyACM0");" Thanks for your help though!

Which Arduino do you use? A real Arduino or a clone? There are several clones that not support serial communication as Arduino.

However if you want test communication I suggest you to upload a simple sketch with serial in/out commands from Arduino IDE examples and see if serial monitor print and read serial messages.

OR you can try your Arduino with Ardulink Console (http://www.ardulink.org/screen-shots/). You have just to download Ardulink (Ardulink), upload a sketch inside the zip and run ardulink.bat or ardulink.sh depending on you operating system. It works even with a Raspberry PI. This software uses Ardulink that is a java open source library to communicate with a PC to an Arduino. It's very simple to use. I've written it so if you want I can give to you some assistance. Ardulink can communicate also with some arduino clones that not use serial communication.