我正在用java编写一个游戏,并且所有工作都或多或少都正常,正如您在编码时所期望的那样,但我遇到的一个问题是将图像和声音文件读入游戏。 我编写了一个在Eclipse中运行良好的方法,但是一旦我尝试在可运行的jar中测试它(使用Eclipse导出),我的游戏就会卡在加载屏幕上,因为它无法读取文件。 我意识到你不能在Jar中创建File对象的问题,你必须使用流。 这可能有效,但图像/声音位于文件夹中,我不太确定如何使用流读取文件夹中的文件(即不知道文件的数量)。 因此我尝试使用ZipInputStream重写该方法(我在发布此解决方案之前找到了解决方案时的建议)。 这就是现在的方法: imageMap = new HashMap(); String imagebase = “/images”; CodeSource src = PlatformerCanvas.class.getProtectionDomain().getCodeSource(); if(src != null) { URL jar = src.getLocation(); try { ZipArchiveInputStream zip = new ZipArchiveInputStream(jar.openStream()); ZipArchiveEntry ze = null; while((ze = zip.getNextZipEntry()) != null) { System.out.println(ze.getName()); if(ze.getName().startsWith(imagebase) && ze.getName().endsWith(“.png”)) { loading++; imageMap.put(ze.getName().replaceAll(imagebase + “/”, “”), ImageIO.read(this.getClass().getResource(ze.getName()))); } […]
我正在研究Java Swing库,我遇到了问题。 在一个示例程序中,它通过以下行创建一个ImageIcon对象: ImageIcon icon = new ImageIcon(getClass().getResource(“exit.png”)); 当我执行我的程序时,我得到以下错误:由于在项目中缺少exit.png : Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException at javax.swing.ImageIcon.(ImageIcon.java:205) at com.andrea.second.SimpleMenu.initUI(SimpleMenu.java:23) at com.andrea.second.SimpleMenu.(SimpleMenu.java:17) at com.andrea.second.SimpleMenu$2.run(SimpleMenu.java:53) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 问题是,使用Eclipse,我必须把这个immage放在哪里? 我尝试将它(在我的文件系统中,而不是在Eclipse中)复制并粘贴到包含创建它的类的相同包文件夹中…但它不起作用 我有什么办法在Eclipse中解决这个问题?
我在其类路径中的abc.jar中有一个文件X.json。 abc.jar中有一个readFile方法,它将文件读取为 URL url = Abc.class.getClassLoader().getResource(“X.json”); File file = new File(url.toURI());* 如果我从jar的上下文中运行它,那就读得很好,即abc.jar中某个文件中的main方法 但是当从其他代码的abc.jar外部调用readFile时,它会因java.lang.IllegalArgumentException: URI is not hierarchical而失败java.lang.IllegalArgumentException: URI is not hierarchical 如何通过从jar的上下文外部调用方法readFile来获取File对象?
我的应用程序有问题。 当我在Eclipse中运行应用程序时,声音播放效果很好,但如果我将应用程序导出到runnable jar,则声音不起作用。 播放声音的方法: public static synchronized void playSound() { new Thread(new Runnable() { // The wrapper thread is unnecessary, unless it blocks on the // Clip finishing; see comments. public void run() { try { Clip clip = AudioSystem.getClip(); AudioInputStream inputStream = AudioSystem.getAudioInputStream(getClass().getResourceAsStream(“sound.wav”)); clip = AudioSystem.getClip(); clip.open(inputStream); clip.start(); } catch (Exception e) { System.err.println(e.getMessage()); […]
我正在尝试访问我的Java代码中的一些图像。 调用图像的代码如下。 public final ImageIcon whitePiece = new ImageIcon(getClass().getResource(“Images/whitecircle.PNG”)); public final ImageIcon blackPiece = new ImageIcon(getClass().getResource(“Images/blackcircle.png”)); public final ImageIcon tiePiece = new ImageIcon(getClass().getResource(“Images/tiecircle.PNG”)); public final ImageIcon boardPic = new ImageIcon(getClass().getResource(“Images/gameboard.PNG”)); 但是,这会返回以下错误: Exception in thread “main” java.lang.NullPointerException at javax.swing.ImageIcon.(Unknown Source) at jared.othello.GameInterface.(GameInterface.java:26) at jared.othello.Main.main(Main.java:22) 第26行是上述代码的第一行。 我几乎肯定我的文件目录命名有问题,但我无法弄清楚什么是错的或如何解决它。 我在项目中创建了一个名为“Images”的源文件,并将图像放在文件夹中,如下所示: 我做错了什么,以及正确的文件名语法是什么? 谢谢!
在Eclipse中,当我运行代码时,这有效: import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class Main { public static void main(String[] args) { JFrame frame = new JFrame(“test viewing images”); frame.setSize(600,300); frame.setLocationRelativeTo(null); // centered on monitor frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /** * Menu Bar stuff */ JMenuBar menuBar; JMenu menu; JMenuItem menuItem; // MENU BAR menuBar = new JMenuBar(); frame.setJMenuBar(menuBar); […]
我正在使用的音频文件位于: http : //www.orangefreesounds.com/loud-alarm-clock-sound/ 这是我的Eclipse IDE中的文件结构: 当我在IDE中运行时,音频文件播放完全正常,但是当我将其作为JAR文件导出时则不会。 我已经检查过并发现音频文件在JAR文件中。 我使用终端命令java -jar Sandbox.jar &来运行JAR文件。 该程序似乎能够找到该文件(因为它没有抛出IOException),但似乎无法执行播放。 为什么会出现这个问题,我该如何解决? 奇怪的更新 好的,实际上,JAR文件能够在Windows 8.1上的cmd或PowerShell运行时播放音频文件,但出于某种原因不能在Ubuntu 14.04的终端中播放。 这一次,我一直在尝试在Ubuntu 14.04中运行JAR文件。 奇怪的更新#2 我已确认JAR文件的问题仅适用于Windows 8.1系统。 这个问题中的两个代码片段都不起作用,而MadProgrammer的两个解决方案都有效。 最小,完整和可validation的示例(不适用于Windows或Ubuntu) import java.io.IOException; import java.net.URL; import javax.sound.sampled.*; public class Sandbox { public static void main(String[] args) throws UnsupportedAudioFileException, IOException, LineUnavailableException { URL url = Sandbox.class.getResource(“/sound-effects/alarmSoundClip.wav”); AudioInputStream ais = AudioSystem.getAudioInputStream(url); AudioFormat af […]
您好我已将我的java项目导出为可执行jar文件。 在我的项目中我正在访问包含一些数据的Excel文件。 现在,当我尝试访问该文件时,我无法访问Excel文件。 我的项目结构是: Java_Project_Folder – src_Folder – resources_Folder(包含excel文件) 我正在访问excel文件,如 FileInputStream file=new FileInputStream(new File(System.getProperty(“user.dir”) +File.separator+”resources”+File.separator+”Excel.xlsx”)); 我尝试使用getResourceAsStream访问此文件,如: FileInputStream file=(FileInputStream) this.getClass().getResourceAsStream (“/resources/Excel.xlsx”); 但我进入是nullexception。 哪有错,任何人都可以帮忙吗?
我试图做的是在程序的JAR中存储一个文本文件(不会改变),以便可以读取它。 文本文件的目的是它将被我的一个类读入,文本文件的内容将被添加到JEditorPane 。 该文件基本上是一个教程,当用户点击选项阅读教程时,文件内容将被读取并显示在弹出的新窗口中。 我有它的GUI部分,但只要将文件存储在JAR中以便可以访问它,我就迷失了。 我已经读过使用InputStream会起作用,但在尝试了一些事情之后我还没有让它工作。 我还将图像存储在JAR中,以用作GUI窗口的图标。 这完成了: private Image icon = new ImageIcon(getClass() .getResource(“resources/cricket.jpg”)).getImage(); 但是,这在尝试获取文件时不起作用: private File file = new File(getClass.getResource(“resources/howto.txt”)); 这是我现在的class级: public class HowToScreen extends JFrame{ /** * */ private static final long serialVersionUID = -3760362453964229085L; private JEditorPane howtoScreen = new JEditorPane(“text/html”, “”); private Image icon = new ImageIcon(getClass().getResource(“resources/cricket.jpg”)).getImage(); private BufferedReader txtReader = […]
我正在关注java swing游戏的教程:http: //zetcode.com/tutorials/javagamestutorial/movingsprites/ 在此刻: ImageIcon ii = new ImageIcon(this.getClass().getResource()); image = ii.getImage(); 我只是不知道我要写什么样的路径以及我应该在哪里保存我的图像(哪个目录)。 你能帮帮我吗? 你举个例子吗?