Avatar billede svarejoergen Nybegynder
05. juni 2013 - 00:21 Der er 13 kommentarer og
1 løsning

Jar file kan ikke finde path

Jeg har lavet et lille program som jeg gerne vil dele.

Når jeg laver en jar file er der en enkelt metode der ikke kan køre på andre maskiner end min.

Denne metode bruger en path og jeg går ud fra det skaber problemer fordi den indeholder linjerne:

File file= new File("D:\\portræt\\verden.jpg");
og
BufferedImage image = ImageIO.read(file);
Denne sti er jo kun på min maskine!

Jeg har også billedet liggende i folderen i netbeans. Men kan ikke skabe new File uden at bruge en path.

Hvad gør man her ?
Avatar billede arne_v Ekspert
05. juni 2013 - 00:27 #1
Den simple loesning er nok:

File file= new File("verden.jpg");

og saa vil programmet finde den hvis default dir er det dir som JPG ligger i.
Avatar billede arne_v Ekspert
05. juni 2013 - 00:28 #2
Den rigtige loesning er at putte JPG filen ind i JAR filen og saa lade programmet laese derfra.
Avatar billede svarejoergen Nybegynder
05. juni 2013 - 01:25 #3
Jeg harf prøvet File file= new File("verden.jpg");

men det vil den ikke lade mig gøre selv om filen ligger der.

javax.imageio.IIOException: Can't read input file!
Avatar billede svarejoergen Nybegynder
05. juni 2013 - 01:30 #4
kan ikke oprette en pakke i netbeans der hedder default.

den skriver invalid name
Avatar billede arne_v Ekspert
05. juni 2013 - 01:51 #5
Hvis new File("verden.jpg") ikke kan finde filen saa er det fordi filen ikke ligger i default dir.
Avatar billede arne_v Ekspert
05. juni 2013 - 01:53 #6
Hvis man vil pakke et billede ind i jar filen, saa bruger man ofte /images/ eller /graphics/ som path.
Avatar billede svarejoergen Nybegynder
05. juni 2013 - 12:43 #7
Tror det virker nu.

Tak for hjælpen og smid et svar :)

detaljer:
Jeg har et spil i netbeans der hedder GratisDyr.
Under src folder har jeg en kort folder (billeder) og en gratisdyr folder (logiske del).
Fik det til at virke ved at ligge billedet helt ud i roden, dvs GratisDyr (med stort).

Var som sædvanlig en kæmpe omvej. Inde og læse diverse, ændre etc
http://developmentality.wordpress.com/2010/11/09/netbeans-platform-how-to-handle-the-working-directory-problem/
Avatar billede svarejoergen Nybegynder
05. juni 2013 - 16:35 #8
Hmm det virker stadig kun på min computer. Har lige sendt det til en ven.
Alt andet end den metode fungerer.

