new-sashok724 / Launcher

sashok724's Launcher
https://launcher.sashok724.net/
Do What The F*ck You Want To Public License
71 stars 71 forks source link

DirWatcher'ы сразу же закрываются после их открытия #73

Closed xxDark closed 5 years ago

xxDark commented 5 years ago

Для умников, которые скажут, что они продолжают работать, даже после закрытия, лол AbstractWatchService:

    @Override
    public final void close()
        throws IOException
    {
        synchronized (closeLock) {
            // nothing to do if already closed
            if (closed)
                return;
            closed = true;

            implClose();

            // clear pending keys and queue special key to ensure that any
            // threads blocked in take/poll wakeup
            pendingKeys.clear();
            pendingKeys.offer(CLOSE_KEY);
        }
    }

WindowsFileWatchService


        // close watch service
        @Override
        void implCloseAll() {
            // cancel all keys
            ck2key.values().forEach(WindowsWatchKey::invalidate);

            fk2key.clear();
            ck2key.clear();

            // close I/O completion port
            CloseHandle(port);
        }

    @Override
    void implClose() throws IOException {
        // delegate to poller
        poller.close();
    }

AbstractPoller


    /**
     * Shutdown poller thread
     */
    final void close() throws IOException {
        invoke(RequestType.CLOSE);
    }

Тот же класс

    private Object invoke(RequestType type, Object... params) throws IOException {
        // submit request
        Request req = new Request(type, params);
        synchronized (requestList) {
            if (shutdown) {
                throw new ClosedWatchServiceException();
            }
            requestList.add(req);
        }
boolean processRequests() {
              .......
                    case CLOSE: {
                        implCloseAll();
                        req.release(null);
                        shutdown = true;
                        break;
                    }
new-sashok724 commented 5 years ago

Я скажу по-другому. Метод launch должен будет вернуться только после закрытия игры, разве не так?

xxDark commented 5 years ago

Я скажу по-другому. Метод launch должен будет вернуться только после закрытия игры, разве не так?

Да, но какая разница-то? Я это обнаружил, когда тестировал свой движок модов на JS, и изменение скриптов ни на что не влияло.

xxDark commented 5 years ago

Результат после исправления изображение

new-sashok724 commented 5 years ago

Очень большая разница. То что пока открыта игра, DirWatcher тоже будет открыт