Autore Topic: Interruzione imprevista nell'istanziare un oggetto da me creato  (Letto 684 volte)

Offline MarkRider

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    motorola e minipc
  • Sistema operativo:
    Win 7,Win XP
Interruzione imprevista nell'istanziare un oggetto da me creato
« il: 25 Novembre 2013, 23:41:48 CET »
0
Per imparare un po a scrivere in java e app per android mi sono messo a fare un paio di classi, ho preso come esempio le auto.
ecco qui una classe:

Codice: [Seleziona]
package meccanica;

/*
 * VERSIONE 0.1
 *
 * Il motore lo identifico con questi elementi:
 *
 * -Cilindro
 * -Turbo
 * -Frizione
 * -Cambio
 */
public class Motore {
       
        private Cilindro mCilindro;
        private Turbo mTurbo;
        private int mNumeroCilindri;
       
        // primo costrutto
        // valori standard tipici di una fiat uno       
        public Motore()
        {
                mCilindro.SetVolumeCilindro(250);
                mTurbo.SetValTurbo(0);
                SetNumeroCilindri(4); // 250 * 4 = 1000CC
        }
       
       
        public Motore(int volumeSingoloCilindro, int numeroCilindri,int potenzaTurbo)
        {
                mCilindro.SetVolumeCilindro(volumeSingoloCilindro);
                mTurbo.SetValTurbo(potenzaTurbo);
                SetNumeroCilindri(numeroCilindri);
        }
       
       
        public int GetCilindrata()
        {
                return (mCilindro.GetVolumeCilindro() * mNumeroCilindri);
        }
       
       
        public void SetNumeroCilindri(int numCilndri)
        {
                mNumeroCilindri = numCilndri;
        }
       
        public Cilindro GetCilindro()
        {
                return mCilindro;
        }
       
        public Turbo GetTurbo()
        {
                return mTurbo;
        }
       
        public int GetNumCilindri()
        {
                return mNumeroCilindri;
        }
       
}


//Classe Turbo
class Turbo{
       
        private int mValTurbo;
       
        Turbo(int valoreTurbo)
        {
                SetValTurbo(valoreTurbo);
        }
       
        int GetValTurbo()
        {
                return mValTurbo;
        }
       
        void SetValTurbo(int valoreTurbo)
        {
                mValTurbo = valoreTurbo;
        }
       
}


class Cilindro{
       
        private int mVolumeCilindro;
       
        Cilindro(int volumeCilindro)
        {
                SetVolumeCilindro(volumeCilindro);
        }
       
        int GetVolumeCilindro()
        {
                return mVolumeCilindro;
        }
       
        void SetVolumeCilindro(int volumeCilindro)
        {
                mVolumeCilindro = volumeCilindro;
        }
}


detto questo quando vado a debuggare il codice:

Codice: [Seleziona]
package com.marco.macchinina;

import android.R.id;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import Macchina.macchina;
import meccanica.Motore;

public class FirstActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_first);
               
               
                Motore motoreFiat = new Motore(250,4,0);

mi va in eccezione.

LOGCAT:

Codice: [Seleziona]
01-01 08:13:30.530: I/System.out(1766): Sending WAIT chunk
01-01 08:13:33.660: I/dalvikvm(1766): Debugger is active
01-01 08:13:33.730: I/System.out(1766): Debugger has connected
01-01 08:13:33.740: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:33.940: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:34.140: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:34.340: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:34.540: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:34.740: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:34.940: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:35.140: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:35.340: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:35.540: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:35.740: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:35.940: I/System.out(1766): waiting for debugger to settle...
01-01 08:13:36.140: I/System.out(1766): debugger has settled (1391)


