2014-05-19 2 views
0

내 XML에 9 개의 ImageView가 있습니다.ImageView가 두 번 이상 작동하지 않습니다.

클래스에 이미지 뷰를 선언

ImageView image; 

코드에 대해 조금 : 는 이미지가 미세 변화 박하 사탕 정면 게임, 스마트 폰 대 사용자, 어떤 이미지 뷰에 I 사용자 클릭의 내가 사용하는 온 클릭 (보기 V) 기능을 통해 원하는 이미지 :

내 차례가 끝난 후, 스마트 폰, 게임 같은 두 개의 라인을 사용하지만 서로 다른 ID와 당김 함께
 image = (ImageView) findViewById(R.id.block2); 
     image.setImageResource(R.drawable.block_2_x); 

. computerPlay() { ... }

이라는 다른 함수를 호출하면 아무 일도 일어나지 않지만 오류가 발생합니다.

하지만, 내가 다시 응용 프로그램을 실행하고 smarthphone 처음 시작할 때, 이미지가 computerPlay() { .. }

에서 미세 변경 한 후 내 차례가 오류를 얻을 ... 어떻게 든

, 나는 그것의 느낌이 나는 때문에 동일한 ImageView를 두 번 이상 사용할 수 없습니까? 코드의


큰 그림 :

public void changeImage() { 
... 
        image = (ImageView) findViewById(R.id.block2); 
        image.setImageResource(R.drawable.block_1_o); 
... 
} 

어떤 아이디어 : (이미지를 사용자가 클릭은)

public void touch(View v) { 

    ........ 
       image = (ImageView) findViewById(R.id.block1); 
       image.setImageResource(R.drawable.block_1_x); 
....... 
} 

컴퓨터에서 재생하려고 할 때?


오류 :

java.lang.IllegalArgumentException: Widget has the wrong parent 
    at org.eclipse.swt.SWT.error(SWT.java:4342) 
    at org.eclipse.swt.SWT.error(SWT.java:4276) 
    at org.eclipse.swt.SWT.error(SWT.java:4247) 
    at org.eclipse.swt.widgets.Widget.error(Widget.java:468) 
    at org.eclipse.swt.widgets.Control.setMenu(Control.java:3462) 
    at com.android.ddmuilib.logcat.LogCatPanel$20.handleEvent(LogCatPanel.java:1042) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) 
    at org.eclipse.swt.widgets.Widget.showMenu(Widget.java:1472) 
    at org.eclipse.swt.widgets.Widget.wmContextMenu(Widget.java:1574) 
    at org.eclipse.swt.widgets.Control.WM_CONTEXTMENU(Control.java:4673) 
    at org.eclipse.swt.widgets.Table.WM_CONTEXTMENU(Table.java:5972) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4532) 
    at org.eclipse.swt.widgets.Table.windowProc(Table.java:5913) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4989) 
    at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method) 
    at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2440) 
    at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:564) 
    at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:430) 
    at org.eclipse.swt.widgets.Widget.wmRButtonUp(Widget.java:2395) 
    at org.eclipse.swt.widgets.Control.WM_RBUTTONUP(Control.java:5134) 
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4596) 
    at org.eclipse.swt.widgets.Table.windowProc(Table.java:5913) 
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4989) 
    at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) 
    at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2546) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3756) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) 
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543) 
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438) 
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414) 

로그 캣 :

05-18 23:43:25.760: E/AndroidRuntime(1377): FATAL EXCEPTION: Timer-0 
05-18 23:43:25.760: E/AndroidRuntime(1377): Process: com.example.tttgame, PID: 1377 
05-18 23:43:25.760: E/AndroidRuntime(1377): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6006) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:822) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.View.requestLayout(View.java:16392) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.View.requestLayout(View.java:16392) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.View.requestLayout(View.java:16392) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.View.requestLayout(View.java:16392) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:352) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.View.requestLayout(View.java:16392) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.View.requestLayout(View.java:16392) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.View.requestLayout(View.java:16392) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:352) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.view.View.requestLayout(View.java:16392) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at android.widget.ImageView.setImageResource(ImageView.java:370) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at com.example.tttgame.BoardActivity.changeImage(BoardActivity.java:755) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at com.example.tttgame.BoardActivity.fillboard(BoardActivity.java:739) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at com.example.tttgame.BoardActivity.randPick(BoardActivity.java:715) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at com.example.tttgame.BoardActivity.computerPlay(BoardActivity.java:525) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at com.example.tttgame.BoardActivity$7.run(BoardActivity.java:387) 
05-18 23:43:25.760: E/AndroidRuntime(1377):  at java.util.Timer$TimerImpl.run(Timer.java:284) 
+1

"아무것도 오류를 제외한 일어나지 않는다"-과 오류는? 당신의 logcat 어딨어? – 323go

+0

두 장의 오류 사진을 추가했습니다 .. – amjazzed

+0

logcat을 복사하여 붙여 넣으십시오. 포르노 사이트에 사진을 게시하지 마십시오. – 323go

답변

1

당신이 TimerTask 내부의 컴퓨터 게임 코드를 실행하는 것으로 보인다. UI 스레드에서 실행되지 않으므로보기를 수정할 때 보았던 오류가 발생합니다. 당신의 TimerTask 내부

는, 기존의 코드를 포장 추적 코드를 사용 :

runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      // This will run on the UI thread 
      changeImage(); 
     } 
    }); 
+0

감사합니다. TIMER를 사용할 때 모든보기에 적용됩니까 ?? textview 등의 색상을 변경하고 싶습니다.? – amjazzed

+0

@ user3651124 예,보기를 조작하고 싶을 때마다 해당 코드를 UI 스레드에서 실행해야합니다. –

관련 문제