当前位置:  编程技术>移动开发
本页文章导读:
    ▪java开发托盘MenuItem中文乱码的有关问题        java开发托盘MenuItem中文乱码的问题 这个问题困扰了一天。因为要做一个考勤机的东西,打算用JAVA来调用接口,然后做个托盘,让运行的程序方便管理。项目是utf-8的。文件也都是utf-8的。.........
    ▪ 对策模式        策略模式 1. 策略模式,定义了算法族,分别封装起来,让它们之间可以互相转换,此模式让算放的变化独立于使用算法的客户。2.================例子=========================================public abstra.........
    ▪ TimerTask代码示范[学习]       TimerTask代码示例[学习] TimerTask理解为一个定时任务,必须使用Handler更新UI,代码示例:   package com.test.activity; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundl.........

[1]java开发托盘MenuItem中文乱码的有关问题
    来源: 互联网  发布时间: 2014-02-18
java开发托盘MenuItem中文乱码的问题
这个问题困扰了一天。因为要做一个考勤机的东西,打算用JAVA来调用接口,然后做个托盘,让运行的程序方便管理。项目是utf-8的。文件也都是utf-8的。
设定了字体
Font font = new Font("宋体", Font.PLAIN, 12);
		Enumeration<Object> keys = UIManager.getDefaults().keys();
		while (keys.hasMoreElements()) {
			Object key = keys.nextElement();
			if (key.toString().toLowerCase().contains(".font")) {
				UIManager.put(key, font);
			}
		}

所有中文放到一个ini的文件中,也是utf-8的,但是所有中文都正常显示了,除了加入到托盘的右键菜单。MenuItem.很奇怪,用了很多方法转码,用native2ascii转码ini文件中的中文,但是一样的问题。就是MenuItem不能使用,升级了jdk,最后还是不行,
最后在快要熬不住想睡觉的时候,通过修改eclipse的编码运行成功,只需要修改eclipse的run中的参数,本来commond中的编码参数为utf-8,改成gb18030就可以了,
哎。居然就是这个问题。运行的时候。会看到
java的参数
-Dfile.encoding=GB18030

在eclipse的debug视图中,右键Properties可以看到运行的命令及参数。。


---------------------------郁闷的分割线------------------------
刚才又测试了下。用fat-jar打包成jar以后,不管是否设定encoding都可以运行正常。。
睡啦。。。.









    
[2] 对策模式
    来源: 互联网  发布时间: 2014-02-18
策略模式
1. 策略模式,定义了算法族,分别封装起来,让它们之间可以互相转换,此模式让算放的变化独立于使用算法的客户。

2.================例子=========================================
public abstract class Duck {

	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;
	
	public Duck(){}
	
	public void performFly(){
		flyBehavior.fly();
	}
	
	public void performQuack(){
		quackBehavior.quack();
	}
	
	public void setFlyBehavior(FlyBehavior fb){
		flyBehavior = fb;
	}
	
	public void setQuackBehavior(QuackBehavior qb){
		quackBehavior = qb;
	}
}


public class MallardDuck extends Duck {

	public MallardDuck(){
		quackBehavior = new Quack();
		flyBehavior = new FlyWithWings();
	}
}


public interface FlyBehavior {

	public void fly();
}


public class FlyWithWings implements FlyBehavior {

	@Override
	public void fly() {
		System.out.println("I am flying");
	}
}


public class FlyNoWay implements FlyBehavior {

	@Override
	public void fly() {
		System.out.println("I can't flay");
	}
}


public interface QuackBehavior {

	public void quack();
}


public class Quack implements QuackBehavior {

	@Override
	public void quack() {
		System.out.println("I am quack");
	}
}


public class MuteQuack implements QuackBehavior {

	@Override
	public void quack() {
		System.out.println("I can't quack");
	}
}



public class MiniDuckSimulator {

       //测试
	public static void main(String[] args) {
		
		Duck model = new ModelDuck();
		model.performFly();
		model.setFlyBehavior(new FlyRocketPowered());
		model.performFly();
	}
}


3.使用场景:
  1).一个系统需要动态地让一个对象在许多行为中选择一种行为。
  2).一个系统需要动态地在几种算法中选择一种。
  3).一个系统的算法使用的数据不可以让客户端知道。
  4).避免使用难以维护的多重条件选择语句。
  5).以不同的格式保存文件。
  6).以不同的算法压缩文件。
  7).以不同的算法截获图象。
 .以不同的格式输出同样数据的图形,比如曲线 或框图bar等。

4.优点:
  1).提供了管理相关的算法族的办法。
  2).提供了可以替换继承关系的办法。
  3).可以避免使用多重条件转移语句。

5.缺点:
  1).客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  2).策略模式造成很多的策略类。
 



    
[3] TimerTask代码示范[学习]
    来源: 互联网  发布时间: 2014-02-18
TimerTask代码示例[学习]

TimerTask理解为一个定时任务,必须使用Handler更新UI,代码示例:

 

package com.test.activity;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.MotionEvent;

import com.test.R;

public class TestTimer extends Activity {
    private static final int DOTIMERSUCCESS = 0;
	private static final String TAG = "TestTimer";
	private Timer timer;
	private MyTask myTask;
	@Override
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main); 
        timer = new Timer(); 
	}
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		setTitle("hello world...");
		if(myTask != null){
			//将原任务从队列中移除
			myTask.cancel();
		}
		myTask = new MyTask();// 新建一个任务
		timer.schedule(myTask, 4000);
		return super.onTouchEvent(event);
	}
	
	//主要负责更新UI?
	private  Handler handler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			if(msg.what == DOTIMERSUCCESS){
				setTitle("计时器已经启动...");
				Log.i(TAG, Thread.currentThread().getName());//main
			}
			super.handleMessage(msg);
		}
	};   
   //计时器任务
   class MyTask extends TimerTask {
  
		public void run() {   
            //Message message = new Message();       
            //message.what = DOTIMERSUCCESS;       
            //handler.sendMessage(message); 
            Log.i(TAG, Thread.currentThread().getName());  //Timer-0
			//或者使用sendToTarget代替sendMessage:
            Message message = handler.obtainMessage(DOTIMERSUCCESS);
            message.sendToTarget();
        }   
   }
  
}

  实现效果是当滑动屏幕时,设置Title为hello world... 4秒后Title变为计时器已经启动...,再洗滑动屏幕Title又变为hello world...,如此反复。要注意每次执行定时任务的时候要先判断上次的任务执行完没有,如果没有则需要先取消上次的任务,然后再开启新任务。从打印的Log上可以看出定时任务并不是运行在主线程之上,和AsyncTask类似。

 

补充:

AsyncTask也存在取消任务的方法, 执行AsyncTask.cancel()后,任务还是执行了(执行了dobackground方法),只是没有返回结果罢了(未执行onPostExecute)。

 

 

Mesage.sendToTarget(); 会将message传给创建它的handler然后,调用handleMessage去处理。

handler.sendMessage(Message) 也是把message穿给handler的handlMessage去处理。

两种方法都差不多。

 

创建Message对象尽量使用Handler.obtainMessage()从消息池中拿现成的,而不要使用new Message()实例化新的Message对象,增加系统开销。

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3