Java 在Android中使用线程时出错
这是我的密码Java 在Android中使用线程时出错,java,android,multithreading,Java,Android,Multithreading,这是我的密码 I create a simple Project to load all images in drawable anh这里是获取所有ID的GetAllResourceId函数 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); list = (ImageView)findV
I create a simple Project to load all images in drawable
anh这里是获取所有ID的GetAllResourceId函数
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list = (ImageView)findViewById(R.id.tung);
ct = getApplicationContext();
try
{
IDs = getAllResourceIDs(R.drawable.class);
n= IDs.length;
dem=0;
list.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
++dem;
list.setImageResource(IDs[dem]);
if(dem==n-1)
dem=0;
}
});
Thread x = new Thread(
new Runnable ()
{
public void run()
{
while(true)
{
try
{
++dem;
//Toast.makeText(ct, ""+dem, 20).show();
list.setImageResource(IDs[dem]);
if(dem==n-1)
dem=0;
}
catch(Exception e)
{
//Toast.makeText(ct,e.toString(), 200).show();
}
}
}
}
);
x.start();
}
catch(Exception e)
{
Toast.makeText(this,e.toString(), 200).show();
}
}
private int[]GetAllResourceId(类aClass)引发IllegalArgumentException{
/*获取传递的类中的所有字段*/
字段[]IDFields=aClass.getFields();
/*能够存储所有ID的int数组*/
int[]IDs=新的int[IDFields.length];
试一试{
/*循环遍历所有字段并将id存储到数组*/
for(int i=0;i
文件main.xml只有一个id=“tung”的ImageView
我尝试使用名为x的Thead加载所有图像
通过使用代码
list.setImageResource(IDs[dem]);
正如您在我的代码中所看到的
但事情并没有发生
你能给我解释一下吗!非常感谢!对于初学者来说,catch(异常e)几乎从来都不是一个好主意,因为它隐藏了发生错误时可以获得的所有有意义的信息 您的错误尤其出现在后台线程的这一行:
private int[] getAllResourceIDs(Class<?> aClass) throws IllegalArgumentException{
/* Get all Fields from the class passed. */
Field[] IDFields = aClass.getFields();
/* int-Array capable of storing all ids. */
int[] IDs = new int[IDFields.length];
try {
/* Loop through all Fields and store id to array. */
for(int i = 0; i < IDFields.length; i++){
/* All fields within the subclasses of R
* are Integers, so we need no type-check here. */
// pass 'null' because class is static
IDs[i] = IDFields[i].getInt(null);
}
} catch (Exception e) {
/* Exception will only occur on bad class submitted. */
throw new IllegalArgumentException();
}
return IDs;
后台线程不允许操作UI对象。相反,您需要使用(更简单)或(高级)JRaymond!非常感谢我创建了一个Xthead类扩展线程,如下所示
list.setImageResource(IDs[dem]);
在onCreate()函数中
非常感谢我创建了一个Xthead类来扩展线程
class XThread extends Thread
{
public int ids[];
public ImageView icon;
public int dem,n;
XThread(int[] ids ,ImageView icon)
{
this.ids = ids;
this.icon= icon;
dem=0;
n = ids.length;
}
public void run()
{
while(true)
{
try
{
Thread.sleep(500);
handle.post(new Runnable()
{
public void run()
{
++dem;
icon.setImageResource(ids[dem]);
if(dem==n-1)
dem=0;
}
});
}
catch(Exception e)
{
}
}
}
}
XThread x = new XThread(IDs,list);
x.start();