दिलचस्प पोस्ट
क्या मेरे नाम के दोस्ताना नाम हैं? बिना किसी क्रमबद्ध सरणी के आधार पर क्रमबद्ध सरणी को संसाधित करना क्यों तेज़ है? एक स्थैतिक विधि के भीतर गैर स्थैतिक आंतरिक वर्ग को कैसे प्रारंभ करें जावा में निस्टेड स्ट्रीम और लेखकों को बंद करने का सही तरीका आईफोन ओरिएंटेशन को पोर्ट्रेट से लैंडस्केप तक बदलते समय एचटीएमएल फ़ॉन्ट-आकार बनाए रखें स्ट्रिंग के रूप में enum के JSON क्रमांकन जीकग्रीड में कॉलम मूल्य से जीएटी का उपयोग करते हुए एक नए पेज पर लिंक करना अजगर का उपयोग करके फ़ाइल को 'प्रिंट' आउटपुट कैसे रीडायरेक्ट करें? JSON.स्ट्रिपर, टाईप एरर से बचें: JSON को परिपत्र संरचना परिवर्तित करना अल्पविराम सीमांकित सूची SQL सर्वर बनाने के लिए यह क्वेरी क्या करती है? आपका पसंदीदा प्रोफ़ाइल उपकरण क्या है (सी ++ के लिए) जावा वेब अनुप्रयोग में एप्लिकेशन सर्वर के बाहर से स्थिर डेटा सेवा करने का सबसे सरल तरीका पैनल में एक जटिल छवि जोड़ें, इसके चारों ओर एक अनुकूलित उपयोगकर्ता इंटरफ़ेस में बटन IPhone पर संपीड़न एपीआई नेस्टेड ऑब्जेक्ट्स को कैसे पूछें?

छवियाँ लोड नहीं हो रही हैं

फ़्रेम विंडो लॉन्च हो रही है लेकिन पृष्ठभूमि और अग्रभूमि चित्र लोड नहीं हो रहे हैं और विंडो फ्रेम आकार भी बहुत छोटा है कृपया त्रुटि को ठीक करने में मेरी मदद करें

यहां कोड पोस्ट किया गया है

Aquarium.java

