Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板([eclipse]logcatの見方)
閲覧数:4106
掲示板([eclipse]logcatの見方)
名前
匿名
題名 [eclipse]logcatの見方
質問内容

質問を評価する
(0ポイント)
こんにちは。Eclipse、Javaの初心者です。

簡単なプログラムを作成した後に、エミュレータで実行したところ、以下のようなメッセージが表示されました。
The application has stopped unexpectedly. Please try again.

原因を確認しようとlogcatを見たのですが、logの見方がわかりません。

原因と対処方法を教えていただけませんか。

宜しくお願い致します。

12-11 05:36:03.233: D/dalvikvm(16660): newInstance failed: no <init>()
12-11 05:36:03.233: D/AndroidRuntime(16660): Shutting down VM
12-11 05:36:03.263: W/dalvikvm(16660): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-11 05:36:03.332: E/AndroidRuntime(16660): FATAL EXCEPTION: main
12-11 05:36:03.332: E/AndroidRuntime(16660): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test001/com.example.test001.MyView}: java.lang.InstantiationException: com.example.test001.MyView
12-11 05:36:03.332: E/AndroidRuntime(16660):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at android.os.Looper.loop(Looper.java:123)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at java.lang.reflect.Method.invokeNative(Native Method)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at java.lang.reflect.Method.invoke(Method.java:521)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at dalvik.system.NativeStart.main(Native Method)
12-11 05:36:03.332: E/AndroidRuntime(16660): Caused by: java.lang.InstantiationException: com.example.test001.MyView
12-11 05:36:03.332: E/AndroidRuntime(16660):     at java.lang.Class.newInstanceImpl(Native Method)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at java.lang.Class.newInstance(Class.java:1429)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
12-11 05:36:03.332: E/AndroidRuntime(16660):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
12-11 05:36:03.332: E/AndroidRuntime(16660):     ... 11 more
12-11 05:36:07.853: I/Process(16660): Sending signal. PID: 16660 SIG: 9
質問日時 2012-12-11 15:04:40
名前
匿名
回答内容

回答を評価する
(0ポイント)
まずログの見方から勉強しようと思わない?
回答日時 2012-12-11 22:33:58
名前
回答内容

回答を評価する
(0ポイント)
com.example.test001.MyView のインスタンスが用意出来ないようです。
作りましたか?名前やパッケージ名はあってますか、内容は問題ないですか?
ログの見方は、原因(Caused by)から探って下さい(もしあれば)。
英語がわからない場合は英語をまず学んで気宇ださい。Androidよりは易しいはずです。
回答日時 2012-12-12 02:35:32
名前
匿名
回答内容

回答を評価する
(0ポイント)
ご回答ありがとうございます。

少し勉強し直して、再度実行したところ、以下のメッセージをみつけました。

Caused by: java.lang.InstantiationException: com.example.test001.MyView

java.lang.InstantiationException
 アプリケーションが Class クラスの newInstance メソッドを使ってクラスのインスタンスを生成しようとしたときに、クラスがインタフェースまたは abstract クラスであるために指定されたオブジェクトのインスタンスを生成できない場合にスローされます。
 インタフェースや、abstruct クラスではなく、実装されているクラスを使用してください。

ここからどうすればいいのかわかりません。ご教授ください。宜しくお願い致します。
 
★test001_Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test001"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.test001.MyView"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

★sub.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" >
    <com.example.test001.MyView
        android:id="@+id/my_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</LinearLayout>

★MyView.java
package com.example.test001;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public MyView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawColor(Color.LTGRAY);
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.GRAY);
        paint.setAntiAlias(true);
        canvas.drawCircle(80, 120, 20, paint);
    }
}
回答日時 2012-12-12 12:21:21
名前
匿名
回答内容

回答を評価する
(0ポイント)
遠すぎて何処から説明していいのか分かりませんが、
とりあえづViewではなく、Activityのサブクラスで
作成してください。

エラーの理由はAndroid OSがActivityのサブクラスを
期待してコンストラクタを呼んでいるのに、実体が
違うからです。


回答日時 2012-12-12 15:17:31
名前
匿名
回答内容

回答を評価する
(0ポイント)
ご回答ありがとうございます。

Viewを使わずにActivityで作れそうなプログラムに取り組んでいます。

(1)Button_AとTextView1の表示→成功
(2)Button_BをクリックするとTextView2の背景が変更される→失敗

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
その子(sub01)には親がいます。まずその子の親でremoveView()を呼び出さなければなりません。

具体的にどうするのかご教授ください。宜しくお願い致します。

★sub01.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
<Button android:id="@+id/button_B"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Button_B" />
<TextView android:id="@+id/textView2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="TextView2" />    
    
</LinearLayout>

★test001_Activity.java
package com.example.test001;

import android.R.color;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class test001_Activity extends Activity {
    private Button Button_A;
    private TextView textView;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub01);
        
        Button_A = new Button(this);
        Button_A.setText("Button_A");
        textView = new TextView(this);
        textView.setText("TextView1");
        textView.setBackgroundColor(color.holo_green_light);
        
        Button button_B = (Button)findViewById(R.id.button_B);
        textView = (TextView)findViewById(R.id.textView2);
        button_B.setOnClickListener(new OnClickListener(){
            public void onClick(View view){
                textView.setBackgroundColor(Color.GREEN);
            }
        });        
        
LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setLayoutParams(linearLayoutParams);

linearLayout.addView(Button_A, linearLayoutParams);
linearLayout.addView(textView, linearLayoutParams);
        
setContentView(linearLayout);

    }

}
回答日時 2012-12-13 10:56:33
名前
匿名
回答内容

回答を評価する
(0ポイント)
Activityの指摘をした者です。
これで書き込むのは最後にしますが、既に当初の問題が
解決されているのならば別スレッドで質問をしたらいかがでしょう
か。

また、ActivityとViewの関係性は理解されたのでしょうか。
まずはそれぞれのクラスの基本的な関係性から学ばれたほうが
良いかと思います。
AndroidのNativeアプリを作成する上で、
Activity, View, Intentの理解は必須です。

具体的なアドバイスでなく申し訳ありませんが、
ソースサンプルはWeb上に膨大にあると思いますので、
1行筒何をしているか理解して読むことをされたほうが
今後のためにも良いかと思います。
回答日時 2012-12-13 11:43:07
名前
匿名
回答内容

回答を評価する
(0ポイント)
ご回答ありがとうございます。

Activityのサブクラスで作成って以下のようなプログラムを作成しろって言っていたのかもしれないですね。

http://www.android-abc.net/article/243886648.html

実行してみると、特にエラーはないようですが、円が表示されませんでした。根本的に何か勘違いしているのでしょうか?

★test001_001のMainActivity.java
package com.example.test001_001;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new GraphicsViewTest(this));
    }
    private class GraphicsViewTest extends View {
        public GraphicsViewTest(Context context) {
            super(context);
        }
    }
    
    protected void onDraw(Canvas canvas) {
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        canvas.drawCircle(50.5f, 30.5f, 10.0f, paint);
        paint.setAntiAlias(true);
        canvas.drawCircle(50.5f, 60.5f, 10.0f, paint);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
}
回答日時 2012-12-13 22:09:43

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道