80,337
社区成员
发帖
与我相关
我的任务
分享
import java.util.HashSet;
import java.util.Set;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Main1Activity extends Activity {
private EditText et;
private TextView tv;
private CalThread thread;
private final int FLAG = 0x123;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
et = (EditText)findViewById(R.id.editText1);
tv = (TextView)findViewById(R.id.tv);
thread = new CalThread();//创建子线程并启动子线程
thread.start();
}
/** private Handler handler1 = new Handler() { //接受和处理消息
public void handleMessage(Message msg1) {
tv.setText(et.getText().toString()+"以内的质数有:"+msg1.toString());
}
};*/
public class CalThread extends Thread{ //子线程
public Handler handler;
public void run(){
Looper.prepare();//创建当前线程的Looper对象---->创建消息队列
handler = new Handler(){
public void handleMessage(Message msg) {
if(msg.what ==FLAG){
Set<Integer> set = new HashSet<Integer>();
int num = msg.arg1;
test:for(int i=2;i<=num;i++){//判断2-输入值之间的质数
for(int j=2;j<=Math.sqrt(i);j++){
if(i!=2&&i%j==0){//不是质数,跳出循环
continue test;
}
}
set.add(i);
}
Toast.makeText(Main1Activity.this, set.toString(), Toast.LENGTH_SHORT).show();
/**Message msg1 = new Message();
msg1.obj = set;
handler1.sendMessage(msg);*/
}
}
};
Looper.loop();//死循环读取消息队列中的消息
}
}
public void myCal(View view){ //按钮事件
String msg = et.getText().toString();
Message m = new Message();
m.what = FLAG;
m.arg1 = Integer.parseInt(msg);
thread.handler.sendMessage(m);
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
et = (EditText) findViewById(R.id.editText1);
tv = (TextView) findViewById(R.id.tv);
// thread = new CalThread();// 创建子线程并启动子线程
// thread.start();
}
/**
* private Handler handler1 = new Handler() { //接受和处理消息 public void
* handleMessage(Message msg1) {
* tv.setText(et.getText().toString()+"以内的质数有:"+msg1.toString()); } };
*/
public Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == FLAG) {
if (msg.what == FLAG) {
Set<Integer> set = msg.obj;
// 把值赋值给TextView就可以显示了,这个你自己写吧
// tv.setText(...);
}
}
}
};
public class CalThread extends Thread { // 子线程
private int num;
public CalThread(int num) {
this.num = num;
}
public void run() {
Set<Integer> set = new HashSet<Integer>();
// int num = msg.arg1;
test: for (int i = 2; i <= num; i++) {// 判断2-输入值之间的质数
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i != 2 && i % j == 0) {// 不是质数,跳出循环
continue test;
}
}
set.add(i);
// 如果先在这个时候通知主线程更新UI可以在这里调用Handler(注意这个Handler是在主线程中声明定义的)
Message msg = handler.obtainMessage();
msg.what = FLAG;
msg.obj = set;
handler.sendMessage(msg);
}
}
}
public void myCal(View view) { // 按钮事件
String msg = et.getText().toString();
// Message m = new Message();
// m.what = FLAG;
// m.arg1 = Integer.parseInt(msg);
// thread.handler.sendMessage(m);
thread = new CalThread(Integer.parseInt(msg));// 创建子线程并启动子线程
thread.start();
}