次のコードがあります。結果変数が変更されたときにJTextPaneオブジェクトを更新する必要があります。結果変数が正しく変更され、テストされます。このコードはスレッドとして機能します。私は本当にどのようにそれを解決するためのアイデアを持っていない、多分任意のeventlistenerはそこに良いだろうか?あなたはSwingUtilities.invokeLater(...)
を使用してイベントスレッドにキューイングされているのRunnableの中から、例えば、それはSwingのイベントスレッド上で呼び出されたことを確認するために世話をして、更新方法の中からJTextPaneの上setText(...)
を呼び出す必要がありスレッドJFrameはJTextPaneを更新する必要があります
public class GeneralShopFrame implements Runnable, Observer{
private double result = 0 ;
JFrame jf = new JFrame();
JPanel buttonPanel = new JPanel();
JTextPane jtp = new JTextPane();
@Override
public void run() {
String[] tab = { "Data_0.txt", "0" } ;
GeneralShopThread gst = new GeneralShopThread(tab);
Runnable r = gst;
Thread t = new Thread(r);
t.start();
GeneralShopFrame gsf = new GeneralShopFrame();
gst.addObserver(gsf);
jtp.setText("Current value of result is " + result); //I NEED UPDATE IT
buttonPanel.add(jtp);
buttonPanel.setPreferredSize(new Dimension(400, 200));
jf.add(buttonPanel, BorderLayout.CENTER);
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public GeneralShopFrame(String[] args) {
}
@Override
public void update(Observable o, Object arg) {
result = (double) arg;
System.out.println(makespan);
}
}
ありがとうございました!私はそれを解決するために数時間を失った.. – marylin17