मेरे पास यह विधि पेंट() है जो ग्राफिक्स 2 डी पैरामीटर प्राप्त करती है। अजीब बात यह है कि जब तक कोई System.out.println मौजूद नहीं होता है (जो मैं नीचे दिए गए ब्लॉक में टिप्पणी करता हूं), कैनवास कुछ भी नहीं खींचागा।कोड ग्राफ़ में System.out.println होने तक मेरा ग्राफिक्स कोड क्यों नहीं चलता है?
public class Map{
public void paint(Graphics2D g){
//fill background to black
g.setColor(Color.black);
g.fillRect(0, 0, TILE_SIZE*WIDTH, TILE_SIZE*HEIGHT);
//draw the tiles and buildings
for(int i=0;i<WIDTH;i++){
for(int j=0;j<HEIGHT;j++){
if(map[j][i] == CLEAR){
//System.out.println("");
g.setColor(Color.gray);
g.fillRect(i*TILE_SIZE, j*TILE_SIZE, TILE_SIZE, TILE_SIZE);
g.setColor(Color.red);
g.drawRect(i*TILE_SIZE, j*TILE_SIZE, TILE_SIZE, TILE_SIZE);
}
}
}
}
}
यहां मैं कैनवास पर आकर्षित करने और इसे फ्रेम में जोड़ने के लिए बफरस्ट्रेटी का उपयोग करता हूं। यह विधि क्लास मैप में है जिसे BufferStrategy से getDrawGraphics() विधि से ग्राफिक्स 2 डी पारित किया जाएगा (मुझे उम्मीद है कि कई लोग इस बात से परिचित हैं कि मैं क्या कर रहा हूं)।
public class MapTest extends Canvas{
private Map map;
public MapTest(){
Frame frame = new Frame("MAP");
frame.add(this);
frame.setVisible(true);
createBufferStrategy(2);
strategy = getBufferStrategy();
//draw the map
Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
//g.translate(100, 100);
map.paint(g);
g.dispose();
strategy.show();
}
}
यह कोड कैनवास वर्ग से है। जैसा कि आप देख सकते हैं कि पेंट() विधि कैनवास वर्ग से अलग है (जिसे मैं गेमटेस्ट नाम देता हूं)। इसलिए यदि मैं println कथन पर टिप्पणी करता हूं तो कैनवास में कोई ग्राफिक्स नहीं दिखाया जाता है, अन्यथा यह सही तरीके से प्रदर्शित होता है। कोई मुझे मदद कर सकता है???
एक बात जो मेरे दिमाग में आती है वह यह है कि मुझे इसके बारे में इसी तरह के मुद्दे थे, और पता चला है कि 'System.out.println()' थ्रेड सिंक्रनाइज़ेशन का कारण बनता है। – everton
मुझे पता है कि यह एक गंभीर मुद्दा है, और आपको कुछ उत्तरों की आवश्यकता है, लेकिन जब मैं आपका प्रश्न विषय पढ़ता हूं तो मैं एलओएल का विरोध नहीं कर सकता :) – dbrin
यूप, थ्रेड सिंक्रनाइज़ेशन समस्या की तरह लगता है। मैं अनुमान लगा रहा हूं कि आप ईवेंट-प्रेषण धागे के अलावा किसी अन्य धागे से इसे बुला रहे हैं, जो इस प्रकार की अधिकांश बग का कारण है। विषय की एक अच्छी अच्छी चर्चा के लिए http://en.wikipedia.org/wiki/Event_dispatching_thread पर एक नज़र डालें। – GreyBeardedGeek