Java 线程JFrame需要更新JTextPane

Java 线程JFrame需要更新JTextPane,java,multithreading,swing,jframe,jtextpane,Java,Multithreading,Swing,Jframe,Jtextpane,我有以下代码。当结果变量更改时,我需要更新JTextPane对象。结果变量正确更改,已对其进行测试。此代码用作线程。我真的不知道如何解决它,也许任何一个eventlistener都会很好 public class GeneralShopFrame implements Runnable, Observer{ private double result = 0 ; JFrame jf = new JFrame(); JPanel buttonPanel = new JPan

我有以下代码。当结果变量更改时,我需要更新JTextPane对象。结果变量正确更改,已对其进行测试。此代码用作线程。我真的不知道如何解决它,也许任何一个eventlistener都会很好

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);    
    }
}
你应该打电话给setText。。。在更新方法内的JTextPane上,注意确保在Swing事件线程上调用它,例如,在使用SwingUtilities.invokeLater在事件线程上排队的Runnable中调用它。。。。e、 g

但是您声明它不起作用,并且您的代码显示了原因:您正在上面的run方法中创建另一个GeneralShopFrame对象,一个未显示的对象,因此,您正在向错误的GeneralShopFrame对象通知对可观察对象的更改。不要这样做。相反,可以将当前GeneralShopFrame对象或此对象传递到此调用:

gst.addObserver(this);  
你应该打电话给setText。。。在更新方法内的JTextPane上,注意确保在Swing事件线程上调用它,例如,在使用SwingUtilities.invokeLater在事件线程上排队的Runnable中调用它。。。。e、 g

但是您声明它不起作用,并且您的代码显示了原因:您正在上面的run方法中创建另一个GeneralShopFrame对象,一个未显示的对象,因此,您正在向错误的GeneralShopFrame对象通知对可观察对象的更改。不要这样做。相反,可以将当前GeneralShopFrame对象或此对象传递到此调用:

gst.addObserver(this);