无法从Eclipse运行JavaFx代码

3

我在oracle网站上找到了这段代码,但是我无法通过Eclipse启动它,它显示“无法启动”。我已经安装了JDK 8,但它不起作用...

请问有人有解决方案吗?:p

public class SwingFX extends Application {

@Override
public void start (Stage stage) {
    final SwingNode swingNode = new SwingNode();

    createSwingContent(swingNode);

    StackPane pane = new StackPane();
    pane.getChildren().add(swingNode);

    stage.setTitle("Swing in JavaFX");
    stage.setScene(new Scene(pane, 250, 150));
    stage.show();
    }

private void createSwingContent(final SwingNode swingNode) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            swingNode.setContent(new JButton("Click me!"));
        }
    });
}
}

链接到我找到代码的网站:https://docs.oracle.com/javafx/8/embed_swing/jfxpub-embed_swing.htm

此处提供了一个链接,可以访问Oracle公司的官方文档,其中包含有关如何在Java Swing应用程序中嵌入JavaFX内容的信息。

先问一个愚蠢的问题:编译时有没有出现错误? - Wormbo
1
没有主方法! - Pascal
2
在Java 8中,您不需要一个main方法。 - James_D
@James_D,更正一下,它不是Java 8,而是JavaFx应用程序,不需要主方法。 - Blip
1
@Zaheylu Eclipse无法自动检测到它,但是如果您进入“运行配置”并为其设置运行配置,则实际上可以启动它。 - James_D
显示剩余6条评论
3个回答

5

在Java 8中,即使一个javafx.application.Application子类没有main(String[] args)方法,也可以直接启动它。问题是当前版本的Eclipse不会检查这一点,并且(至少在上下文菜单中)仅检查main(...)方法是否存在。因此,为了让它能够从Eclipse中运行,您可以手动添加main(...)方法:

public class SwingFX extends Application {

    @Override
    public void start(Stage stage) {
        // ...
    }

    public static void main(String[] args) {
        launch(args);
    }
}

或者,您可以直接指示Eclipse从“运行配置”向导运行它。选择您的SwingFX类,从菜单中选择“运行”,然后选择“运行配置”。在“Main”选项卡中确保正确的类名出现(即“SwingFX”),然后按下“运行”按钮。

一旦您设置好了,工具栏上的绿色“运行”按钮(在Java透视图中)将再次运行应用程序,直到您运行其他内容。


我尝试了你的解决方案,它有效!谢谢!:) - Gael Do Manh
1
另一个技巧是添加主方法并调用lunch方法一次,然后将主方法注释掉。之后,即使没有主方法,Eclipse也会自动设置运行应用程序。 - user8341360

2

Eclipse在Java 8中存在一个问题,无法检测到JavaFX应用程序可以在没有Java main方法的情况下启动 - 解决方法是自己添加。

public static void main(String[] args) {
    launch(args);
}

1
或者您可以进入“运行”->“运行配置”,自己设置一个运行配置。 - James_D

-1

你还没有编写主方法,因此JVM不知道起始点在哪里。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接