源代码一创建创建窗体线程:package Poem;
public class Start{
public static void main(String[] args){
FirstwinThread firstwin=new FirstwinThread();
firstwin.start();
}
}
源代码二创建窗体和创建关闭窗体的线程:package Poem;
public class FirstwinThread extends Thread {
public static Paint demo;
public void run() {
demo = new Paint(null);
demo.setBlockOnOpen(true);
ForOneShuThread OneShu=new ForOneShuThread();
OneShu.start();
demo.open();
}}
源代码三创建窗体类的源代码:package Poem;
import java.awt.Dimension;
import java.awt.Toolkit;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Paint extends ApplicationWindow {
Display display = new Display();
Shell shell=new Shell();
public Paint(Shell arg0) {
super(arg0);
}
// 主窗体
protected void configureShell(Shell shell) {
// 窗体属性
shell.setText("诗赋");
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int w = d.width; // 获取屏幕宽度
int h = d.height; // 获取屏幕高度
shell.setSize(580, 320); // 规定窗口大小
shell.setLocation(w / 2 - 208, h / 2 - 220); // 设置窗口显示的位置
shell.setSize(416, 440);
// 窗体背景
new GC(shell);
shell.addPaintListener(new org.eclipse.swt.events.PaintListener() {
public void paintControl(PaintEvent e) {
Image im = new Image(display, "F:/java/Poem/src/Poem/wm.jpg");
final Rectangle bounds = im.getBounds();
int wi = bounds.width; // 图片宽
int hi = bounds.height; // 图片高
e.gc.drawImage(im, 0, 0, wi, hi, 0, 0, 400, 400);
}
});
}
protected void constrainShellSize() {
Rectangle bounds = shell.getBounds();
Rectangle constrained = getConstrainedShellBounds(bounds);
if (!bounds.equals(constrained)) {
shell.setBounds(constrained);
}}}
源代码四创建延迟关闭窗体的线程:package Poem;
public class ForOneShuThread extends Thread{
public void run() {
TestTimerTask tasted=new TestTimerTask();
tasted.strun();
}
}
源代码五实现延迟和关闭的类 :package Poem;
import java.util.Timer;
import java.util.TimerTask;
public class TestTimerTask extends TimerTask{
public void run() {
System.out.print("ok");
FirstwinThread.demo.close();
}
public void strun(){
FirstwinThread.demo.open();
Timer timer = new Timer();
TimerTask task = new TestTimerTask();
timer.schedule(task,100);
}
}
图片没出来
上面程序想实现的是创建窗体后 可以手动关闭或者一段时间后自动关闭 源代码五本来是用来实现一段时间自动关闭的类 但是总是执行不到关闭的方法 就是好像是源代码五不认创建的这个窗体 现在我的问题是 一 我这个程序的问题在哪里 是线程的问题 还是 值传递的问题 二 我该如何去改 三 实现我这个流程还有什么其他方法没有 请高手指教 能帮助改代码的帮助改改代码 不能帮助改代码的 提供个方法思路也十分感谢 路过的帮顶的也谢了 真心求教
------解决方案--------------------
楼主,首先我整理了半天才把你的程序跑通,因为我不明白你想执行的是什么意思,运行出来什么效果,我也就勉强修改运行了下,下面是源码:
- Java code
package Poem;import org.eclipse.swt.widgets.Display;public class FirstwinThread extends Thread{ public static Paint demo; public void run() { Display.getDefault().syncExec(new Runnable() { @Override public void run() { demo = new Paint(null); } }); demo.setBlockOnOpen(true); ForOneShuThread OneShu = new ForOneShuThread(); OneShu.start(); demo.open(); }}