2013-07-29 2 views
2

Я отладка J2ME (написанную в затмении) код на Nokia N95 (не было написано мною), пытаясь найти ошибку и распечатывания StackTrace дал мне это:J2ME затемненное приложение StackTrace

03:08:479 TSKR. Error: 
    java.lang.NullPointerException: 0 
- java.lang.String.<init>(), bci=6 
    - v.b(), bci=9 
- v.e(), bci=805 
- v.e(), bci=3 

Может кто-нибудь пожалуйста, помогите мне понять это? Какую линию, где искать и есть способ понять ее или, по крайней мере, получить ценную и полезную информацию. Спасибо

UPDATE

Извините .. Вот функция, которая бросает ошибку:

public void  bluetoothFileProcessBytes(){//--------tracing out of memory error 
    try{ 

    partCurrentLoop++;   
    fileCurrentLoop++; 

    debug("Loop " + fileCurrentLoop + " of " + fileTotalLoops); 

    bluetoothUpdateBytes(fileDataString.length()); 
    guiUpdateProgressBar(true, partCurrentLoop, partTotalLoops); 

    // LOOP Step 2: If there is no byte[] created for storing the bytes, create it. 

    if (fileBytesIsEmpty) { 

     if (partCurrentNumber == partTotalNumber) 
     { 
      fileBytes = new byte[fileSize % (loopsPerHttpComm * BYTES_PER_LOOP)]; 
     } 
     else fileBytes = new byte[loopsPerHttpComm * BYTES_PER_LOOP];      


    } 
    fileBytesIsEmpty = false; 


    //LOOP Step 3: fill in the byte array with data from StringBuffer 


    for (int i = 0; i < fileDataString.length(); i++) 
    { 
     j = i + (partCurrentLoop - 1) * BYTES_PER_LOOP; 
     c = fileDataString.charAt(i);    
     fileBytes[j] = (byte) c; 
    } 
    c=0; 
    j=0; 
    i=0; 

    //LOOP Step 4: Send the email if the byte array is full with a new HttpComm Thread 

    if ((fileCurrentLoop % loopsPerHttpComm == 0 
      || fileCurrentLoop == fileTotalLoops) && checkHttpCommStatus()) { 


     // update partName and httpCommStatus 
     String partName = fileName + " .part " + partCurrentNumber;    

     httpCommStatus = HTTP_RUNNING; 

     if (fileCurrentLoop == fileTotalLoops) {  // FILE_END     
      debug("New HttpComm Thread: FILE END"); 

      httpCommUpdateBytes(fileBytes.length);//<===================remove 
      httpCommSucceeded();//<====================================remove 



    /*new Thread(new HttpFileEnd(this, fileBytes, toAddress, fromAddress, fromName, digidownMAC, partName, fileName, fileSize, digidownSoftwareVersion, partCurrentNumber, //<===============uncomment 
        partTotalNumber, DigidownApp.textObject.getActiveLanguage())).start();*/ 


     } else {         // FILE_PART 


      //debug("Step 5");//<--------------------------------------------------------------------------------<-remove 
     debug("New HttpComm Thread: FILE PART: " + partName); 
     debug(">>>>>SEEEENDIIIING!<<<<<<<<");//<===========remove 
     httpCommUpdateBytes(fileBytes.length);//<================remove 
     httpCommSucceeded();//<==============================remove 

/*new Thread(new HttpFilePart(this, fileBytes, toAddress, fromAddress, fromName,//<===============uncomment 
        digidownMAC, partName, fileSize, digidownSoftwareVersion, 
        partCurrentNumber, DigidownApp.textObject.getActiveLanguage())).start();*/ 


    // Updating the new partTotalLoops 
    if (partCurrentNumber == partTotalNumber){ 
partTotalLoops = fileTotalLoops - (loopsPerHttpComm * (partCurrentNumber - 1));    
      } else partTotalLoops = loopsPerHttpComm; 


      partCurrentNumber++; 
      partCurrentLoop = 0; 
     } 
     fileBytesIsEmpty = true; 
     } 

    // Leave the loop if failed 
    if (!errorHandlerActivated) { 

     if (fileCurrentLoop < fileTotalLoops) 
     { 

     try{ 
     bluetoothIOStream.getFileBytes();//-throws null pointer exception ! 
     }catch(RuntimeException ea){debug("Wammaaa!!! " + ea.toString()); 
         ea.printStackTrace();} 

     } 
     else if(fileCurrentLoop == fileTotalLoops && checkHttpCommStatus()) 
        { bluetoothIOStream.getFileEnd(); } 
    } 
    } 



    catch(RuntimeException e1) 
    { 
    Alert alert = new Alert("Fckn error!", e1.toString(), null, null); 
    alert.setTimeout(Alert.FOREVER); 
    debug("Error:"); 
    System.err.println(); 
    e1.printStackTrace(); 
    //throw e1; 

    } 
} 

