Problema com path quando cria o JAR

7 respostas
biohazard

opa galera,

estou com um problema aqui e nao to conseguindo resolver, quando crio o JAR o jogo não procura a fase ( eh um arquivo de texto que contem informaçoes para montar a fase) dentro do JAr na pasta levels ele procura no mesmo diretorio que o jar, eu sei que eh um problema de path mais nao to conseguindo resolve.

public void actionPerformed(ActionEvent a) {
                try {
                    //Tenta abrir o arquivo para leitura                                
                    FileReader leitor = new FileReader(TxtArq.getText());
                    Engine i= new Engine();
                    i.LeArq(leitor);
                    leitor.close();
                    startTime();
                    jPanel1.requestFocus();
                }
                catch (IOException q) {
                    JOptionPane.showMessageDialog(null,"Erro ao tentar carregar a fase!","Erro",JOptionPane.INFORMATION_MESSAGE);
                }
            }
        });
        
        TxtArq.addActionListener(new ActionListener(){   
        public void actionPerformed(ActionEvent e) {
        jPanel1.requestFocus();
        }
        });

quando troco o (TxtArq.getText()); , pelo caminho certinho funciona, mais assim ta errado pq se eu for executar em uma maquina diferente nao vai achar

7 Respostas

biohazard

LabelArq.setText("Digite o nome da Fase: "); LabelArq.setBounds(new Rectangle(20, 5, 150, 20)); TxtArq.setBounds(new Rectangle(180, 5, 120, 20));

só um complemento

T

Se seu arquivo é só de leitura e deve estar DENTRO do Jar, use getClass().getClassLoader().getResourceAsStream ("/caminho/relativo/do/arquivo/dentro/do/jar"), que lhe retorna uma InputStream. Essa InputStream pode ser encapsulada (usando InputStreamReader) para um BufferedReader, e você poderá ler seu arquivo dentro do JAR.

biohazard

não entendi mto bem =(

ficaria algo como

FileReader leitor = new FileReader( getClass().getClassLoader().getResourceAsStream ("/levels/")

mais nao precisa mais do getText ?

TxtArq.getText());

biohazard

pessoal acho que to quase, não está certo mais acho que to perto,

ele consegue puxar a fase sozinho quando executo pelo netbeans, ( antes tinha que passar “build/classes/levels/br.txt”) quando executava pelo netbeans.

ButtonLoad.addActionListener(new ActionListener() { /** * Le Arquivo passado pelo usuario apos clique no Botao Carrega. */ public void actionPerformed(ActionEvent a) { try { //Tenta abrir o arquivo para leitura String path = getClass().getResource("levels/"+TxtArq.getText()).getFile(); System.out.println(path); FileReader leitor = new FileReader(path); Engine i= new Engine(); i.LeArq(leitor); leitor.close(); startTime(); jPanel1.requestFocus(); } catch (IOException q) { JOptionPane.showMessageDialog(null,"Erro ao tentar carregar a fase!","Erro",JOptionPane.INFORMATION_MESSAGE); } } });

so que ainda nao funfa quando crio o Jar e executo a partir do jar =(

biohazard

quando executo pelo JAR usando essa modificação acima teho uma saida assim do meu print

qa@diogo:~/starworms/dist$ java -jar starworms.jar file:/home/qa/starworms/dist/starworms.jar!/levels/br.txt

era pra ele tar querendo pegar o br.txt da pasta levels dentro do jar ! ¬¬

biohazard

ainda travado nisso, nao sei como resolver, mais nao desisto, xD

pequeno up! :smiley:

biohazard

mais uma tentativa que parece estar perto

String path = ("/levels/"+TxtArq.getText()); URL realPath = getClass().getResource(path); System.out.println(realPath); FileReader leitor = new FileReader((realPath).getFile());

saida no terminal

qa@diogo:~/starworms/dist$ java -jar starworms.jar jar:file:/home/qa/starworms/dist/starworms.jar!/levels/br.txt

o certo seria ??

jar:/home/qa/starworms/dist/starworms.jar!/levels/br.txt

Criado 30 de janeiro de 2007
Ultima resposta 31 de jan. de 2007
Respostas 7
Participantes 2