nella parte degli stack trovo scritto:
<VM does not provide monitor information>   
ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 2059   
ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 2084   
ActivityThread.access$600(ActivityThread, ActivityThread$ActivityClientRecord, Intent) line: 130   
ActivityThread$H.handleMessage(Message) line: 1195   
ActivityThread$H(Handler).dispatchMessage(Message) line: 99   
Looper.loop() line: 137   
ActivityThread.main(String[]) line: 4745   
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]   
Method.invoke(Object, Object...) line: 511   
ZygoteInit$MethodAndArgsCaller.run() line: 786   
ZygoteInit.main(String[]) line: 553   
NativeStart.main(String[]) line: not available [native method]   
« Ultima modifica: 26 Novembre 2013, 07:28:56 CET da MarkRider »

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:megacrash
« Risposta #1 il: 26 Novembre 2013, 02:22:38 CET »
0
Citazione da: MarkRider
però il LogCat non mi visualizza niente
Impossibile.

1) Oltre al codice devi postare il LOGCAT. Richieste di aiuto senza queste due caratteristiche non possono essere prese in considerazione.
2) Evitare post con titoli tipo "megacrash". Oltre a non voler dire un "fico secco" sono anche fuorvianti per il tipo di problema.
3) Questo forum è dedicato allo sviluppo Android, che sebbene sia in Java, ciò non significa che si possono chiedere aiuti generici sulla programmazione Java.

Detto ciò, provvedi a modificare il post in modo correto.
Off-Topic:
Suggerimento: Rivedi la tua classe Motore, nello specifico le inner-class Turbo e Cilindro  >:(

Offline MarkRider

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    motorola e minipc
  • Sistema operativo:
    Win 7,Win XP
Re:Interruzione imprevista nell'istanziare un oggetto da me creato
« Risposta #2 il: 26 Novembre 2013, 07:29:37 CET »
0
Modificato come da istruzioni

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Interruzione imprevista nell'istanziare un oggetto da me creato
« Risposta #3 il: 26 Novembre 2013, 07:53:37 CET »
0
Devi isolare la parte del LogCat che mostra gli errori, le righe dove trovi E/xxxxxx. Volendo puoi proprio filtrare la visualizzazione e mostrare solo quelli, se ti orienti meglio.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MarkRider

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    motorola e minipc
  • Sistema operativo:
    Win 7,Win XP
Re:Interruzione imprevista nell'istanziare un oggetto da me creato
« Risposta #4 il: 26 Novembre 2013, 08:35:09 CET »
0
ci sono riuscito, ho dovuto premere stepover, ed ha iniziato a stampare errori a bestia :)

Codice: [Seleziona]
01-01 09:18:05.330: E/AndroidRuntime(3017): FATAL EXCEPTION: main
01-01 09:18:05.330: E/AndroidRuntime(3017): java.lang.IllegalStateException: Could not execute method of the activity
01-01 09:18:05.330: E/AndroidRuntime(3017):         at android.view.View$1.onClick(View.java:3595)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at android.view.View.performClick(View.java:4088)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at android.view.View$PerformClick.run(View.java:16984)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at android.os.Handler.handleCallback(Handler.java:615)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at android.os.Handler.dispatchMessage(Handler.java:92)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at android.os.Looper.loop(Looper.java:137)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at android.app.ActivityThread.main(ActivityThread.java:4745)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at java.lang.reflect.Method.invokeNative(Native Method)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at java.lang.reflect.Method.invoke(Method.java:511)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at dalvik.system.NativeStart.main(Native Method)
01-01 09:18:05.330: E/AndroidRuntime(3017): Caused by: java.lang.reflect.InvocationTargetException
01-01 09:18:05.330: E/AndroidRuntime(3017):         at java.lang.reflect.Method.invokeNative(Native Method)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at java.lang.reflect.Method.invoke(Method.java:511)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at android.view.View$1.onClick(View.java:3590)
01-01 09:18:05.330: E/AndroidRuntime(3017):         ... 11 more
01-01 09:18:05.330: E/AndroidRuntime(3017): Caused by: java.lang.NullPointerException
01-01 09:18:05.330: E/AndroidRuntime(3017):         at meccanica.Motore.<init>(Motore.java:31)
01-01 09:18:05.330: E/AndroidRuntime(3017):         at com.marco.macchinina.FirstActivity.Fiat(FirstActivity.java:78)
01-01 09:18:05.330: E/AndroidRuntime(3017):         ... 14 more

però nel frattempo il codice è cambiato:

Codice: [Seleziona]
package com.marco.macchinina;

