| ▲ | Show HN: Awesome J2ME(github.com) | ||||||||||||||||||||||||||||||||||||||||||||||
| 77 points by catstor 2 days ago | 53 comments | |||||||||||||||||||||||||||||||||||||||||||||||
An awesome list about Java platform Micro edition(J2ME). Documentation, academic papers, tutorials, communities, IDEs, SDKs, emulators, apps, video games. J2ME is a Java specification designed for old keypad phones and PDAs. MIDP, which is built upon CLDC, is used to create Midlets, which have `.jad` or `.jar` extension, and run on platforms like old keypad phones, Symbian and PDAs. MIDP is supported till Java ME SDK 3.4. | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | yanslookup 2 days ago | parent | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
The first thing I ever wrote that other people used was a j2me app freshman year in college. It was a power hour app that played a random simpsons .wav every minute. I was a pretty poor CS student, in hindsight I'm surprised I got it to work. | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | mooreds 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Wow, brings back memories! I used j2me in the early 2000s to make a mobile app where people could find home data. My first startup experience. Learned a lot but didn't earn a lot. Wrote a paper about MIDP here: https://www.mooreds.com/midp/midp.html . No idea if it is still relevant 20 years on. | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | zahlman 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
I did J2ME development in the 64KB JAR era. I can still remember setting up palette swapping (inspired by retro consoles, but still a common contemporary idea e.g. on GBA) by loading the byte data of PNG resources into an array and locating and replacing the PLTE chunk before handing it off to the MIDP image loader. Always wondered if anyone else had picked up the trick. I can also remember people suggesting on Nokia in particular to just store raw bitmaps (since they'd be compressed in the JAR anyway) with their API and that this was saving tons of space for some people... later I found out that one of these reports came from someone who had started out with individual image files for 12x12 tiles that had a full 256-entry PLTE (i.e., more colour entries than pixels). I also remember a device-specific bug where doing something like `x[y+1]`, where `y` was a static byte set to -1, would produce an `IndexOutOfBoundsError` claiming the index used was -256. I assume this was some threading issue in the Java implementation, where the value would be loaded into a register and then the sign-extension would somehow affect the register after the increment. I only ever reproduced it with static class members, I think (but it did also happen with shorts). | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | foofoo12 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Brings back memories but I can't say they are good. It was so limited that it was mostly frustration. | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | micheljansen 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Thanks for making me feel old! One of my first real jobs involved MIDP/J2ME development. I cannot say I loved the platform, but it somehow felt more magical back then to develop something and run it on a Nokia brick than (mobile) development of today. | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | 8mobile a day ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Wow, what a project! I've spent a lot of time on j2me developing various utilities. Those were the good old days when you could try everything on your basic Nokia or Symbian. Here are my applications: https://www.8mobile.org/products/j2me/moneymanager/ https://www.8mobile.org/products/j2me/moneymanager2/ https://www.8mobile.org/products/j2me/rssmanager/ https://www.8mobile.org/products/j2me/spymanager/ Thanks Otto | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | fidotron 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Wow this brings back a lot. I did J2ME at Macrospace/Glu, Masabi, Javaground and EA, and at one point near the end was simultaneously responsible for 128k jars of Tetris and 4GB apk + obb for Real Racing because that is how rapidly the field exploded. Absolute madness. J2ME gets a lot of stick, but modern mobile has actually recreated almost all the same problems. The big one for apps was the out of the box UI components were awful and utterly inconsistent between manufacturers. Several of the above companies tackled this (think conceptually like Flutter), but the market wasn't ready largely because data plans were expensive. For games though, honestly, J2ME was dreadful, but in non-obvious ways: the control interfaces were hopeless, and sound was basically a non starter. People would be willing to forgive a lot more had the controls and sound been decent. Then the graphics stuff was just inconsistent enough that too much time ended up focused on portability and not enough on if the game was actually as fun as it should be. A consequence of that is most of the best J2ME games were ports from other systems or shameless reskins of other things. But there is something to be said about taking a tube/metro/bus and seeing people playing stuff you did and enjoying it, especially given back then it was impossible to know who the players really were since things were sold through the carriers. | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | tauntz 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Ha, nostalgic! Was part of a small 3 person team that built the Skype app for J2ME back in the day. Fun times.. :) | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | devsda 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Ah, the good old days of browsing wap sites to download "apps". Installing some of them only to find that my budget phone doesn't support the j2me profile required to run them. The java ecosystem of those days had similar terms like the servlet (still surviving), applet & midlet. Is there a significance of the suffix "let" or somebody thought let's add "let" to everything. | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | Randomno 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
One of the difficulties I had searching for J2ME resources is that the mobile equivalent of the JVM is called KVM (K virtual machine), so most of the search results are about Linux's Kernel-based virtual machine instead. | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | indigo945 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
MeBoy brings back some memories. I used it to catch so many Pokémon in middle school. What's really cool about that emulator is the way its sound emulation works. Instead of emulating the Gameboy's synthesizer synchronously and outputting a PCM waveform to a buffer, which is probably impossible on J2ME due to hardware and platform constraints, it uses the phone's own MIDI (or square wave) synthesizer to play whatever the GameBoy synthesizer should be playing. This gives the video game music a very idiosyncratic sound when played back in MeBoy. | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | kitd 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Memories! I built a race timing app in J2ME. A useful exercise in designing a good UX within a constrained environment. Nowadays we just throw browser bloat around without a care. | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | mghackerlady 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Someone should make a 4G LTE/5G dumb phone capable of running J2ME. I'd buy it, my dumb phone doesn't even have snake on it lol | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | tacker2000 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
I remember creating a J2ME game back at uni, where the theme was to pour a beer exactly right. Tested of course on the latest SonyEricsson of the time! Maybe i can dig that out again and run it somewhere. | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | froh42 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
What is the next thing coming up? "Awesome WAP"? | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | lormayna 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
One of my university projects was an encrypted message system via Bluetooth using J2ME. Never worked, but I learnt a lot of things :) | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | Raed667 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Blast from the past ! I remember building my last J2ME project ~2012 and struggling to find a Nokia phone to test it | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | juancn 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Gosh! The memories! No floating point! It was fun to build small apps and felt like magic at the time. | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | zerr 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Would interesting to hear about J2ME gold rush. Any success (or fail) stories? | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | flykespice 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
BTW there is J2ME Loader, a free j2me emulator for android devices available through PlayStore, it plays very nice (you can customize your keys too). One I noticed is j2me games often don't play music on the background and just resorts to sporadic sounds, any reason for that? | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | andrepd 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Have very fond memories of playing J2ME games. Here's some off the top of my head: Zombie Infection (what a great game!), Galaxy on Fire, Sims, Age of Empires, Real Football, Orcs&Elves, Pokémon Crystal on an emulator... And of course a limited port of Worms Armageddon that has to be one of the games I sunk the most time on, seeing as I played several matches a day with my friends for an entire school year! Ahh I even scribbled a "campaign mode" on my math notebook during class instead of paying attention! | |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | invalidname 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
No LWUIT? | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | anthk 2 days ago | parent | prev | next [-] | ||||||||||||||||||||||||||||||||||||||||||||||
gopher://hoi.st has Pocket Gopher, a J2ME gopher client. Also, you can head to gopher://magical.fish, gopher://hngopher.com and gopher://sdf.org to get 'modern' services and news. | |||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||
| ▲ | k4rnaj1k 2 days ago | parent | prev [-] | ||||||||||||||||||||||||||||||||||||||||||||||
Still remember installing those j2me games on my classmate's phones. It was a bit hard to figure out and find the right resolutions versions for each phones. | |||||||||||||||||||||||||||||||||||||||||||||||