Self-taught-programmer here.
I've done a lot of pondering about how to teach programming because I tried to learn several times myself, both on my own and in classes.
I bounced off each time, until finally sticking. I always wonder what made it different that last time, and if it applies to others.
===
Have you considered starting with something with less conceptual overhead than java-in-a-shell? There's so much you need to understand before you can even get to writing code that way. You need to learn how to start and navigate a shell on your computer (different on each type, and depends on your system configuration). You need to learn about paths, and java versions, and sdks, and what 'compiling' even means, and the concept of source code vs a binary.
This doesn't seem like much to people in the field, but I remember it being really intimidating.
In contrast, I really love codecademy.org:
http://www.codecademy.com/
You're writing code within seconds. You can access it on any computer and it always works the same way. Which is to say, it works like any other web site. You start seeing things happen right away, and you don't need to understand all the infrastructure initially.
===
I feel like getting people to that first high where they see their code generate output is really important. If you can get them quickly to feeling a little bit of that power that comes from software, that starts the fire, and they'll have more motivation to figure out terminals and paths and verisons and OSes and everything else.