C
Chantal
Hallo,
nutze Win7 x64 und erzeuge ein JWindow, darin ist ein Screenshot von 50*50 als Hintergrund. Darüber lege ich ein Fadenkreuz. Alle paar Starts (bitte öfters versuchen) flackert das JWindow kurz ganz in schwarz oder auch mal in grau und stellt dann erst das Fadenkreuz dar.
Extrem wird es, wenn ich die Variablen z.B. 700*700 setze.
Wie lässt sich das abstellen?
nutze Win7 x64 und erzeuge ein JWindow, darin ist ein Screenshot von 50*50 als Hintergrund. Darüber lege ich ein Fadenkreuz. Alle paar Starts (bitte öfters versuchen) flackert das JWindow kurz ganz in schwarz oder auch mal in grau und stellt dann erst das Fadenkreuz dar.
Extrem wird es, wenn ich die Variablen z.B. 700*700 setze.
Wie lässt sich das abstellen?
Java:
import java.awt.AWTEvent;
import java.awt.AWTException;
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.KeyboardFocusManager;
import java.awt.MediaTracker;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Hashtable;
import java.util.TimerTask;
import javax.imageio.ImageIO;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import java.awt.BasicStroke;
import java.awt.RenderingHints;
public class Crosshair extends JWindow{
private Image img;
private int width,height;
public Crosshair(){
this.width = 50;
this.height = 50;
setSize(width,height);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setLocationRelativeTo(null);
MediaTracker mt = new MediaTracker(this);
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
final int x=(int)((int)ge.getMaximumWindowBounds().getWidth()/2-this.width/2);
final int y=(int)((int)ge.getMaximumWindowBounds().getHeight()/2-this.height/2);
final int w=this.width;
final int h=this.height;
Robot robot=null;
try {
robot=new Robot();
}catch(AWTException e){}
final Rectangle rectangle=new Rectangle(x,y,w,h);
img=robot.createScreenCapture(rectangle);
setVisible(true);
if (img == null){
img = this.createImage(x, y);
}
mt.addImage(img, 0);
try {
mt.waitForAll();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try{
Thread.sleep(3000);
}catch(Exception e){
System.err.println(e.toString());
}
finally{
System.exit(0);
}
}
public static void main(String[] args) {
Crosshair screen=new Crosshair();
}
public void paint(Graphics g) {
super.paint(g);
if(img != null){
g.drawImage(img, 0, 0, this);
Graphics2D g2d=(Graphics2D)g;
g2d.drawImage(img,0,0,null);
int width,height;
width=getWidth();
height=getHeight();
g2d.translate(width/2,height/2);
for (int i=0;i<4;i++){
g2d.rotate(Math.PI/2f);
g2d.drawLine(0,-10,0,-20);
}
}
}
}