cache.java

来自「自行开发的高缓存table」· Java 代码 · 共 237 行

JAVA
237
字号
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov  Date: 2004-2-20 9:16:55
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   Cache.java

package utility.HWCacheTable;

import java.util.*;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;

// Referenced classes of package utility.HWCacheTable:
//            Worker, CacheManager, ServerModel

public class Cache extends Vector
{

    Cache(CacheManager cachemanager, int i)
    {
        _from = -1;
        _to = -1;
        _cacheManager = null;
        _serverModel = null;
        _timer = null;
        _thread = null;
        _stage = 0;
        _throwed = false;
        _status = 1;
        _cacheManager = cachemanager;
        _serverModel = cachemanager.getServerModel();
        char c = '\226';
        _from = i - c >= 0 ? i - c : 0;
        _to = i + c < _cacheManager.getRowCount() ? i + c : _cacheManager.getRowCount();
    }

    void start()
    {
        _thread = new Worker(this, _cacheManager.getServerModel(), _from, _to);
        _timer = new Timer();
        setStage(1);
        _timer.schedule(_thread, 400L);
    }

    synchronized void setStage(int i)
    {
        if(i > 0 && i <= 3)
            _stage = i;
    }

    synchronized int getStage()
    {
        return _stage;
    }

    public void setThrowFlag(boolean flag)
    {
        _throwed = flag;
        _serverModel.setThrowFlag(flag);
    }

    public boolean getThrowFlag()
    {
        return _throwed;
    }

    public int getFrom()
    {
        return _from;
    }

    public int getTo()
    {
        return _to;
    }

    synchronized void stopGettingDataAndStart()
    {
        _throwed = true;
        if(_stage == 0)
        {
            _cacheManager.thrownCacheFinishWorking();
            return;
        }
        try
        {
            if(_thread.cancel())
                _cacheManager.thrownCacheFinishWorking();
        }
        catch(Exception exception) { }
    }

    public void stopGettingData()
    {
        _throwed = true;
        if(_stage == 0)
            return;
        try
        {
            _thread.cancel();
        }
        catch(Exception exception) { }
    }

    Object getValueAt(int i, int j)
    {
        if(i < _from || i >= _to)
            return null;
        if(_stage == 0)
        {
            _status = 1;
            _cacheManager.showStatus();
            return "initializing...";
        }
        if(_stage == 1)
        {
            _status = 4;
            _cacheManager.showStatus();
            return "buffering...";
        }
        if(_stage == 2)
        {
            _status = 8;
            _cacheManager.showStatus();
            return "loading ...";
        }
        if(_stage == 3 && size() <= 0)
        {
            _status = 16;
            _cacheManager.showStatus();
            return "loading data failed";
        }
        if(i - _from >= 0 && i - _from < size())
        {
            _status = 2;
            Object obj = elementAt(i - _from);
            _cacheManager.showStatus();
            return _serverModel.translate(obj, j, i);
        } else
        {
            return null;
        }
    }

    int getCacheStatus()
    {
        return _status;
    }

    boolean isIndexInCache(int i)
    {
        return i >= _from && i < _to;
    }

    synchronized void copyData(Vector vector)
    {
        if(_throwed)
        {
            _cacheManager.thrownCacheFinishWorking();
            return;
        }
        setSize(0);
        if(vector != null)
        {
            for(int i = 0; i < vector.size(); i++)
                addElement(vector.elementAt(i));

        }
        Runnable runnable = new Runnable() {

            public void run()
            {
                try
                {
                    setStage(3);
                    if(!getThrowFlag())
                        updateTable();
                }
                catch(Exception exception) { }
                finally
                {
                    updateTable();
                }
            }

        };
        SwingUtilities.invokeLater(runnable);
        releaseTimer();
    }

    synchronized void updateTable()
    {
        if(_cacheManager != null)
            _cacheManager.getCacheTableModel().fireTableRowsUpdated(_from, _to);
        else
            return;
    }

    boolean gettingDataFinished()
    {
        return _stage == 3;
    }

    void release()
    {
        _cacheManager = null;
        _serverModel = null;
        releaseTimer();
    }

    void releaseTimer()
    {
        try
        {
            _timer.cancel();
            _thread.cancel();
            _timer = null;
            if(_thread != null)
                _thread.release();
            _thread = null;
        }
        catch(Exception exception) { }
    }

    private int _from;
    private int _to;
    private CacheManager _cacheManager;
    private ServerModel _serverModel;
    private Timer _timer;
    private Worker _thread;
    static final int INIT = 0;
    static final int BUFFERING = 1;
    static final int LOADING = 2;
    static final int FINISH = 3;
    private int _stage;
    private boolean _throwed;
    private int _status;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?