You know how they say "if you want to learn programming, you have to sit down and do some programming!". Start off with the general stuff: learn the primitive data types ( int, float, char, ... ), boolean algebra, conditions, loops, declaring your functions(methods). Take a good look at arrays (variable[index]), then try understanding so-called multi-dimentional arrays (variable[index1][index2]...). Practice all of those by solving actual problems (calculating the factorial, sorting data in arrays, and many many more).
Once you become confident with above stuff, move on to the actual object-oriented part. Get a good understanding what is a class, object, constructor, 'visibility' (public,private,protected). After 'crunching' these, move on to the advanced OOP stuff - inheritance, abstract classes, interfaces, polymorphism, static members... With this knowledge you should be able to understand how (and why) THE ALMIGHTY L2J core works (and even do your own events, systems 'n shizz yo).
Use the sun's java tutorial which Matim posted. It is very very good and helped me a lot when i 'learned' java after using only c++ at uni. Can't remember if it actually includes problems to solve, but you'll find lots of them in 'java books'.
All in all you just have to sit and code. Start with simple tasks and go advanced. In other words, you can't do 'le parkour' if you can't even walk properly.