私はEclipseで奇妙な問題に直面しており、多くの検索を行った後でも、この点に関してバグは見つかりませんでした. 私の問題は 、 FontMetrics Class の handle フィールドにあります。API はプラットフォームに依存しているため、私ができることはあまりありません。問題は次のようなものです。
draw2d ウィジェットと接続で作成されたいくつかの図を Word と PDF にエクスポートする必要があります。これまで、エクスポート機能は、ダイアグラムが描画されるエディタのツールバーへのアクションとして利用できました。それはうまくいっています。FigureCanvas を SWT 画像にペイントし、それをファイルに保存するだけです。私が利用できる API があり、それを Word/PDF に挿入します。今、私はそれをオフラインにする必要があります。つまり、実際に画面に図を描画する必要はありません。私はこれを達成するために次のようなことをしました:
Job job = new Job("Making DFD for " + data.getName()) {
@SuppressWarnings("unchecked")
@Override
protected IStatus run(IProgressMonitor monitor) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Composite composite = new Composite(shell, SWT.NONE);
try {
imageFolder = new File(tempFolder + IOUtils.FILE_SEPARATOR +
"dfd-" + (new Date()).getTime());
composite.setLayout(new FillLayout());
final FigureCanvas canvas = new FigureCanvas(composite);
ArrayList<DFDFigureData> figureData = renderer.getDfdFigureDatas();
final DFDMaker3 dfdMaker;
dfdMaker = new DFDMaker3(canvas, "", figureData, null, false);
Logger.println("Shell Size:", shell.computeSize(-1, -1, true));
display.syncExec(new Runnable(){
public void run() {
dfdMaker.makeDFD();
shell.setSize(-1, -1);
dfdMaker.selectNode(-1, display);
}
});
Logger.println("Shell Size:", shell.computeSize(-1, -1, true));
/* Image Export Stuff Goes here */
return Status.OK_STATUS;
} catch (Exception e) {
Logger.println("Error in DFD Creation Job", e.toString());
return Status.CANCEL_STATUS;
} finally {
composite.dispose();
shell.dispose();
display.dispose();
}
}
};
job.setPriority(Job.SHORT);
job.schedule();
これを初めて実行すると、両方の Log ステートメントが良いことを教えてくれます。
シェルサイズ::: ポイント {72, 98} シェルサイズ::: ポイント {1216, 524}
しかし、アプリケーションを閉じずに同じコードを 2 回実行すると、次のようになります。
シェルサイズ::: ポイント {72, 98} シェルサイズ::: ポイント {1216, 1945541082 }
シェルの高さの値が大きいと、すべてが台無しになります。激しいデバッグの後、私が使用している 2 回目の FlowPage が、Font の降下に対して間違った値を取得することがわかりました。メソッドFontMetrics.getDescent()はランダムな大きな値を返します。
これをどのように進めるべきか正確にはわかりません。最初に使用したすべてのリソースを破棄しました。Display、Shell、Composite、Canvas、さらには GC と SWTGraphics です。バグかどうか教えてもらえますか?そうでない場合、どうすればここで問題を見つけることができますか?