• lwuit 一些细节疑难杂症整理笔记


    1、textArea 显示文本内容,在部分手机上无法显示全部内容,每一行的最后几个字被挡住
    琢磨了很久终于找了出来,解决方案如下:
      TextArea txtContent = new TextArea(strContent, 12, 24);
      //添加这一句即可
      txtContent.setWidestChar('一');
    2、若要对文本框中的内容设置补丁:
    txtContent.getStyle().setPadding(Component.RIGHT, 10);
    内容往右10像素。
    3、如果list上不想要显示文字多余时的省略号
    name.setEndsWith3Points(false);
    4、重写Dialog要让标题与Form的样式一致
    dialog.show(100, 100,100,100, true);
    5、声音播放
    try {
         InputStream is = getClass().getResourceAsStream(
           "/res/NewMailSound.wav");
         Player player = Manager.createPlayer(is, "audio/x-wav");
         player.start();
        } catch (Exception e) {
         e.printStackTrace();
        }
    6、使得TextField也能够在触屏手机上点击时出现输入编辑
    解决方法:
    在TextField源码上 加上editString();函数:
    public void pointerReleased(int x, int y) {
            // unlike text area the text field supports shifting the cursor with the touch screen
         editString();
            String text = getText();
            int textLength = text.length();
            int position = 0;
            Font f = getStyle().getFont();
            x -= getAbsoluteX();
            for(int iter = 0 ; iter < textLength ; iter++) {
                int width = f.substringWidth(text, 0, iter);
                if(x > width) {
                    position = iter;
                } else {
                    break;
                }
            }
            if(position == textLength - 1) {
                if(f.stringWidth(text) < x) {
                    position = textLength;
                }
            }
            setCursorPosition(position);
            repaint();
        }
    或者官方的解决方法:http://forums.java.net/jive/thread.jspa?threadID=52716
    7、震动
     public void MakeVibrate() {
      new Thread() {
       public void run() {
        try {
         Display.getInstance().vibrate(2000);
        } catch (Exception e) {
         e.printStackTrace();
        }
       }
      }.start();
     }
    8、导致内存激增的原因(可以用自动模拟器的内存检测器进行监测C:\WTK2.5.2\bin\prefs.exe将你要的设置勾选)
    而lwuit里面的源码有两句是会导致内存一直占用,一个是TextField中的这段代码
    Code
    一个是Display
    lwuitGraphics.setGraphics(impl.getNativeGraphics());
    这两个暂时还没有仔细去研究,但是确实吃内存的所在。
    还有就是要巧用System.gc();进行内存回收,这样就会尽量的减少内存溢出的情况。
    9、滚动条拖拽方向与内容显示相反,component中的代码修改如下
    Code

    10、开启wtk模拟器的触摸屏功能
    打开\wtklib\devices\DefaultColorPhone目录下的DefaultColorPhone.properties文件(最好先安装一个UltraEdit之类的文本编辑器)。
    然后找到touch_screen选项,修改为touch_screen=true

    11、设置模拟器权限,以免开发过程中弹出烦人的提示
    打开wtk模拟器。
    选择Edit->Preferences->Security
    然后将Security domain的选项设置为maximum。

    12、内存和性能监视器
    Edit->Preferences->Memory Monitor
    Edit->Preferences->Profiler

    13、出现安装后无法打开问题
    有些Nokia手机会出现安装后无法打开,原因是安装包名称包含中文导致。

    14、想要保存Sun Java (TM) Wireless Toolkit 2.5.2 for CLDC模拟器的RMS值,可以通过Preference - 存储(s)存储根目录  :(例:/disk)  来设置.

    (选择你想要用的模拟器)然后到C:\Documents and Settings\Administrator\j2mewtk\2.5.2\appdb\DefaultColorPhone\filesystem\root1 建disk文件夹。
    若出现了已经设置好后,仍然不能起到保存作用,到C:\Documents and Settings\Administrator\j2mewtk\2.5.2\appdb\disk 中将相应的RMS文件删除即可。

    15、在S60 3th FP2版本上会出现String Index Out of Bounds Exception;原因DefaultLookAndFeel.java,在计算字符超过屏幕时出现异常。int widest = f.charWidth('W');必须改成int widest = f.charWidth('一');

    16、如果客户端创建出现cvs [server aborted]: "add" requires write access to the repository,将服务器端的CVSNT Advanced的All user are read即可.

    17、NokiaS60手机出现string index异常的原因。

    com.sun.lwuit.Font.charWidth(char)

    1、TextArea  line:186

       private static char widestChar = '国';

    2、HTMLTextArea  line:33

       private static char widestChar = '一';

    3、DefaultLookAndFeel  line:1124

       int widest = f.charWidth('国'); 

  • 相关阅读:
    C++11 Lambda表达式
    C++ 容器操作
    C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别
    使用visual C++测试
    设计模式有感
    smartProgram学习笔记
    C++析构函数
    C++指针和引用
    Python机器学习笔记:常用评估模型指标的用法
    Python机器学习笔记:不得不了解的机器学习面试知识点(1)
  • 原文地址:https://www.cnblogs.com/datong/p/1528325.html
Copyright © 2020-2023  润新知