2013-05-18 25 views
2

我通常不會提出以前見過的問題,但這是不同的。我一直試圖讓我的自定義字體正常工作,但每當我嘗試在方法中使用它時,我都會收到錯誤「無法對非靜態方法進行靜態引用」。我知道這意味着什麼,但我不知道如何解決它。這裏的例子 -關於使用自定義字體[無法對靜態方法進行靜態引用]

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類文件,這裏是我的大型機片段 -

 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。

編輯 - 改變了我的主要方法,在我的主機,現在我得到的錯誤 -

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) 

(11號線在我的AddFont文件是這樣的 -

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

和我的主機107線是

addFont.createFont(); 
+0

*「希望這被認爲是一個SSCCE」 *一個SSCCE是一個源文件,而不是一個源文件和一個代碼片段。因爲我在這裏.. 1)使用一致的邏輯縮進代碼塊。代碼的縮進旨在幫助人們理解程序流程。 2)源代碼中絕不需要空白的一行空格。 –

+0

'AddFont.createFont();'< - 您正在對非靜態方法進行靜態引用。解決這個問題和你的g2g。 – Perception

+0

對於Ravi Tridedi,我知道問題出在哪裏。但我的主要方法是靜態的。我想知道是否有方法可以改變字體類來使用靜態方法,而不必更改所有的方法/類。 對安德魯湯普森,我會嘗試編輯我的文章,所以它只是一個文件,而不是2. createGUI()下的兩個空白喜歡;我從來沒有編輯過是偶然的,對不起。 – Hathor

回答

1

此功能public void createFont()必須是靜態的,如果你打算打電話給你功能使用您的Class名稱。

讓它public static void createFont()

如果你不想使用static然後只需創建類的Object,然後如下呼籲:

AddFont addFont = new AddFont(); 
addFont.createFont(); 
相關問題