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 ?
Annonceindlæg fra Infor
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.
Den rigtige loesning er at putte JPG filen ind i JAR filen og saa lade programmet laese derfra.
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!
kan ikke oprette en pakke i netbeans der hedder default. den skriver invalid name
Hvis new File("verden.jpg") ikke kan finde filen saa er det fordi filen ikke ligger i default dir.
Hvis man vil pakke et billede ind i jar filen, saa bruger man ofte /images/ eller /graphics/ som path.
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(); }
Har han jar fil og jpg fil i samme dir og er det dir default dir naar jar koeres?
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.
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.
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.
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);
09. juni 2013 - 03:56
#14
ok
Kurser inden for grundlæggende programmering