我一直在使用Graphics.drawImage很長一段時間來渲染圖像,但是在我安裝了java 8之後,它停止工作。沒有錯誤。我不明白髮生了什麼事。Graphics.drawimage不工作Java 8
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
public class Game implements Runnable {
private BufferedImage img = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB);
private boolean running;
private Thread thread;
private JFrame f;
private Canvas c;
public Game() {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
for (GraphicsDevice gd : gs) {
GraphicsConfiguration[] gc = gd.getConfigurations();
for (GraphicsConfiguration gc1 : gc) {
f = new JFrame("Title", gd.getDefaultConfiguration());
c = new Canvas(gc1);
f.getContentPane().add(c);
f.setUndecorated(false);
f.setIgnoreRepaint(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(700, 600);
f.setResizable(false);
f.setLocationRelativeTo(null);
f.setFocusable(true);
f.setVisible(true);
}
}
}
public void init() {
img.getGraphics().drawImage(img, 0, 0, Color.BLACK, null);
}
@Override
public void run() {
long lastTime = System.nanoTime();
double nsPerTick = 1000000000D/60;
int ticks = 0;
int frames = 0;
long lastTimer = System.currentTimeMillis();
double delta = 0;
init();
while (running) {
long now = System.nanoTime();
delta += (now - lastTime)/nsPerTick;
lastTime = now;
boolean shouldRender = true;
while (delta >= 1) {
ticks++;
tick();
delta -= 1;
shouldRender = true;
}
try {
Thread.sleep(2);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
if (shouldRender) {
frames++;
render();
}
if (System.currentTimeMillis() - lastTimer >= 1000) {
lastTimer += 1000;
frames = 0;
ticks = 0;
}
}
}
public synchronized void start() {
running = true;
thread = new Thread(this, "GAME");
thread.start();
}
public synchronized void stop() {
running = false;
try {
thread.join();
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) {
new Game().start();
}
public void tick() { /*player movement, ect*/ }
public void render() {
c.createBufferStrategy(3);
BufferStrategy bs = c.getBufferStrategy();
Graphics g = bs.getDrawGraphics();
g.drawImage(img, 100, 100, null);
//I should also not that strings won't draw either.
g.drawString("Hello, world", 50, 50);
g.dispose();
bs.show();
}
}
我不明白爲什麼這會不會是工作,因爲它是在Java 7的做工精細,而且我之前沒有對代碼進行改動或後,我安裝的Java 8 還有我如果有幫助,我正在使用MacBook Pro。
請編輯您的問題包括[完整的示例](http://stackoverflow.com/help/mcve),顯示問題和平臺上它發生。 – trashgod
線程真的需要證明這個問題嗎?你能否創建一個不涉及顯示問題的線程的最小示例? –