当前位置: 编程技术>移动开发
本页文章导读:
▪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的。
设定了字体
所有中文放到一个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都可以运行正常。。
睡啦。。。.
这个问题困扰了一天。因为要做一个考勤机的东西,打算用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.================例子=========================================
3.使用场景:
1).一个系统需要动态地让一个对象在许多行为中选择一种行为。
2).一个系统需要动态地在几种算法中选择一种。
3).一个系统的算法使用的数据不可以让客户端知道。
4).避免使用难以维护的多重条件选择语句。
5).以不同的格式保存文件。
6).以不同的算法压缩文件。
7).以不同的算法截获图象。
.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。
4.优点:
1).提供了管理相关的算法族的办法。
2).提供了可以替换继承关系的办法。
3).可以避免使用多重条件转移语句。
5.缺点:
1).客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2).策略模式造成很多的策略类。
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对象,增加系统开销。
最新技术文章: