私のEclipseプラグインには、ProgressListenerを実装するViewPartがあります。私は私のデータプロットを表示し、完了したら私のprogressComplete()を呼び出すファイルからデータをロードするフレームを追加し始めます。これは正常に動作します。Eclipse ViewPartに新しいパネルが表示されない
public void createPartControl(Composite parent)
{
parentComposite = parent;
Composite composite = new Composite(parentComposite, SWT.EMBEDDED);
m_frame = SWT_AWT.new_Frame(composite);
String fileName = "/Users/fred/Documents/file.ipf";
startFileLoad(fileName, -1);
createActions();
}
ただし、ハードコードされたファイルを削除し、ユーザーがボタンからファイルを選択するようにしたいとします。表示
m_actionOpenDataFile = new Action()
{
public void run()
{
String fileName = "/Users/fred/Documents/file.ipf";
startFileLoad(fileName, -1);
}
};
m_actionOpenDataFile.setText("Open");
m_actionOpenDataFile.setToolTipText("Open file");
m_actionOpenDataFile.setImageDescriptor(ImageDescriptor.createFromURL(ic.getURL("file.png")));
アクションが実行され、ファイルがロードされ、このボタンを選択する、しかしパネル:私は(今のところ、ボタンは同じハードコードファイル名を呼び出して、)このボタンのアクションを使用していますデータはEclipse ViewPartに表示されません。誰もがこれがなぜそうであるか提案することができますか?アクションボタンを使用している場合
public void progressComplete(ProgressInfo info)
{
DataFile dataFile = (DataFile)info.getSource();
if(dataFile != null)
{
try
{
TData data = new TData(dataFile, this, "data_progress");
data.parsedFile();
DataRender dataRender = new DataRender(this, data);
DataPanel dataPanel = new DataPanel(data, dataRender);
dataRender.setPanel(dataPanel.getBufferPanel());
data.setAssociatedPanel(dataPanel);
data.addParserProgressListener(dataPanel);
m_frame.add(dataPanel);
、私はProgressInfoの一部としてm_frameとViewPartに合格しようとしているが、デバッグは、変数がスレッドによってアクセスすることができないことを私に伝えます。
ありがとうございます。あなたの提案から私は書いた:
m_actionOpenDataFile = new Action()
{
public void run()
{
new UIJob("load data")
{
public IStatus runInUIThread(IProgressMonitor monitor)
{
String fileName = "/Users/fred/Documents/file.ipf";
startFileLoad(fileName, -1);
return Status.OK_STATUS;
}
}.schedule();
}
};
これはまだ表示されません。アクションrun()はスレッドを作成し、これはUIスレッドを作成するか、UI以外のプロパティを継承していますか?
おかげで、私は最初の投稿にUIジョブを使用する私の試みを追加...所望の表示はまだ見えません。あなたの提案を正しく適用していますか? – Phil
あなたはまだ前に得たエラーを受け取りますか?私はあなたが 'dataRender.setPanel ...'と 'm_frame.add(dataPanel)'を呼ぶことを知っているので、以前にフレームに追加された他のコンポーネントはどうなるのでしょうか?あなたはそれらを削除しますか?また、コンポーネントのレイアウトを変更する必要があります(または、何らかの方法でリフレッシュする必要があるかもしれません)。 – sgibly
私はもう変数にアクセスエラーを取得しません。 dataPanelはm_frameに追加される最初のものなので、今は削除しても問題ありません。コンポジットにredraw()を追加し、フレームにrepaint()を追加しようとしましたが、データプロットはまだありません - アクションボタンの外で関数呼び出しを発行するときにデータプロットが与えられていることを確認しました。 – Phil