【问题标题】:Concerning Using Custom Fonts [Cannot make a static reference to the non-static method] [duplicate]关于使用自定义字体[无法对非静态方法进行静态引用] [重复]
【发布时间】:2013-05-13 07:28:20
【问题描述】:

我通常尽量不问我以前见过的问题,但这次不同。我一直试图让我的自定义字体工作,但每当我尝试在方法中使用它时,我都会收到错误“无法对非静态方法进行静态引用”。我知道这意味着什么,但我不知道如何解决它。这是示例-

import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.io.InputStream;

public class AddFont extends MainFrame{
public void createFont() throws Exception {

InputStream telegraficoFontAdd = AddFont.class.getResourceAsStream(FONT_PATH_TELEGRAFICO);
    Font telegraficoFont = Font.createFont(Font.TRUETYPE_FONT,telegraficoFontAdd);
    telegraficoFont = telegraficoFont.deriveFont(Font.PLAIN,20);
    GraphicsEnvironment ge =
        GraphicsEnvironment.getLocalGraphicsEnvironment();
    ge.registerFont(telegraficoFont);
    }
}

这是我的 AddFont 类文件,这是我的 MainFrame 的 sn-p -

      public static void main(String[] args) {
  javax.swing.SwingUtilities.invokeLater(new Runnable() {
     public void run() {
        try {
            AddFont addFont = new AddFont();
            addFont.createFont();
        } catch (Exception e) {
            e.printStackTrace();
        }
        createGUI();

     } //public void run() Closing
  });
}

我如何找到在静态对象中使用方法类的方法,因为我有一长串需要更改字体的按钮? 还是有一些我必须做的变通办法?

和往常一样,如果您对此投反对票,请告诉我原因,以便我知道如何改进。希望这被视为 SSCCE。

编辑 - 在我的 MainFrame 中更改了我的主要方法,现在我收到错误 -

java.io.IOException: Problem reading font data.
at java.awt.Font.createFont(Unknown Source)
at AddFont.createFont(AddFont.java:11)
at MainFrame$1.run(MainFrame.java:107)

(我的 AddFont 文件中的第 11 行是这样的 -

  Font telegraficoFont = Font.createFont(Font.TRUETYPE_FONT,telegraficoFontAdd);

我的 MainFrame 的第 107 行是

 addFont.createFont();

【问题讨论】:

  • “希望这被认为是一个 SSCCE。” 一个 SSCCE 是一个源文件,而不是一个源文件和一个代码 sn-p。既然我在这里.. 1) 对代码块使用一致且合乎逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。 2) 源代码中永远不需要超过一行空白。
  • AddFont.createFont();
  • 致 Ravi Tridedi,我知道问题出在哪里。但我的主要方法是静态的。我想知道是否有一种方法可以更改字体类以使用静态方法,而无需更改我的所有方法/类。对于 Andrew Thompson,我将尝试编辑我的帖子,使其只有一个文件,而不是 2。createGUI() 下的两个空白点赞;我从来没有编辑过是偶然的,对不起。
  • @Hathor,为您的班级创建一个Object,然后调用方法createFont()。查看答案。
  • @RaviTrivedi 我对我的主要帖子进行了编辑,您可以看看我的问题吗?

标签: java fonts awt


【解决方案1】:

如果您打算使用您的 Class 名称调用您的函数,则此函数 public void createFont() 需要是静态的。

设为public static void createFont()

如果您不想使用static,那么只需创建您的班级的Object,然后调用如下:

AddFont addFont = new AddFont();
addFont.createFont();

【讨论】:

    猜你喜欢
    • 2014-06-08
    • 2014-11-19
    • 1970-01-01
    • 2021-08-31
    • 2011-06-25
    相关资源
    最近更新 更多