我正在构建一个可以发送和接收OSC的应用程序。我正在使用JavaOSC,它完美地满足了我的需求。
我在OSC消息中发送颜色值,并接收它们。
我发送的颜色从一个颜色选择器,基于这个颜色选择器http://code.google.com/p/color-picker-view/,它的工作很好。
我的问题是:
设置布局的背景(颜色选择器所在的地方)视图
私有ColorPickerView.OnColorChangedListener colorListener =新的ColorPickerView.OnColorChangedListener(){
@Override
public void onColorChanged(int color) {
caller.sending("color", color);
mScreen.setBackgroundColor(color);
}
};其中mScreen是LinearLyout
mScreen = (LinearLayout) findViewById(R.id.myScreen);
它如预期的那样工作。
我的听众是
OSCListener listener =新OSCListener() {
public void acceptMessage(java.util.Date time, OSCMessage message) {
//en cas de message vide
if (message.getArguments().length == 0) return;
//sinon on recupere les elements et on les tries
Object[] args = message.getArguments();
if (args[0].toString().contains("alpha")) Log.i("receiver osc", "Message received!");
//Instructions
if (args[0].toString().contains("color")) {
int color = (Integer)args[1];
//mColorPickerView.setColor((Integer)args[1]);
mScreen.setBackgroundColor(color);
}
else return;
}你可以在下面找到坠机报告。函数setBackgroundColor是否需要在特定函数中才能正常工作(例如,在onClick函数中),还是当它在屏幕上重绘某些东西时?
坠机报告
android.view.ViewRoot$CalledFromWrongThreadException::
08-05 15:18:15.035: WARN/dalvikvm(18083):threadid=7:线程退出带有未登录异常(group=0x4001d7d0)错误/AndroidRuntime(18083):致命异常:线程-8错误/AndroidRuntime(18083):只有创建视图层次结构的原始线程才能触摸其视图。ERROR/AndroidRuntime(18083):at android.view.ViewRoot.checkThread(ViewRoot.java:2811) ERROR/AndroidRuntime(18083):at android.view.ViewRoot.requestLayout(ViewRoot.java:594) ERROR/AndroidRuntime(18083):at android.view.View.requestLayout(View.java:8180) ERROR/AndroidRuntime(18083):at android.view.View.requestLayout(View.java:8180) ERROR/AndroidRuntime(18083):at android.view.View.requestLayout(查看)。java:8180) ERROR/AndroidRuntime(18083):at android.view.View.setBackgroundDrawable(View.java:7535) ERROR/AndroidRuntime(18083):at android.view.View.setBackgroundColor(View.java:7429) ERROR/AndroidRuntime(18083):at com.taprik.Remote.RemoteMain$4.acceptMessage(RemoteMain.java:202) ERROR/AndroidRuntime(18083):at com.illposed.osc.utility.OSCPacketDispatcher.dispatchMessage(Unknown Source) ERROR/AndroidRuntime(18083):at com。illposed.osc.utility.OSCPacketDispatcher.dispatchPacket(Unknown源)错误/Unknown运行时(18083):在com.illposed.osc.utility.OSCPacketDispatcher.dispatchBundle(Unknown源)错误/Unknown运行时(18083):在com.illposed.osc.utility.OSCPacketDispatcher.dispatchPacket(Unknown源)错误/Unknown运行时(18083):在com.illposed.osc.OSCPortIn.run(未知源)错误/Unknown运行时(18083):at java.lang.Thread.run(Thread.java:1096)警告/ActivityManager(6722)):力整理活动com.taprik.Remote/.RemoteMain
发布于 2011-08-05 14:12:40
android.view.ViewRoot$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触摸其视图。
您只能更改UI线程上的UI元素:注释:在UI线程上执行的任何操作都将阻止其他UI操作。因此,如果您正在通过UI线程上的某个长列表,则用户不能在它发生时与UI进行交互。
MyActivity.this.runOnUiThread(new Runnable() {
public void run() {
mScreen.setBackgroundColor(color);
}
});或者:
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
/* ... */
// Create the handler
mHandler = new Handler();
}
private void changeBgColor(final int color) {
mHandler.post(new Runnable() {
public void run() {
mScreen.setBackgroundColor(color);
}
}
}https://stackoverflow.com/questions/6957651
复制相似问题