2017-01-31 2 views
0

ich Eclipse auf Linux Ubuntu verwenden, und ich habe diesen Code für das Laden Bild und es als Hintergrund in einen meiner JPanels Einstellung:Java - Export nach JAR-Datei in Eclipse mit Ressourcen (Bildern und Audiodateien)

public class MenuState extends JPanel implements ActionListener { 

private static final long serialVersionUID = 1L; 
private GameStateManager gsm; 
private int width; 
private int height; 

public MenuState(GameStateManager gsm) 
{ 
    this.gsm = gsm; 
    width = gsm.getWidth(); 
    height = gsm.getHeight(); 
    SizeManager sm = new SizeManager(); 
    this.setLayout(new BorderLayout()); 
    sm.set_size(this, width, height); 
} 

public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 

    BufferedImage background_image; 
    try { 
     background_image = ImageIO.read(new File("src/res/img/menu_background.png")); 
     g.drawImage(background_image, 0, 0, width, height, null); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public void actionPerformed(ActionEvent e) { 
} 

und es funktioniert nur in Eclipse. Wenn ich es in JAR-Datei oder Runnable JAR-Datei exportieren, zeigt das Programm keine Bilder an. Ich habe auch versucht,

this.getClass().getResource() 

und ähnliche Codes zu verwenden, aber es funktioniert nicht in Eclipse. Aber ich mache vielleicht etwas falsch.

Ich habe auch diesen Code in einer anderen Klasse Audio zu spielen:

public class AudioManager { 

private Clip clip; 

public void play(String audio_name, boolean repeat) 
{ 
    try { 
     File audioFile = new File(audio_name); 
     AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile); 
     AudioFormat format = audioStream.getFormat(); 
     DataLine.Info info = new DataLine.Info(Clip.class, format); 
     clip = (Clip) AudioSystem.getLine(info); 
     clip.open(audioStream); 
     if(repeat) 
     { 
      clip.loop(clip.LOOP_CONTINUOUSLY); 
     } 
     clip.start(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void stop() 
{ 
    clip.stop(); 
} 

und spielt Audio-in Eclipse aber nicht, nachdem ich Projekt exportieren.

Ich nehme an, Datei funktioniert nur für Dateien auf der Festplatte und nicht für Dateien in JAR-Datei, aber es ist nur so, wie ich es in Eclipse funktioniert.

Also, was soll ich tun?

Und zusätzliches Problem: Sound in Eclipse gespielt ist nacheilend, verbesserte ich den verfügbaren Speicher für Eclipse, aber kleine Verzögerungen auftreten, beim Laden von Programm und Ändern JPanels in JFrame durch Klicken auf JButtons.

Danke für jeden Hinweis.

Antwort

0

Welchen String setzen Sie in die getResource Methode? Wenn Sie getResource oder getResourceAsStream verwenden, müssen Sie den Paketpfad angeben. Wenn sich Ihre Datei im Paket "com.test.example" befindet, müssen Sie getResource("/com/test/example/my_file.png") eingeben.

Also, mit Ihrem Hintergrundbild, müssen Sie Ihr Bild mit laden:

background_image = ImageIO.read(this.getClass().getResource("/res/img/menu_background.png")); 

Sie sollten mit Ihrer Audio-Datei, die die gleiche Art und Weise zu tun.

Ich empfehle Ihnen auch, Ihr Bild außerhalb der paintComponent Methode zu laden. Andernfalls wird das Bild jedes Mal neu geladen, wenn das Panel neu gezeichnet wird.

+0

Danke, ich dachte, ich kann den gleichen Pfad verwenden, den ich in der Datei verwendet habe, aber für getResource() musste ich/src entfernen. Und irgendeinen Ratschlag für verzögerten Audio in Eclipse? – Spook

+0

Gern geschehen. Ich weiß nichts, was in der Finsternis mit dem Nachlassen von Audio zu tun hat, ich habe das nie benutzt, also kann ich dir nicht helfen. Ich denke, du solltest etwas von deiner Seite untersuchen und einen neuen Thread erstellen, der dieser Frage gewidmet ist. – Madeorsk

Verwandte Themen