import android.R.id;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import Macchina.macchina;
import meccanica.Motore;

public class FirstActivity extends Activity{

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_first);
               
               
        }
       
        public void Fiat(View v)
        {
                TextView myBrumView = (TextView)findViewById(R.id.textView1);
                Motore motoreFiat = new Motore(250,4,0);
                macchina FIAT = new macchina(motoreFiat);
                myBrumView.setText(FIAT.GetRombo());
        }
       

quando debuggo mi si ferma lo stak su : Motore motoreFiat = new Motore(250,4,0);
e fa riferimento alla classe nel punto:    mCilindro.SetVolumeCilindro(volumeSingoloCilindro);

di cui il metodo è:
Codice: [Seleziona]
public Motore(int volumeSingoloCilindro, int numeroCilindri,int potenzaTurbo)
        {
                mCilindro.SetVolumeCilindro(volumeSingoloCilindro);
                mTurbo.SetValTurbo(potenzaTurbo);
                SetNumeroCilindri(numeroCilindri);
        }

ed è il costruttore dell'oggetto Motore.

Non capisco perchè mi da null.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Interruzione imprevista nell'istanziare un oggetto da me creato
« Risposta #5 il: 26 Novembre 2013, 09:22:51 CET »
0
Partiamo dal LogCat:

Citazione
01-01 09:18:05.330: E/AndroidRuntime(3017): Caused by: java.lang.NullPointerException
01-01 09:18:05.330: E/AndroidRuntime(3017):         at meccanica.Motore.<init>(Motore.java:31)

Questo vuol dire che alla riga 31 di Motore.java hai qualcosa che è null e non dovrebbe esserlo.

Non so di preciso quale sia la riga 31, ma ipotizzo che almeno uno dei due oggetti mTurbo o mCilindro siano null.

A parte l'errore, ricorda sempre questa regola: se qualcosa può essere null, prima o poi lo diventerà.
E scrivi sempre il codice usando questo approccio:

Codice (Java): [Seleziona]
if (mCilindro!=null) mCilindro.SetVolumeCilindro(volumeSingoloCilindro);
else Log.e("TAG","mCilindro is null");

if (mTurbo!=null) mTurbo.SetValTurbo(potenzaTurbo);
else Log.e("TAG","mTurbo is null");
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

iClaude

  • Visitatore
Re:Interruzione imprevista nell'istanziare un oggetto da me creato
« Risposta #6 il: 26 Novembre 2013, 10:54:28 CET »
0
Molto probabilmente non hai creato l'oggetto e/o non l'hai passato alla classe che lo usa.
Ma se non posti tutto il codice modificato è impossibile rispondere.

Offline MarkRider

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    motorola e minipc
  • Sistema operativo:
    Win 7,Win XP
Re:Interruzione imprevista nell'istanziare un oggetto da me creato
« Risposta #7 il: 26 Novembre 2013, 11:29:23 CET »
0

però nel frattempo il codice è cambiato:

Codice: [Seleziona]
package com.marco.macchinina;

import android.R.id;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import Macchina.macchina;
import meccanica.Motore;

public class FirstActivity extends Activity{

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_first);
               
               
        }
       
        public void Fiat(View v)
        {
                TextView myBrumView = (TextView)findViewById(R.id.textView1);
                Motore motoreFiat = new Motore(250,4,0);
                macchina FIAT = new macchina(motoreFiat);
                myBrumView.setText(FIAT.GetRombo());
        }
       



Cmq ecco l'errore GRAVISSIMO:

Codice: [Seleziona]
public class Motore {
       
        private Cilindro mCilindro;
        private Turbo mTurbo;
        private int mNumeroCilindri;
       
        // primo costrutto
        // valori standard tipici di una fiat uno       
        public Motore()
        {
                mCilindro = new Cilindro(250);// = mCilindro.SetVolumeCilindro(250);   <--- questo era l'errore, non inizializzavo mai l'oggetto in questione mCilindro ecco perchè null
                mTurbo = new Turbo(0);                               
                SetNumeroCilindri(4); // 250 * 4 = 1000CC
        }