Sunday, December 23, 2007

Jython not work on UIQ3

หลังจากลองอยู่นาน สรุปว่า

Jython ใช้ไม่ได้บน UIQ3 เพราะติด Security



java.lang.reflect.InvocationTargetException:

java.lang.VerifyError: java.lang.SecurityException:

java.io.StringBufferInputStream - protected system package 'java.io'

at java.lang.J9VMInternals.verify(Unknown Source)

at java.lang.J9VMInternals.initialize(Unknown Source)

at org.python.core.PySystemState.initStaticFields(Unknown Source)

at org.python.core.PySystemState.initialize(Unknown Source)

at org.python.core.PySystemState.initialize(Unknown Source)

at org.python.util.jython.main(Unknown Source)

at java.lang.reflect.AccessibleObject.invokeV(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at kRct.actionPerformed(Unknown Source)

at java.awt.MenuItem.processActionEvent(Unknown Source)

at java.awt.MenuItem.processEvent(Unknown Source)

at java.awt.MenuComponent.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventQueue.eventLoop(Unknown Source)

at java.awt.EventQueue$EventDispatchThread.run(Unknown Source)

Saturday, December 22, 2007

jCompile not work on UIQ3

jCompileเป็นโปรแกรมที่ทำให้เราสามารถ

คอมไพล์ ไฟล์ .java ออกมาเป็น .class ได้บน SymbianUIQ

แต่มันไม่work บนUIQ3 เนื่องจาก

J2ME Personal Profile ใน UIQ3 ไม่เหมือนกับ

PersonalJava ใน UIQ2



jCompile ใช้ Compiler ที่งัดออกมาจาก JDK1.1

ซึ่งจำเป็นต้องใช้ Method

java.lang.Character.isJavaLetterOrDigit

และ

java.lang.Character.isJavaLetter

ซึ่งเป็น Deprecated Method จึงใช้ไม่ได้ บน UIQ3



แนะนำให้ใช้

isJavaIdentifierPart(char) และ isJavaIdentifierStart(char) แทน

(น่าลอง Hack ดูเหมือนกัน)

Update:

ลองดูแล้ว เพียงแค่คอมไพล์ sun.tools.java.Scanner.class เสียใหม่

แก้ isJavaLetterOrDigit ไปเป็น isJavaIdentifierPart ก็ใช้ได้แล้ว



ว่าแต่จะ Hack jCompile ให้ลำบากทำไม

UIQ3 ก็ไม่มี java I/O console

เขียนใหม่ง่ายกว่า (รู้สึกจะจับจดไปหน่อย ยังไม่เสร็จสักโปรแกรมเลย)

Redirect I/O console in Java

ได้ความรู้มาจาก Narisa.com

วิธี Redirect I/O console


PrintStream myPrintStream = new PrintStream(new myOutput());

System.setOut(myPrintStream);

System.setErr(myPrintStream);

...

class myOutput extends OutputStream {

     public void write(int c) {

         char a[] = new char[1];

         a[0] = (char)c;

         myProgram.this.myTextArea.append(new String(s));

}

Friday, December 21, 2007

From P910i to P1i

2-3เดือนนี้ เปลี่ยนอะไรหลายๆอย่าง

เปลี่ยน Blogใหม่ เปลี่ยนที่ทำงานใหม่ เปลี่ยนโทรศัพท์มือถือเครื่องใหม่ ฯลฯ

โทรศัพท์มือถือเครื่องใหม่ ใช้ SonyEricsson P1i

ที่เลือก P1 เพราะจำเป็นต้องใช้ Java ที่ทำอะไรได้มากกว่า J2ME ทั่วไป

P1 มี JVM (J2ME) อยู่ถึง 2 ตัว ในเครื่องเดียว

JVMหนึ่ง เป็น J2ME (CLDC) เหมือนโทรศัพท์มือถือทั่วไป

อีกJVM เรียกว่า Personal Profiles (CDC) ค่อนข้างใกล้เคียงกับ JAVA บน PC

แล้วก็ต้องมานั่ง port โปรแกรมจาก P910i ลง P1

เริ่มจาก JavaRun ไว้เรียกไฟล์ .class ขึ้นมาทำงาน

ไม่ต้องเสียเวลา Install หลายๆโปรแกรม หลายๆรอบ

(เพราะแต่ละโปรแกรมก็ยังเขียนไม่เสร็จสักที)


และก็ kReflection ไว้ดูวิธีใช้คร่าวๆแต่ละคำสั่ง






ต่อมาก็ Notepad

ใช้การได้ แต่ cursor มันยังเพี้ยนๆอยู่ ต้องปรับอีกนิดหน่อย



ถัดมาโปรแกรมอ่านพระไตรปิฎก เปิดแต่ละหน้าได้เร็วทันใจกว่าบน p910i เยอะ



พยายาม port swing มาลง ก็ใช้ไม่ได้ ขึ้น Buffer Create แล้วเงียบ

Jython ก็ใช้ไม่ได้อีก InvocationTargetException ตลอด

jCompile ไว้ compile .class ก็ทำงานแบบไม่มีไฟล์ออกมาเลย

แล้วจะเขียนโปรแกรม บน P1 ได้ไงล่ะนี่

ลอง JavaScript แล้ว Work ดีเลย แต่มันเขียนไฟล์ไม่ได้






เลยนึกไปถึง Rhino ซึ่งเป็น JavaScript ที่เป็น Java จริงๆ

พยายามหา rhino version 1.6R2 ล่าสุด มาลองก็ล้มเหลวอีก

ขณะกำลังจะหลับ นึกได้ ว่า Rhino ตัวเก่าเคยใช้ได้บน Microsoft SmartPhone

เอา rhino version 1.5R5 มาลอง ใช้ได้เลยทีนี้




ตัวอย่าง Rhino Code


importPackage(java.awt);

f = new Frame("javascript");

f.setSize(176,200);

bt = new Button("Exit");

bt.setSize(176,40);

function wexit() { f.dispose();}

o = { actionPerformed: wexit}

bl = java.awt.event.ActionListener(o);

bt.addActionListener(bl);

f.add("South",bt);

f.show();



ไว้ต้องลองลุ้นว่า Rhino บน P1 จะ compile .class ออกมาได้แบบบน PC หรือเปล่า

แต่แค่คิดว่าต้องเขียน Prototype language ที่ไม่มี class ก็มึนแล้ว



ปล.-อะไรที่ทำไม่ได้วันนี้ ไม่ได้แปลว่าจะทำไม่ได้ในวันถัดๆไปนี่นา

(ไปๆมาๆ เลยเขียนโปรแกรมไม่เสร็จเลยสักโปรแกรม )

Sunday, October 28, 2007

Index

Hello World!!!