In class AccessInTopLevelClass: void main(String argv) is not defined This is a clever cipher which conceals the fact that the method void main(String argv) is not defined in class AccessInTopLevelClass. ! Looking at your code, you do have a main() method, but looking at the parentheses it's actually in AccessInTopLevelClass.NestedTopLevelClass.NestedTopLevelClass1 - a doubly-nested static member class. This is not the same as AccessInTopLevelClass. When you type "java AccessInTopLevelClass", you're telling the JVM to look in that class for a main method. If it can't be found, you can't run your program.