Может ли локальное хранилище быть злонамеренно отредактировано на стороне клиента?

Не зная полной степени того, что вы пытаетесь сделать, это не совсем возможно для вас точный ответ.

Из звуков вещей, которые вы пытаетесь запустить долго выполняемые задачи в контексте Событие Dispatching Thread.

Блокировка этой нити предотвращает перерисовку Swing.

Из того, что я могу сказать, вы хотите использовать SwingWorker . Это позволит вам выполнять свою работу в фоновом потоке, а повторная синхронизация обновлений обратно в EDT

Обновлена ​​с помощью примера

Я знаю, что вы сказали, что не «хотите» использовать a SwingWorker, но, честно говоря, это просто проще и безопаснее ...

enter image description here [/g1]

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class LongRunningTask {

    public static void main(String[] args) {
        new LongRunningTask();
    }

    public LongRunningTask() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                new BackgroundWorker().start();

            }
        });
    }

    public class BackgroundWorker extends SwingWorker {

        private JFrame frame;

        public BackgroundWorker() {
        }

        // Cause exeute is final :P
        public void start() {
            ImageIcon icon = new ImageIcon(getClass().getResource("/spinner.gif"));
            JLabel label = new JLabel("This might take some time");
            label.setIcon(icon);

            frame = new JFrame("Testing");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new GridBagLayout());
            frame.add(label);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

            execute();
        }

        @Override
        protected Object doInBackground() throws Exception {

            System.out.println("Working hard...");
            Thread.sleep(1000 + (((int)Math.round(Math.random() * 5)) * 1000));
            System.out.println("Or hardly working...");

            return null;

        }

        @Override
        protected void done() {
            frame.dispose();
        }

    }
}

1
задан Paul Hoffer 20 June 2010 в 07:08
поделиться

1 ответ

Да, он может, на самом деле вы всегда должны предполагать, что все, что делается на стороне клиента. может быть изменено, конечно, JavaScript тоже.

Если вы хотите быть уверены, что что-то не будет изменено, вы можете использовать какую-то криптографическую подпись на данных и проверить их на стороне сервера.

2
ответ дан 2 September 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: