UNIVALI-LITE / Portugol-Studio

Ambiente de Programação didático para a linguagem Portugol 2.0
http://univali-lite.github.io/Portugol-Studio/
GNU Lesser General Public License v3.0
686 stars 217 forks source link

Erro numero 199cead3550574f7ed0907d2033c340f644ac6f8 v2.7.5 #1138

Open EvelynChamorro opened 5 months ago

EvelynChamorro commented 5 months ago

Esta issue foi gerada automaticamente

[pressione o botao "copiar erro" no Portugol Studio e cole o erro aqui antes de enviar] br.univali.ps.nucleo.ExcecaoAplicacao: java.lang.NullPointerException at br.univali.ps.nucleo.TratadorExcecoes.transformarExcecao(TratadorExcecoes.java:278) at br.univali.ps.nucleo.TratadorExcecoes.exibirExcecao(TratadorExcecoes.java:43) at br.univali.ps.ui.abas.AbaCodigoFonte.salvaArquivo(AbaCodigoFonte.java:928) at br.univali.ps.ui.abas.AbaCodigoFonte.access$1500(AbaCodigoFonte.java:102) at br.univali.ps.ui.abas.AbaCodigoFonte$21.actionPerformed(AbaCodigoFonte.java:989) at br.univali.ps.ui.abas.AbaCodigoFonte$20.actionPerformed(AbaCodigoFonte.java:889) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.Component.processMouseEvent(Component.java:6539) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6304) at java.awt.Container.processEvent(Container.java:2239) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2297) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476) at java.awt.Container.dispatchEventImpl(Container.java:2283) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84) at java.awt.EventQueue$4.run(EventQueue.java:733) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:730) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: java.lang.NullPointerException at br.univali.ps.ui.utils.FileHandle.save(FileHandle.java:19) at br.univali.ps.ui.utils.FileHandle.save(FileHandle.java:15) at br.univali.ps.ui.abas.AbaCodigoFonte.salvaArquivo(AbaCodigoFonte.java:922) ... 43 more