..и трассировки стека из unobfuscated приложения; на этот раз это было исключения нулевого указателя после // Leave the loop if failed:

02:57:382 TSKR. Loop 972 of 1349 
02:57:383 BIOS. Rec 978 
02:57:588 TSKR. Loop 973 of 1349 
02:57:590 BIOS. Rec 979 
02:57:815 TSKR. Wammaaa!!! java.lang.NullPointerException: 0 
java.lang.NullPointerException: 0 
- java.lang.String.<init>(), bci=6 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.readLineAsString(), bci=9 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=844 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getFileBytes(), bci=3 
- net.digidown.m.digidown.TaskRunner.bluetoothFileProcessBytes(), bci=430 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=857 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getFileBytes(), bci=3 
- net.digidown.m.digidown.TaskRunner.bluetoothFileProcessBytes(), bci=430 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=857 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getFileBytes(), bci=3 
- net.digidown.m.digidown.TaskRunner.bluetoothFileProcessBytes(), bci=430 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=857 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getFileBytes(), bci=3 
- net.digidown.m.digidown.TaskRunner.bluetoothFileProcessBytes(), bci=430 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=857 

идет так некоторое время, а затем ..:

- net.digidown.m.digidown.TaskRunner.bluetoothDoCommand_file(), bci=227 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=829 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getFileSettings(), bci=9 
- net.digidown.m.digidown.TaskRunner.bluetoothTask(), bci=90 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=513 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getTask(), bci=2 
- net.digidown.m.digidown.TaskRunner.bluetoothTask(), bci=172 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=513 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getTask(), bci=2 
- net.digidown.m.digidown.TaskRunner.bluetoothConnected(), bci=89 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=444 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.getVariable(), bci=426 
- net.digidown.m.digidown.bluetooth.BluetoothIOStream.run(), bci=366 
- java.lang.Thread.run(), bci=11 
03:01:211 TSKR. Finished Task 
03:01:212 BIOS. Rec 6 
03:01:356 BIOS. task = > 
03:01:357 TSKR. :: Got Task: (0x3e) 
03:01:358 TSKR. 
03:01:359 TSKR. ERROR HANDLER: 116 - Bluetooth communication error 
03:01:389 BIOS. Initiated 
03:01:389 BIOS. About to read 
03:01:394 BIOS. Phone(InitiateDigidownError) received: '0x3e 0xea Data CK' 
03:01:397 BIOS. About to writeLine 'error' 
03:01:468 BIOS. quitStatus = QUIT_STATUS 
+0

Где код? – Reimeus

+0

Извините ... Я добавил код soem – Dims

+0

Как инициализируется ваша 'fileDataString'? – DRastislav

ответ

2

Ваша проблема, как представляется, запутывания.

Процесс сборки вашего приложения eclipse, вероятно, использует инструмент, например proguard, для повышения производительности и уменьшения размера файла .jar приложения, которое будет развернуто в поле.

Одна из вещей, которые выполняет обфускация, - это переписать имена классов и методов на гораздо меньшие имена, а значит, совершенно неразборчивые последние три строки вашей трассировки стека.

Вам нужно создать файл unjfascated .jar, который будет использоваться, если вы хотите отлаживать ваше приложение.
(по крайней мере до тех пор, пока не найдешь проблему, которая происходит только на запутанную версию приложения. Это происходит)

Затмение позволит вам включить запутывание выключить (или уменьшить его до самого низкого уровня), изменяя свои свойства проекта , В противном случае вручную и временно взломать файлы ant .xml, используемые для создания вашего .jar-файла, сделают трюк.

Параметры обфускации должны включать имя вашего класса MIDlet, чтобы его метод startApp() не был переименован.

+0

Спасибо, я попробую это. – Dims

+0

Я попытался создать непромокаемый пакет, и теперь у меня есть информация .. Но все же не могу понять, что такое java.lang.String. (), bci = 6. Также после появления ошибки, в трассировке стека я вижу три функции, повторяющиеся для бога, знает сколько раз ... – Dims

+0

Кстати, что такое bci ...? – Dims

1

Ваша проблема может быть решить двумя способами:

  1. Запустите приложение без запутывания. Таким образом, на выходе отображаются точные имена методов.
  2. Положите System.out.println('method_name::sample_tag') в свой метод и линии, что проблема может быть от них. Затем на выходе вы можете отслеживать выполнение, и вы можете найти, что проблема возникает.
+1

Спасибо! Извините, я не знаком с java - что такое образец тега? – Dims

+0

«sample_tag» - это всего лишь ярлык (или комментарий) для поиска вашей трассы, просмотрев ее на выходе. (Вы можете выбрать все, что захотите) – Saeed

Смежные вопросы