The exception that is thrown is a SAXParseException, a subclass of SAXException. SAXException cannot tell you where the fault occurred, but SAXParseException can, through getLineNumber() and getColumnNumber(). These do not name the element at fault but allow you to identify it through its location in the xml file. The line and column number point to the closing tag for the element.
You could use this:
try{
validator.validate(xmlFile);
System.out.println(xmlFile.getSystemId()+ " is valid");
System.out.println();
} catch (SAXParseException e)
{
System.out.println(schemaFile.getSystemId() + " is NOT valid");
System.out.println("Reason: " + e.getMessage()
+ " at line:" + e.getLineNumber()
+ " at column:" + e.getColumnNumber() +".");
} catch (SAXException e)
{
System.out.println(schemaFile.getSystemId() + " is NOT valid");
System.out.println("Reason: " + e.getMessage());
}