Código do Erro: programa {

//inclusão de bibliotecas

inclua biblioteca Teclado --> tl
inclua biblioteca Texto --> t
inclua biblioteca Tipos --> ti
inclua biblioteca Util --> u    

//declaração de variáveis 1 

const cadeia LINHA       = "\n-----------------------------------\n"
const cadeia LINHA2      = "----------------------------------------------------\n"
const cadeia LINHADUPLA  = "===================================\n"
const cadeia LINHADUPLA2 = "======================================================\n"
const cadeia LINHADUPLA3 = "=============================================================\n"

//declaração de variáveis 2

const inteiro NUMERO_TIPOS = 20
cadeia vProduto[]={"CAMISA  ", "CAMISETA", "CALÇA   ", "BERMUDA "} //espaços para alinhamento na hora da impressão
cadeia vCores[]= {"VERMELHO", "PRETO   ", "AMARELO ", "AZUL    ", "BRANCO  ", "VERDE   "}
cadeia vTamanho[]={"PP", "P ", "M ", "G ", "GG"}
cadeia vEstoque[21]
inteiro vQuantidade[21]

//sorteio e da entrada ao menu()
funcao inicio()
{   inteiro P
    inteiro C
    inteiro T
    para(inteiro i = 1; i <21;i++){
    P = u.sorteia(0, 3)
    C = u.sorteia(0, 5)
    T = u.sorteia(0, 4)
    vEstoque[i] = vProduto[P] +" "+ vCores[C]+" "+ vTamanho[T] +"\t" 
    vQuantidade[i] = 1 // quantidade separada por conta do tipo inteiro, retorna 1 para cada item aleatorio gerado
    }
    menu()

}

//Menu de funcionalidades
funcao menu()
{
    limpa()
    cadeia n1 = "a"
    inteiro n = 0
    cadeia enter =""
    escreva("\n" + (LINHADUPLA) + "           LOJA GRUPO 2\n" + (LINHADUPLA) +  (LINHA))
    escreva("\nDeseja:\n\n1 - Consultar item especifico\n2 - Consultar todos os itens\n3 - Cadastrar item\n4 - Incluir/Excluir Quantidade\n5 - Ordem alfabetica\n" + (LINHA) + (LINHADUPLA) + "\n")
    leia(n1)
    se (ti.cadeia_e_inteiro(n1,10)){ // Proteção, n1 = inteiro, executa, caso não retorna ao inicio da função
        n=ti.cadeia_para_inteiro(n1,10)
        escolha(n){
        caso 1: limpa() pesquisaIndividual()pare
        caso 2: limpa() pesquisaTotal() pare
        caso 3: limpa() cadastro() pare
        caso 4: limpa() incluirQuantidade()pare
        caso 5: limpa() ordemAlfa()pare
        caso contrario:  limpa() 
        escreva(LINHADUPLA2 + "\nOpção "+ n + " inválida! \nPor favor escolha uma opção válida!\n\n" + LINHADUPLA2 + "\nPressione enter para retornar ao menu!\n")
        leia(enter) 
        se((enter == "") ou (enter != "")){
            menu()
        }

    }
    }senao{// caso n1 != de inteiro retorna ao  inicio
        escreva("\nOpção "+ n + " inválida! \nPor favor escolha uma opção válida!\nPressione enter para retornar ao menu!\n")
        leia(enter) 
        se((enter == "") ou (enter != "")){
            menu()
    }
    }
}

// pesquisa item a item por código e a pesquisa de todos
funcao pesquisaIndividual()
{
    cadeia n1 = "a"
    inteiro n = 0
    cadeia saida = ""
    faca{
    escreva("\n" + (LINHADUPLA2) +  "\nDigite o código do produto( 1 a 20 ):\n\n")
    leia(n1)
    se (ti.cadeia_e_inteiro(n1,10)){
        n=ti.cadeia_para_inteiro(n1,10)

        se((n < 1) ou (n>20)){
            limpa()
            escreva(LINHADUPLA2 + "\nDigito inválido!! Digite um digito válido!\n")
            pesquisaIndividual()
        }senao
            limpa()
            escreva("\n" + LINHADUPLA2 + "\n")
            escreva("\tCód Nome     Cor      Tam\tQT\n\t----------------------------------\n")// espaços para alinhamento na impressão
            escreva("\t"+ n +"   "+ vEstoque[n] + vQuantidade[n])
            escreva("\n\t----------------------------------\n\n" + LINHADUPLA2)
            escreva("\nPressione enter para realizar mais uma pesquisa!\nPressione uma tecla e enter para retornar ao menu!\n\n" + LINHADUPLA2 + "\n")
            leia(saida)
            limpa()
    }senao{
        escreva(LINHADUPLA2 + "\nDigito inválido!! Digite um digito válido!\n")

    }
    }enquanto(saida == "")
        menu()
    }   
funcao pesquisaTotal()
{
    cadeia saida
    escreva("Cód\tNome\t Cor\t  Tam\tQT"+LINHA)

    para(inteiro i = 1; i <21;i++){
        escreva(i + "\t" + vEstoque[i] + vQuantidade[i] +"\n")
    }
    escreva(LINHA+"\nPressione enter para retornar ao menu!")
    leia(saida)
    se ((saida == "") ou (saida != "")){
        menu()
    }
}

//cadastro de novos itens e inclusão de novas quantidades de itens existentes
funcao cadastro(){
    inteiro n   =0
    cadeia n1 = ""
    cadeia opcaoP = ""
    cadeia opcaoC = ""
    cadeia opcaoT = ""
    inteiro opcaoQ = 0
    cadeia saida = ""

    faca{
        escreva("\n" + (LINHADUPLA2) +  "\ncódigo a ser cadastrado(1 a 20)\n\n" + LINHADUPLA2 + "\n")
        leia(n1)
            se ((ti.cadeia_e_inteiro(n1,10))){ // Proteção, n1 = inteiro, executa, caso não retorna ao inicio da função
            n=ti.cadeia_para_inteiro(n1,10)
                se((n < 1) ou (n>20)){
                    limpa()
                    escreva("Digito inválido!! Digite um digito válido\n")
                    cadastro()
                }
            }senao{
                escreva("Digito inválido!! Digite um digito válido!\n")
                cadastro()
            }
        limpa()     
        escreva(LINHA + "Digite o tipo do produto:\n\nCamisa\nCamiseta\nCalça\nBermuda" + LINHA + "\n")
        leia(opcaoP)
        limpa()
        escreva(LINHA + "Digite a cor do produto:\n\nVermelho \nPreto\nAmarelo\nAzul \nBranco\nVerde"+ LINHA + "\n")
        leia(opcaoC)
        limpa()
        escreva(LINHA + "Digite o tamanho do produto:\n\nPP \nP\nM\nG \nGG"+ LINHA + "\n")
        leia(opcaoT)
        limpa()
        escreva(LINHA + "Digite o quantidade do produto\n(somente numeros positivos)"+ LINHA + "\n")
        leia(opcaoQ)    
        limpa() 
        se(((t.caixa_alta(opcaoP)== "CAMISA") ou (t.caixa_alta(opcaoP)== "CALÇA")ou ((t.caixa_alta(opcaoP)== "CAMISETA")
        ou (t.caixa_alta(opcaoP)== "BERMUDA"))) e ((t.caixa_alta(opcaoC)== "VERMELHO")ou (t.caixa_alta(opcaoC)== "PRETO")
        ou (t.caixa_alta(opcaoC)== "AMARELO")ou (t.caixa_alta(opcaoC)== "AZUL")ou (t.caixa_alta(opcaoC)== "BRANCO")
        ou (t.caixa_alta(opcaoC)== "VERDE")) e ((t.caixa_alta(opcaoT)== "PP") ou (t.caixa_alta(opcaoT)== "P")
        ou (t.caixa_alta(opcaoT)== "M") ou (t.caixa_alta(opcaoT)== "G")ou (t.caixa_alta(opcaoT)== "GG")) e (opcaoQ >-1))
        { // condicional para validar opcaoP, opcaoC, opcaoT e opcaoQ
            vEstoque[n] = t.caixa_alta(opcaoP) + "   " +    t.caixa_alta(opcaoC) + "   " + t.caixa_alta(opcaoT) + "\t "
            vQuantidade[n] = opcaoQ  
            escreva("\n" + LINHADUPLA2 + "\nPressione S para cadastrar novo produto\nPressione uma tecla e enter para retornar ao menu.\n")
            leia(saida) 
        }senao{ escreva("Opção " +opcaoP+", "+ +opcaoC+", "+opcaoT+" ou " +opcaoQ+" inválida!! \nPor favor digitem uma das opções validas. " ) cadastro() }
        }enquanto ((saida == "S") ou (saida == "s"))
        menu()
    }   
funcao incluirQuantidade()
{   
    inteiro cod = 0
    inteiro Q = 0
    cadeia saida = ""
    faca{
        escreva((LINHADUPLA3) + "\nqual o cód do produto que deseja incluir/excluir a quantidade\n\n" + LINHADUPLA3 + "\n")
        leia(cod)
        se(cod > 0 e cod <=20){
        escreva ("\n" + LINHADUPLA3 + "\nQual a quantidade a incluir/excluir?\n(para excluir coloque o sinal de - antes do numero)\n\n" + LINHADUPLA3 + "\n")
        leia(Q)
        }senao{
            escreva(LINHADUPLA3 + "\nCódigo inválido!!\nPor favor digite um código válido.\n\n" + LINHADUPLA3 + "\n")
            incluirQuantidade()
        }
        vQuantidade[cod] = vQuantidade[cod]+ Q 
        se(vQuantidade [cod] <0){
            escreva(LINHADUPLA3 + "\nA quantidade do produto ficará igual a " + vQuantidade [cod] +".\n\nQuantidade negativa não é válida! \nDigite uma quantidade válida!\n\n" + LINHADUPLA3 + "\n") 
        }
        escreva("\n" + LINHADUPLA3 + "\nPressione S para cadastrar nova quantidade!\nPressione uma tecla mais enter para retornar ao menu!\n\n")
        leia(saida)
    }enquanto ((saida == "S") ou (saida == "s"))
    menu()

}

//pesquisa por ordem afabetica (ainda não funciona)
funcao ordemAlfa()
{   

}

}