Java 无法显示库的JFrame

Java 无法显示库的JFrame,java,eclipse,swing,jframe,toast,Java,Eclipse,Swing,Jframe,Toast,对于我的Java应用程序,我想要类似于Android Toast的东西。为了与我的同事共享,并在将来重用该代码段,我创建了一个自己的Toast项目,作为一个可以导入的库 我对toast项目本身没有任何问题。事实上,当直接在Eclipse的主方法中进行测试时,它的工作方式与预期的一样 在得到积极反馈之后,我将其导出为库(jar),并将其导入到我的主项目的一个类中(有一个Swing GUI)。我调用了特定的方法,该方法应该显示toast,但什么也没有发生。没有错误消息,什么都没有。 我添加了一些pr

对于我的Java应用程序,我想要类似于Android Toast的东西。为了与我的同事共享,并在将来重用该代码段,我创建了一个自己的Toast项目,作为一个可以导入的库

我对toast项目本身没有任何问题。事实上,当直接在Eclipse的主方法中进行测试时,它的工作方式与预期的一样

在得到积极反馈之后,我将其导出为库(jar),并将其导入到我的主项目的一个类中(有一个Swing GUI)。我调用了特定的方法,该方法应该显示toast,但什么也没有发生。没有错误消息,什么都没有。 我添加了一些
println
,看看我是否达到了代码,我确实做到了什么。因此,应该执行从我的库中调用的方法,但不知为什么它没有执行。烤面包片是一个简单的、没有装饰的半透明的
JFrame
。因此,toast代码非常简单:

    // class extends JFrame
    public Toast(String msg, int x, int y, int width, int height, Font font, Color background, Color foreground) {

    setUndecorated(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setAlwaysOnTop(true);
    setBackground(new Color(0f, 0f, 0f, 1f / 3f));
    setBounds(x, y, width, height);
    contentPane = new ToastPane(background);
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    SpringLayout sl_contentPane = new SpringLayout();
    contentPane.setLayout(sl_contentPane);
    JLabel label = new JLabel(msg);
    label.setFont(font);
    label.setForeground(foreground);
    sl_contentPane.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.WEST, contentPane);
    sl_contentPane.putConstraint(SpringLayout.SOUTH, label, 85, SpringLayout.NORTH, contentPane);
    sl_contentPane.putConstraint(SpringLayout.EAST, label, 385, SpringLayout.WEST, contentPane);
    label.setHorizontalAlignment(SwingConstants.CENTER);
    sl_contentPane.putConstraint(SpringLayout.NORTH, label, 5, SpringLayout.NORTH, contentPane);
    getContentPane().add(label);
}
用于从外部(从我的主项目)显示toast的方法:

最后一个方法在一定的毫秒后处理Toast的JFrame:

private static void closeToast(int displayTime, Toast toast)
{
    final Timer timer = new Timer(displayTime, null);

    timer.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            toast.dispose();

        }
    });

    timer.start();
}
我的主要项目是通过以下方式为大家祝酒:

public void showToast()
{
    EventQueue.invokeLater(new Runnable(){
        public void run()
        {
            try
            {
            System.out.println("Going to show the toast!");
            Toast.showToast(message, x, y, width, height, font, background, foreground, displayTime);
            } catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    });
}
println
给了我反馈,我通过打印出
“将要展示土司!”
达到了行
Toast.showtoos(…)


有人知道为什么toast项目的主要方法是正确显示toast,而将其作为库导入则不行吗?

我发现并解决了这个问题

问题是在方法之前使用了
static
。将方法从
静态更改为
,稍微修改代码以适合删除
静态
-关键字


虽然直接在Toast项目的主方法中测试时,它运行良好,但另一方面,导入Toast项目的另一个项目没有正确显示Toast。原因:在类构造函数中设置字段,但试图通过静态方法显示toast。

我发现并解决了这个问题

问题是在方法之前使用了
static
。将方法从
静态更改为
,稍微修改代码以适合删除
静态
-关键字


虽然直接在Toast项目的主方法中测试时,它运行良好,但另一方面,导入Toast项目的另一个项目没有正确显示Toast。原因:在类构造函数中设置字段,但试图通过静态方法显示toast。

”。与Android toast类似。为了与同事共享并在将来重复使用该代码,我创建了我的toast项目。“我怀疑您是否可以创建基于Java应用程序的基于Android的项目。让它按预期工作。从一开始就创建一个Java项目&这样做。如果你引用了,请正确地执行。我写道“对于我的Java应用程序,我想要类似于Android Toast的东西”。这是一个基于Java的应用程序。正如我在文章中所说的,我的“Toast项目”是一个Java应用程序,带有未修饰的半透明JFrame(Swing)。它与Android Toast非常相似,因为它是一个黑色半透明的小盒子,里面有文本,它会在5秒钟内消失。我没有使用Android Toast。我创建了自己的“Java Toast”。因此,它从一开始就是一个Java项目。为了更快地获得更好的帮助,请发布or。虽然上面的代码可能不是SSCE,但它几乎是测试它所需的一切。整个JFrame部分甚至没有100个LOC。在我看来,它并没有那么长,即使看起来是这样。我将各个部分分开,简要说明每个部分的作用(创建框架、调用框架、关闭框架)。正如我所说的,我知道代码本身是有效的,所以通过复制它来尝试,将得到相同的结果。问题在于在另一个Java项目中重新使用该代码。顺便说一句:几秒钟前我就知道怎么解决了。这个问题很容易发现。”…类似于Android Toast。为了与我的同事分享并在将来重复使用该代码,我创建了我的Toast项目……”我怀疑你能否创建一个基于Android的Java应用程序项目。让它按预期工作。从一开始就创建一个Java项目&这样做。如果你引用了,请正确地执行。我写道“对于我的Java应用程序,我想要类似于Android Toast的东西”。这是一个基于Java的应用程序。正如我在文章中所说的,我的“Toast项目”是一个Java应用程序,带有未修饰的半透明JFrame(Swing)。它与Android Toast非常相似,因为它是一个黑色半透明的小盒子,里面有文本,它会在5秒钟内消失。我没有使用Android Toast。我创建了自己的“Java Toast”。因此,它从一开始就是一个Java项目。为了更快地获得更好的帮助,请发布or。虽然上面的代码可能不是SSCE,但它几乎是测试它所需的一切。整个JFrame部分甚至没有100个LOC。在我看来,它并没有那么长,即使看起来是这样。我将各个部分分开,简要说明每个部分的作用(创建框架、调用框架、关闭框架)。正如我所说的,我知道代码本身是有效的,所以通过复制它来尝试,将得到相同的结果。问题在于在另一个Java项目中重新使用该代码。顺便说一句:几秒钟前我就知道怎么解决了。这个问题很容易发现。
public void showToast()
{
    EventQueue.invokeLater(new Runnable(){
        public void run()
        {
            try
            {
            System.out.println("Going to show the toast!");
            Toast.showToast(message, x, y, width, height, font, background, foreground, displayTime);
            } catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    });
}