界面使用单实例模式 画一个界面。然后其它类给它上面的组件赋值,每次访问单实例模式只要涉及到
Singleton.getInstance().xxx 操作的时候程序就停滞,不是停止,
也不知道为什么。也不饱错误或者异常?大家给个意见阿?用了好多方法,也问了朋友,没搞定呢。
Singleton.getInstance().xxx 操作的时候程序就停滞,不是停止,
也不知道为什么。也不饱错误或者异常?大家给个意见阿?用了好多方法,也问了朋友,没搞定呢。
解决方案 »
- Struts2拦截器中种cookie,但在action类中却取不到,大家看看啥原因?
- 关于hibernate session Exception的问题
- 机器经常出现no buffer 抓封包抓出的问题.大家帮忙分析
- 十万火急
- java執行bat文件
- [200分]急问:hibernate中用createCriteria关联两个实体(一对多)在Expression.sql中如何使用{alias}区分两个实体???
- 懂imap的高手讲进
- 心有多高,路就有多远。亟需高级JAVA开发经理
- 关于提交
- weblogic总是莫名的死掉!!!高手帮忙!!!!
- 如何用重定向的方式访问WEB-INF文件夹下的JSP页面?
- spring事物回滚
把你的单例实现方式贴一下,如果自己访问应该不是死锁,你单例设计的有问题吧。
一、你使用的是懒汉式单例模式。每次初次访问因为要进行一些实例变量的初始化所以停滞一下。
二、问题不是在单例模式上边。比如,i/o 操作,http 链接等等。
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.*;public class SingletonGUI { private static final SingletonGUI instance = new SingletonGUI(); public static SingletonGUI getInstance() {
return instance;
} private TimerTask task = new DistributeFile();
private DoDistribute pt = new DoDistribute(task); public Text txtSFileSum; /**
* @wbp.parser.entryPoint
*/
private SingletonGUI() {
final Display display = Display.getDefault();
final Shell shlG = new Shell(display, SWT.MIN | SWT.CLOSE);
shlG.setSize(500, 210);
shlG.setText("Show Information"); final Group groups = new Group(shlG, SWT.NONE);
groups.setText("Input");
groups.setBounds(40, 20, 420, 72); Label label_1 = new Label(groups, SWT.NONE);
label_1.setBounds(66, 37, 54, 12);
label_1.setText("sum"); txtSFileSum = new Text(groups, SWT.BORDER);
txtSFileSum.setEditable(false);
txtSFileSum.setBounds(126, 32, 157, 18);
txtSFileSum.setText(""); Button btnStart = new Button(shlG, SWT.NONE);
btnStart.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
System.exit(0);
}
});
btnStart.setToolTipText("");
btnStart.setBounds(116, 125, 72, 22);
btnStart.setText("start");
// 定时器事件
pt.start(1, 6); shlG.open();
shlG.layout();
while (!shlG.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} public static void main(String[] args) throws Exception {
// new SingletonGUITest();
}
}package pic;import java.util.TimerTask;import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;public class DistributeFile extends TimerTask {
public DistributeFile() {
} public void run() {
//这只是测试代码,每次走过 Come in ,就停住了,不知道为什么。
System.out.println("come in"); SingletonGUI.getInstance().txtSFileSum.setText("hello");//这个位置有问题? System.out.println("out");
}
}package pic;import java.util.TimerTask;
import java.util.Timer;public class DoDistribute {
private Timer timer;
private TimerTask task; public DoDistribute(TimerTask task) {
this.timer = new Timer();
this.task = task;
} public void start(int delay, int internal) {
timer.schedule(task, delay * 1000, internal * 1000);
}
}大家帮忙看看,怎么处理啊。
private static final SingletonGUI instance = new SingletonGUI(); public static SingletonGUI getInstance() {
return instance;
} 我觉得可以考虑把这一块改改
private static final SingletonGUI instance =null;public static synchronized SingletonGUI getInstance() {
if(null==instance){
instance=new SingletonGUI();
}else{
return instance;
}
}
private Display display;
private Shell shlG; private SingletonGUI() {
画面部分代码 略
} private void run() { // 启动定时器事件
pt.start(1, 6);
shlG.open();
shlG.layout();
while (!shlG.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
public static void main(String[] args) throws Exception {
SingletonGUI sg = SingletonGUI.getInstance();
sg.run();
}