"Students found it hard to write programs that did not have a graphic interface"
Are they for real? What's easier than System.out.printing to console? Have you ever tried to write GUI code from scratch? Sure, drag-and-drop GUI-building tools tend to come built-in to Java IDEs these days, but it's not a feature of the Java language. Considering how many GUI-building Java tools there are available, and how bloody hard it sometimes is to write Swing code that works, I'd rather say it's more a feature of Java to /obfuscate/ GUI operations!
"had no feeling for the relationship between the source program and what the hardware would actually do"
Well, isn't that the point of Java? "Write once, run anywhere"? I hear that writing generally portable Java code is not always possible in practice, but, as long as the porgram is doing what thought I told it to, I'd rather not care what the hardware is up to, thankyouverymuch! If you wanna get in touch with the hardware, write in C or assembly!
"(most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging"
C can't express everyting that assembly code can, but it gives the option to call assembly code from its functions. Similarly, methods in Java may be decalred 'native'; that is, they are implemented in C.
Shock-horror: Java-learned folks come to C and understand nothing of the semantic's of C's pointers (shocking, conisidering Java deliberately abstracts such things), which makes the use of C is systems programming very challenging. Great, why not teach them C then,if the point is to program systems in C?
Java is a different language for a different purpose, and Java can't be blamed for not being able to express the concepts of a language of a lower level than itself.