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

本文提供了一系列移动开发中的实用技巧,包括解决textArea文本显示不全、TextField触摸输入问题、内存管理等,并介绍了如何优化滚动条拖拽体验及配置模拟器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中的这段代码


     //  public boolean animate() {
    
//  boolean ani = super.animate();
    
//  if (hasFocus()) {
    
//  long currentTime = System.currentTimeMillis();
    
//  if (drawCursor) {
    
//  if ((currentTime - cursorBlinkTime) > blinkOnTime) {
    
//  cursorBlinkTime = currentTime;
    
//  drawCursor = false;
    
//  return true;
    
//  }
    
//  } else {
    
//  if ((currentTime - cursorBlinkTime) > blinkOffTime) {
    
//  cursorBlinkTime = currentTime;
    
//  drawCursor = true;
    
//  return true;
    
//  }
    
//  }
    
//  if (pressedAndNotReleased) {
    
//  if (currentTime - pressTime >= getLongClickDuration()) {
    
//  longClick(pressedKeyCode);
    
//  }
    
//  } else {
    
//  if (pendingCommit && currentTime - releaseTime > commitTimeout) {
    
//  commitChange();
    
//  }
    
//  }
    
//  } else {
    
//  drawCursor = false;
    
//  }
    
//  return ani;
    
//  }

一个是Display
lwuitGraphics.setGraphics(impl.getNativeGraphics());
这两个暂时还没有仔细去研究,但是确实吃内存的所在。
还有就是要巧用System.gc();进行内存回收,这样就会尽量的减少内存溢出的情况。
9、滚动条拖拽方向与内容显示相反,component中的代码修改如下


     public   void  pointerDragged( int  x,  int  y) {
        
if  (isScrollable()  &&  isSmoothScrolling()) {
            
int  axisValue;
            
if  (isScrollableY()) {
                axisValue 
=  y;
            } 
else  {
                axisValue 
=  x;
            }

            
if  ( ! dragActivated) {
                dragActivated 
=   true ;
                beforeLastScrollY 
=  axisValue;
                lastScrollY 
=  axisValue;
                getComponentForm().setDraggedComponent(
this );
            }
            
// save time and locations to create velocity when the 
            
// pointer is released
             long  currentTime  =  System.currentTimeMillis();
            
if  (currentTime  !=  lastTime[(pLastDragged  +  lastTime.length  +   1 %  lastTime.length]) {
                lastTime[pLastDragged] 
=  System.currentTimeMillis();
                lastDragged[pLastDragged] 
=  axisValue;
                pLastDragged 
=  ( ++ pLastDragged)  %  lastTime.length;
            }

            beforeLastScrollY 
=  lastScrollY;
            lastScrollY 
=  axisValue;

            
//  we drag inversly to get a feel of grabbing a physical screen
            
//  and pulling it in the reverse direction of the drag
             if  (isScrollableY()) {
                
int  scroll  =  getScrollY()  -  (beforeLastScrollY  -  axisValue);
                
if  (scroll  >=   0   &&  scroll  <  getPreferredH()  -  getHeight()) {
                    setScrollY(scroll);
                }
            } 
else  {
                
int  scroll  =  getScrollX()  -  (beforeLastScrollY  -  axisValue);
                
if  (scroll  >=   0   &&  scroll  <  getPreferredW()  -  getWidth()) {
                    setScrollX(scroll);
                }
            }
        } 
else  {
            
// try to find a scrollable element until you reach the Form
            Component parent  =  getParent();
            
if  ( ! (parent instanceof Form)) {
                parent.pointerDragged(x, y);
            }
        }
    }

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文件夹。
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即可.

 

转自:http://www.cnblogs.com/datong/archive/2009/07/22/1528325.html

基于C2000 DSP的电力电子、电机驱动和数字滤波器的仿真模型构建及其C代码实现方法。首先,在MATLAB/Simulink环境中创建电力电子系统的仿真模型,如三相逆变器,重点讨论了PWM生成模块中死区时间的设置及其对输出波形的影响。接着,深入探讨了C2000 DSP内部各关键模块(如ADC、DAC、PWM定时器)的具体配置步骤,特别是EPWM模块采用上下计数模式以确保对称波形的生成。此外,还讲解了数字滤波器的设计流程,从MATLAB中的参数设定到最终转换为适用于嵌入式系统的高效C代码。文中强调了硬件在环(HIL)和支持快速原型设计(RCP)的重要性,并分享了一些实际项目中常见的陷阱及解决方案,如PCB布局不当导致的ADC采样异常等问题。最后,针对中断服务程序(ISR)提出了优化建议,避免因ISR执行时间过长而引起的系统不稳定现象。 适合人群:从事电力电子、电机控制系统开发的技术人员,尤其是那些希望深入了解C2000 DSP应用细节的研发工程师。 使用场景及目标:①掌握利用MATLAB/Simulink进行电力电子设备仿真的技巧;②学会正确配置C2000 DSP的各项外设资源;③能够独立完成从理论设计到实际产品落地全过程中的各个环节,包括但不限于数字滤波器设计、PWM信号生成、ADC采样同步等。 其他说明:文中提供了大量实用的代码片段和技术提示,帮助读者更好地理解和实践相关知识点。同时,也提到了一些常见错误案例,有助于开发者规避潜在风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值