Java Swing. Лагает анимация на Linux

267
18 января 2018, 20:29

Есть очень простенькое приложение с интерфейсом на Java с использованием Swing. Его смысл — считывать нажатия на клавиши и менять координаты отрисовки квадратика. Вся проблема в том, что на Ubuntu анимация ужасно тормозит, а вот на Windows все плавно летает.
В чем может быть проблема? В ос или в приложении?

P.s - код писал не я

View:

class View extends JComponent implements ActionListener
{
    private Timer timer;
    private int repaintsPerSecond;
    public View()
    {
        repaintsPerSecond = 30;
        timer = new Timer(1000 / repaintsPerSecond, this);
    }
    public void start()
    {
        timer.start();
    }
    public void stop()
    {
        timer.stop();
    }
    @Override
    public void actionPerformed(ActionEvent e)
    {
        repaint();
    }
    @Override
    public void paintComponent(Graphics g)
    {
        g.setColor(Color.black);
        Player p;
        Point loc;
        int s;
        for(int i = 0; i < Main.players.size(); i++)
        {
            p = Main.players.get(i);
            loc = p.getLocation();
            s = p.getSize();
            g.setColor(p.getColor());
            g.fillRect((int)loc.getX(), (int)loc.getY(), s, s);
        }
    }
}

Controller:

class Controller implements KeyListener, ActionListener
{
    public View v;
    private Player player;
    private Timer timer;
    private boolean isUp, isLeft, isRight, isDown;
    public Controller(Player player, int delay)
    {
        this.player = player;
        timer = new Timer(delay, this);
    }
    public void start()
    {
        timer.start();
    }
    public void stop()
    {
        timer.stop();
    }
    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(isUp)
            player.stepUp();
        if(isLeft)
            player.stepLeft();
        if(isRight)
            player.stepRight();
        if(isDown)
            player.stepDown();
        v.repaint();
    }
    @Override
    public void keyPressed(KeyEvent e)
    {       
        switch(e.getKeyCode())
        {
            case 87://w
                isUp = true;
                break;
            case 65://a
                isLeft = true;
                break;
            case 68://d
                isRight = true;
                break;
            case 83://s
                isDown = true;
                break;
        }
    }
    @Override
    public void keyReleased(KeyEvent e)
    {
        switch(e.getKeyCode())
        {
            case 87://w
                isUp = false;
                break;
            case 65://a
                isLeft = false;
                break;
            case 68://d
                isRight = false;
                break;
            case 83://s
                isDown = false;
                break;
        }
    }
    @Override
    public void keyTyped(KeyEvent e)
    {
    }
}
READ ALSO
Реализация фрагмента с картинкой

Реализация фрагмента с картинкой

Привет, появилась проблема не могу передать изображение во фрагментУ меня есть адаптер RecyclerView ProductAdapter, есть Фрагмент в котором собственно...

251
Копирование файла из ресурсов jar

Копирование файла из ресурсов jar

Можно ли скопировать файл src/main/resources/hibernatecfg

245
How to add physics to Java3d [требует правки]

How to add physics to Java3d [требует правки]

I'm develop a basic Java3d applicationHow to add physics to Java3d application and does it even exit for Java3d ? Please help me or give me advice

280