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 + -
显示快捷键?