-------------------------------------------------

    private void verdenskortMouseClicked(java.awt.event.MouseEvent evt) {                                       
        hint.setText(givhint());
        //File file= new File("D:\\portræt\\verden.jpg");
      // File file= new File("C:\\Users\\Sune\\Documents\\Net\\GratisDyr\\src\\kort\\verden.jpg");
      File file = new File("verden.jpg");
      //System.out.print(img.equals(file));
      //System.out.print(img.canRead());
     
        try {           
            BufferedImage image = ImageIO.read(file);
            int x = verdenskort.getMousePosition().x;
            int y = verdenskort.getMousePosition().y;           
            int farve=image.getRGB(x,y);
            //System.out.println("x "+x+" y "+y);
            if("Antarktis".equals(givOmr(farve,x,y))){
            detsker.setText("Antarktis");
            }
            if("Sydlige Ishav".equals(givOmr(farve,x,y))){
            detsker.setText("Sydlige Ishav");
            }
            if("Arktiske Ocean".equals(givOmr(farve,x,y))){
            detsker.setText("Arktiske Ocean");
            }
            if("Atlanterhavet".equals(givOmr(farve,x,y))){
            detsker.setText("Atlanterhavet");
            }
            if("Indiske Ocean".equals(givOmr(farve,x,y))){
            detsker.setText("Indiske Ocean");
            }
            if("Stillehavet".equals(givOmr(farve,x,y))){
            detsker.setText("Stillehavet");
            }
            if("Nordamerika".equals(givOmr(farve,x,y))){
            detsker.setText("Nordamerika");
            }
            if("Sydamerika".equals(givOmr(farve,x,y))){
            detsker.setText("Sydamerika");
            }
            if("Europa".equals(givOmr(farve,x,y))){
            detsker.setText("Europa");
            }
            if("Australien".equals(givOmr(farve,x,y))){
            detsker.setText("Australien");
            }
            if("Asien".equals(givOmr(farve,x,y))){
            if(findkort()!=-2){
                if(s.spiller1tur==true){
                    System.out.println("kort "+findkort());
                s.asien[s.hand1[findkort()]][0]=s.asien[s.hand1[findkort()]][0]+100;
                s.hand1[findkort()]=s.bunke1[s.runde+5];
                s.tidgaa();
                tegndominans();
                }
                                if(s.spiller1tur==false){
                s.asien[s.hand2[findkort()]][1]=s.asien[s.hand2[findkort()]][1]+100;
                s.hand2[findkort()]=s.bunke2[s.runde+5];
                s.tidgaa();
                tegndominans();               
                }
                skifttur();
                slutkontrol();
            }
        detsker.setText(kontinentstatus("asien"));
        afrilabel.setBorder(null);
        asilabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
            }
            if("Afrika".equals(givOmr(farve,x,y))){
                        if(findkort()!=-2){
                if(s.spiller1tur==true){
                    System.out.println("kort "+findkort());
                s.afrika[s.hand1[findkort()]][0]=s.afrika[s.hand1[findkort()]][0]+100;
                s.hand1[findkort()]=s.bunke1[s.runde+5];
                s.tidgaa();
                tegndominans();
               
               
                }
                                if(s.spiller1tur==false){
                s.afrika[s.hand2[findkort()]][1]=s.afrika[s.hand2[findkort()]][1]+100;
                s.hand2[findkort()]=s.bunke2[s.runde+5];
                s.tidgaa();
                tegndominans();               
                }
            skifttur();
            slutkontrol();
            }
                      detsker.setText(kontinentstatus("Afrika"));
        afrilabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        asilabel.setBorder(null);         
            }

           
        } catch (IOException ex) {
            Logger.getLogger(Spilleplade.class.getName()).log(Level.SEVERE, null, ex);
        }
        tegndominans();
       
    }
Avatar billede arne_v Ekspert
06. juni 2013 - 03:07 #9
Har han jar fil og jpg fil i samme dir og er det dir default dir naar jar koeres?
Avatar billede svarejoergen Nybegynder
06. juni 2013 - 12:39 #10
sidder på mit arbejde nu. Kan se at den heller ikke virker her.

De andre billeder har heller ikke noget problem i at blive vist. Men metoden der burde repondere når man tryker på verdenskortet virker ikke.

Mine main metoder ligger i gratisdyr folderen. Her ligger verden.jpg også.

Jeg kigger på det med default dir når jeg kommer hjem. Når netbeans genererer en jar file, laver den bare en lille jar file med et java ikon på.
Jeg skriver igen når jeg har undersøgt det derhjemme.
Avatar billede svarejoergen Nybegynder
06. juni 2013 - 15:08 #11
Ved ikke om det svarer på spørgsmålet.

Men dir =

C:\Users\mit navn\Documents\Net\GratisDyr

Mine andre projekter er det:
C:\Users\mit navn\Documents\Netbeansprojects\(andre projekter)

Som sagt bliver billeder vist som de skal nu. De er alle med i jar filen. Men det der burde ske når man klikker på lige dét billede (verdenskortet) sker ikke på andre end min egen computer.

Jeg kan godt prøve at ligge jarfilen op et sted hvis man kan.
Men jeg kan ikke som sådan se ind i jar filen. Når jeg trykker på den kører spillet bare.
Avatar billede svarejoergen Nybegynder
07. juni 2013 - 21:20 #12
Problemet er at der smides en IOException når man kører jar filen.

Dette sker ikke når man kører den fra netbeans.

Et irriterende problem som jeg bare ikke forstår.
Avatar billede svarejoergen Nybegynder
07. juni 2013 - 22:56 #13
Ok dette virker både i netbeans og jar filen.

Smid et svar Arne.

InputStream is = Main.class.getResourceAsStream("verden.jpg");
BufferedImage image = ImageIO.read(is);
Avatar billede arne_v Ekspert
09. juni 2013 - 03:56 #14
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester