Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t使用JavaFX在可运行模式下对接口进行更改_Java_Multithreading_Javafx_Runnable - Fatal编程技术网

Can';t使用JavaFX在可运行模式下对接口进行更改

Can';t使用JavaFX在可运行模式下对接口进行更改,java,multithreading,javafx,runnable,Java,Multithreading,Javafx,Runnable,在我的程序中,我运行一个单独的脚本,我使用并发来运行单独的脚本,因此使用一个实现Runnable的类 当单独的线程运行时,我希望有一个与线程未运行时不同的图形,以便用户可以在按下按钮后查看是否发生了什么 线程的功能运行良好,只是在线程完成后,当我尝试从线程内部更改图形时,按钮图形没有更改 与问题相关的代码: 在课堂上: downloadSongs.setOnMousePressed(new EventHandler<MouseEvent>() {

在我的程序中,我运行一个单独的脚本,我使用并发来运行单独的脚本,因此使用一个实现Runnable的类

当单独的线程运行时,我希望有一个与线程未运行时不同的图形,以便用户可以在按下按钮后查看是否发生了什么

线程的功能运行良好,只是在线程完成后,当我尝试从线程内部更改图形时,按钮图形没有更改

与问题相关的代码:

在课堂上:

        downloadSongs.setOnMousePressed(new EventHandler<MouseEvent>() {  
        @Override
        public void handle(MouseEvent event) { 
            
            try{
                if(dnld.isAlive()==true){
                    
                }else{
                    dnld = new Thread(new DownloadThread());
                    dnld.start();
                }
            }catch(Exception e){
                dnld = new Thread(new DownloadThread());
                dnld.start();
            }

不能在应用程序线程之外更改用户界面。所有用户界面代码都会检查,如果没有,则抛出异常

您需要调用以确保在应用程序线程上执行更新,或者实现


要了解JavaFX中并发性的更多信息,您可以查看。

我从线程中获取了代码,并将其放入类中的任务中,在该类中,接口中的所有内容都可以更改。但是图形仍然没有改变,我收到一个错误?我所要做的就是在任务成功时添加一个事件。这在本手册的示例1.5中
public class DownloadThread implements Runnable{
    public void run(){
        *function of run which works*
        try {
             *more code*
            } catch (Exception e) {
                            ErrorPopUp.Display();
                            //add in the red line around it being added/taken away
                            Download.downloadSongs.setGraphic(Download.download);
        }
        Download.downloadSongs.setGraphic(Download.download);