import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.awt.image.ImageObserver; import java.util.Vector; public class Aquarium extends Frame implements Runnable { Image aquariumImage,memoryImage; BufferedImage bImage; Graphics memoryGraphics; Image [] fishImages=new Image[2]; MediaTracker tracker; int numberFishes=12; Vector<Fish> fishes=new Vector<Fish>(); Thread thread; boolean runOk=true; int sleepTime=110; Fish fish; Aquarium() { //set the title and assign tracker object setTitle("The Aquarium "); tracker=new MediaTracker(this); //add images to the tracker object to trace it fishImages[0]=Toolkit.getDefaultToolkit().getImage("src\fish1.gif"); tracker.addImage(fishImages[0], 0); System.out.println("fish 1 size "+Toolkit.getDefaultToolkit().getImage("src\fish1.gif").getWidth(null)); fishImages[1]=Toolkit.getDefaultToolkit().getImage("src\fish2.gif"); tracker.addImage(fishImages[1], 0); aquariumImage =Toolkit.getDefaultToolkit().getImage("src\bubbles.gif"); tracker.addImage(aquariumImage,0); setResizable(true); setVisible(true); //assign memory to the graphics and anotherImage object int dx=getSize().width; int dy=getSize().height; System.out.println("x value is "+dx+ " dy value is "+ dy); bImage=new BufferedImage(dx, dy,BufferedImage.TYPE_INT_ARGB); try { memoryGraphics=bImage.getGraphics(); } catch(Exception exc) { System.out.println(exc.getCause()); System.out.println(exc.getStackTrace()); } //create a new thread and start the thread thread=new Thread(); thread.start(); try { tracker.waitForID(0); } catch (Exception ex) { System.out.println(ex.getMessage()); } setSize(aquariumImage.getWidth(this),aquariumImage.getHeight(this)); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); runOk=false; } }); } public static void main(String ar[]) { new Aquarium(); } @Override public void run() { //draw 4 edges of rectangle Rectangle edges=new Rectangle(0+getInsets().left,0+getInsets().top, getSize().width-(getInsets().left+getInsets().right), getSize().height-(getInsets().top+getInsets().bottom)); //add fishes to the fishes vector for (int loopIndex=0; loopIndex<numberFishes;loopIndex++) { fishes.add(new Fish(fishImages[0],fishImages[1],edges,this)); try { Thread.sleep(20); } catch (Exception e) { System.out.println(e.getMessage()); } } while(runOk) { for(int loopIndex=0; loopIndex < numberFishes; loopIndex++) { fish=(Fish)fishes.elementAt(loopIndex); fish.swim(); } try { Thread.sleep(sleepTime); } catch (Exception e) { System.out.println(e.getMessage()); } repaint(); } } public void update(Graphics g) { memoryGraphics.drawImage(aquariumImage, 0, 0, this); for(int loopIndex=0;loopIndex<numberFishes;loopIndex++) { ((Fish)fishes.elementAt(loopIndex)).drawFishImage(memoryGraphics); } g.drawImage(bImage, 0, 0, this); } } 

fish.java

 import java.awt.*; import java.util.Random; public class Fish { Component tank; Image image1,image2; Point location,velocity; Rectangle edges; Random random; public Fish(Image image1,Image image2, Rectangle edges,Component tank) { random = new Random(System.currentTimeMillis()); this.tank=tank; this.image1=image1; this.image2=image2; this.edges=edges; this.location=new Point(100+ (Math.abs(random.nextInt())%300), 100+Math.abs(random.nextInt())%100)); this.velocity=new Point(random.nextInt()%8,random.nextInt()%8); } public void swim() { //determine the optimum velocity to make the fish swim if(random.nextInt()%7<=1) { velocity.x += random.nextInt() % 4 ; velocity.x = Math.min(velocity.x, 8); velocity.x = Math.max(velocity.x, -8); velocity.y += random.nextInt() % 4; velocity.y = Math.min(velocity.y, 8); velocity.y = Math.max(velocity.y, -8); } //add the velocity to the location of the fish to make it move location.x += velocity.x; location.y += velocity.y; if(location.x < edges.x) { location.x=edges.x; velocity.x = -velocity.x; } if((location.x + image1.getWidth(tank)) > (edges.x + edges.width)) { location.x = edges.x + edges.width - image1.getWidth(tank); velocity.x = -velocity.x; } if(location.y < edges.y) { location.y = edges.y; velocity.y = -velocity.y; } if((location.y + image1.getHeight(tank)) > (edges.y + edges.height)) { location.y = edges.y + edges.height - image1.getHeight(tank); velocity.y = -velocity.y; } } public void drawFishImage(Graphics g) { if(velocity.x < 0) { g.drawImage(image1,location.x,location.y,tank); } else { g.drawImage(image2, location.x, location.y, tank); } } } 

वेब के समाधान से एकत्रित समाधान "छवियाँ लोड नहीं हो रही हैं"

मैं यह कहने के लिए माफी चाहता हूँ, लेकिन आपके कोड में बहुत सी बातें गलत हैं …

चलो साथ – साथ शुरू करते हैं:

  • शीर्ष स्तर कंटेनर के किसी भी paint तरीके को ओवरराइड न करें। साथ शुरू करने के लिए, शीर्ष स्तर के कंटेनरों में से कोई भी डबल बफर नहीं है।
  • भारी वजन घटकों के बजाय हल्के वजन घटकों का उपयोग करें ( Frame बजाय JFrame का उपयोग करें, Panel बजाय JPanel उपयोग करें) …
  • JPanel उपयोग Frame बजाय अपनी पेंटिंग सतह के रूप में करें, जैसा कि ऊपर बताया गया है …
  • जैसा कि बताया गया है, आप थ्रेड कोड कुछ नहीं कर रहे हैं ( new Thread().start() )।
  • वास्तव में फ़िशियों को स्क्रीन पर पेंट करने के लिए आपके पास कोई पेंट कोड नहीं था (हाँ आपके मछली का पेंट कोड है, लेकिन कुछ भी नहीं कह रहा था)।
  • आप यादृच्छिक संख्या जनरेटर काम नहीं करता है। मुझे एक ही जगह पर तैरने के लिए सभी मछलियों को मिला …
  • आप छवि लोड हो रहा है कोड गलत है। इसके बजाय ImageIO उपयोग करें
  • आयताकार संदर्भ को सीधे स्टोर न करें समस्या यह है कि यदि विंडो का आकार बदल दिया जाता है, तो मछली में तैरने के लिए उपलब्ध सीमाएं बदल जाएंगी, भले ही वे मछलीघर की सीमा के भीतर निहित हों, यह संभव है कि मछलीघर के स्थान को बदलना होगा।
  • जैसा कि mentioed, आप छवि पथ गलत हैं। आप किसी भी रास्ते में कभी भी src शामिल नहीं करते हैं एक बार तैनात करने के बाद, src पथ अब मौजूद नहीं होगा

ये मेरा ले …

fishies

मछलीघर

 public class Aquarium extends JPanel { public static final int NUMNBER_OF_FISHIES = 12; private BufferedImage masterFish; private Vector<Fish> fishes = new Vector<Fish>(NUMNBER_OF_FISHIES); private int sleepTime = 110; public Aquarium() { //set the title and assign tracker object try { masterFish = ImageIO.read(getClass().getResource("/gnome_panel_fish.png")); } catch (IOException iOException) { iOException.printStackTrace(); } // This is a little cheat which means you only ever need one fish image // Basically it will flip the master along it's horizontal axies ;) BufferedImage flippedMaster = new BufferedImage(masterFish.getWidth(), masterFish.getHeight(), masterFish.getType()); Graphics2D g2d = flippedMaster.createGraphics(); g2d.setTransform(AffineTransform.getScaleInstance(-1, 1)); g2d.drawImage(masterFish, -masterFish.getWidth(), 0, this); g2d.dispose(); for (int index = 0; index < NUMNBER_OF_FISHIES; index++) { fishes.add(new Fish(masterFish, flippedMaster, this)); } Thread background = new Thread(new Background()); background.setDaemon(true); background.start(); } public static void main(String ar[]) { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException classNotFoundException) { } catch (InstantiationException instantiationException) { } catch (IllegalAccessException illegalAccessException) { } catch (UnsupportedLookAndFeelException unsupportedLookAndFeelException) { } JFrame frame = new JFrame("The Aquarium "); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new Aquarium()); frame.setSize(400, 400); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); for (Fish fish : fishes) { fish.drawFishImage(g); } } protected class Background implements Runnable { @Override public void run() { while (true) { for (Fish fish : fishes) { fish.swim(); } try { Thread.sleep(sleepTime); } catch (Exception e) { System.out.println(e.getMessage()); } repaint(); } } } } 

मछली

 public class Fish { private Component tank; private Image image1, image2; private Point location, velocity; private Random random; public Fish(Image image1, Image image2, Component tank) { random = new Random(); this.tank = tank; this.image1 = image1; this.image2 = image2; this.location = new Point( 100 + (Math.abs(random.nextInt()) % 300), 100 + Math.abs(random.nextInt()) % 100); this.velocity = new Point(random.nextInt() % 8, random.nextInt() % 8); System.out.println(location); } public void swim() { Rectangle edges = tank.getBounds(); //determine the optimum velocity to make the fish swim if (random.nextInt() % 7 <= 1) { velocity.x += random.nextInt() % 4; velocity.x = Math.min(velocity.x, 8); velocity.x = Math.max(velocity.x, -8); velocity.y += random.nextInt() % 4; velocity.y = Math.min(velocity.y, 8); velocity.y = Math.max(velocity.y, -8); } //add the velocity to the location of the fish to make it move location.x += velocity.x; location.y += velocity.y; if (location.x < edges.x) { location.x = edges.x; velocity.x = -velocity.x; } if ((location.x + image1.getWidth(tank)) > (edges.x + edges.width)) { location.x = edges.x + edges.width - image1.getWidth(tank); velocity.x = -velocity.x; } if (location.y < edges.y) { location.y = edges.y; velocity.y = -velocity.y; } if ((location.y + image1.getHeight(tank)) > (edges.y + edges.height)) { location.y = edges.y + edges.height - image1.getHeight(tank); velocity.y = -velocity.y; } } public void drawFishImage(Graphics g) { if (velocity.x < 0) { g.drawImage(image1, location.x, location.y, tank); } else { g.drawImage(image2, location.x, location.y, tank); } } } 

अपने कोड के साथ कई समस्याओं में, दो बाहर खड़े हैं:

  • आप एक नया Thread बनाते हैं जिसका Runnable "विधि कुछ नहीं और रिटर्न करता है।" इसके बजाय, कन्स्ट्रक्टर में अपने कार्यान्वयन की आपूर्ति करें:

     //create a new thread and start the thread thread = new Thread(this); thread.start(); 
  • आपने सवाल स्विंग को टैग किया है, जिनके ऑब्जेक्ट्स का निर्माण किया जाना चाहिए और केवल ईवेंट डिस्पैच थ्रेड पर हेरफेर किया जाना चाहिए। javax.Swing.Timer के javax.Swing.Timer , javax.Swing.Timer का एक उदाहरण का उपयोग करें, यहाँ सचित्र।

परिशिष्ट: आपकी आरेखण की सतह एक JComponent जैसे कि JComponent होनी चाहिए। चूंकि इसमें कोई घटक ही नहीं होता है, आप यहां getPreferredSize() को ओवरराइड कर सकते हैं और आकार को सही करने के लिए संलग्न Window को pack() कर सकते हैं।

ऐसा इसलिए है क्योंकि आप सापेक्ष पथ का उपयोग कर रहे हैं। एक परीक्षण के रूप में, हार्ड-कोडित पथ का उपयोग करें काम करने के बाद, आप इसे अपना संदर्भ बदल सकते हैं।