相关疑难解决方法(0)

Java,如何绘制不断变化的图形

之前没有这样做过,所以显然我很沮丧.这里,当前鼠标位置周围的64个像素在表单上绘制得更大.问题是,它有点'缓慢',我不知道从哪里开始修复.

除此之外,我创建了一个线程,它在完成后不断调用更新图形,并且像文本一样点fps,以显示事物的绘制速度.

图像示例:(图像来自Eclipse中的字母'a')

替代文字

代码示例:

@SuppressWarnings("serial")
public static class AwtZoom extends Frame {
    private BufferedImage image;
    private long timeRef = new Date().getTime();
    Robot robot = null;

    public AwtZoom() {
        super("Image zoom");
        setLocation(new Point(640, 0));
        setSize(400, 400);
        setVisible(true);
        final Ticker t = new Ticker();

        this.image = (BufferedImage) (this.createImage(320, 330));
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                t.done();
                dispose();
            }
        });
        try {
            robot = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }
        t.start();
    }

    private class Ticker extends Thread { …
Run Code Online (Sandbox Code Playgroud)

java graphics

8
推荐指数
2
解决办法
2万
查看次数

SunToolkit.awtLock:需要在EDT上调用需要这种锁的代码

我正在调查死锁,并在线程转储中看到以下内容

at sun.awt.SunToolkit.awtLock(SunToolkit.java:229)
at sun.awt.X11.XRobotPeer.setup(Native Method)
- locked <0x00000000a633fbd0> (a java.lang.Class for sun.awt.X11.XRobotPeer)
at sun.awt.X11.XRobotPeer.<init>(XRobotPeer.java:24)
at sun.awt.X11.XToolkit.createRobot(XToolkit.java:683)
at java.awt.Robot.init(Robot.java:119)
at java.awt.Robot.<init>(Robot.java:77)
Run Code Online (Sandbox Code Playgroud)

这是由呼叫引起的 Robot robot = new Robot();

这个调用需要一个lock(SunToolkit.awtLock),我想知道还有谁在使用那个锁,如果我把那个new Robot()调用移到EDT 会更好.该名称表明AWT使用它是单线程的.如果EDT上的某些内容也采用了这种锁(例如Swing组件),那么当我创建RobotEDT 时,我遇到死锁的几率会增加.

另一方面,正如在这个问题中讨论的那样,许多Robot方法被设计为在EDT上调用时抛出异常.如果您最好Robot在EDT上创建实例,这会让人讨厌.

存在同样的问题,Toolkit.getDefaultToolkit().getScreenResolution()所以不需要只关注这个Robot类:

at sun.awt.SunToolkit.awtLock(SunToolkit.java:229)
at sun.awt.X11.XToolkit.getScreenResolution(XToolkit.java:999)
Run Code Online (Sandbox Code Playgroud)

所以我想要清理的是:

  • 那个锁中谁是有兴趣的人?
  • 这个锁是否只是为了尝试使Swing/AWT多线程(或者至少更多线程安全)而被引入,但推荐的方法是避免在另一个线程上接受EDT的锁定吗?
  • 是否有可用的正式Oracle/Sun文档(类似于Swin中的Concurrency指南),我可以参考吗?我的谷歌技能在此失败了.

java swing awt

8
推荐指数
1
解决办法
513
查看次数

任何人都可以帮我解释为什么我的GUI在循环运行时无法点击?

循环结束后,所有按钮和文本字段都可用,但循环运行时,无法单击任何按钮和文本字段.我尝试了很多不同的东西,看了很多不同的网站,但没有什么可以帮助我.我不知道出了什么问题!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

 public class J extends JFrame implements ActionListener{    
    JButton start = new JButton("Start (F12)");
    JButton stop = new JButton("Stop");

    int i;
    JLabel delay = new JLabel("Delay: ");
    JTextField delayJTF = new JTextField(4);
    int delayS = 0;
    GridLayout bl = new GridLayout(10, 10);
    public J() 
    {      

    super("Auto Clicker");
    start.addActionListener(this);
    stop.addActionListener(this);
    setSize(300, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(bl);
    add(delay, BorderLayout.NORTH);
    add(delayJTF, BorderLayout.NORTH);
    add(start);
    add(stop);
    setVisible(true);




     }

      boolean run = false;



          public static void main(String[] args) {
         J …
Run Code Online (Sandbox Code Playgroud)

java swing awt freeze event-dispatch-thread

0
推荐指数
1
解决办法
804
查看次数

标签 统计

java ×3

awt ×2

swing ×2

event-dispatch-thread ×1

freeze ×1

graphics ×1