当前位置: 编程技术>移动开发
本页文章导读:
▪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对象,增加系统开销。
最新技术文章: