import javax.swing.*;
import java.awt.*;
public class Grid extends JFrame{
public Grid(){
super("Pathfinding Algorithms");
setContentPane(new drawGrid());
setSize(1920,1080);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setUndecorated(true);
setVisible(true);
}
class drawGrid extends JPanel {
public void paintComponent(Graphics g){
g.setColor(Color.BLACK);
g.drawLine(0,50,1920,50);
}
}
public static void main(String[] args){
new Grid();
}
}
出于某種原因,每當我運行此代碼時都沒有顯示任何內容。我沒有收到任何錯誤,也沒有收到任何輸出訊息。我怎樣才能解決這個問題?
uj5u.com熱心網友回復:
按照教程學習 Swing 的基礎知識。Oracle 提供了一個免費的。
在那里,您將找到此示例代碼以與您的代碼進行比較。
在該示例代碼中,您會發現該main方法進行了此呼叫:
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
擺動線
每個 Swing 應用程式都有一個專用于 GUI 的執行緒,即評論中提到的事件調度執行緒 (EDT)執行緒。繪圖、使用滑鼠和鍵盤跟蹤用戶輸入、回應視窗拖動/調整大小以及所有其他螢屏上的作業都必須在專用于 Swing 的執行緒上執行。
相反,您的代碼在主執行緒上運行。
那invokeLater上面看到的呼叫是一個辦法讓你的GUI創建代碼的Swing執行緒上運行。所以你可以像這樣修改你的代碼:
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Grid() ;
}
});
但是,我建議您學習該教程和其他示例,以更好地使用 Swing。例如,通常最好避免在代碼片段中看到的建構式中做不必要的作業。并注意Andrew Thompson在評論中列出的問題。
順便說一句,Swing 完全受支持,但處于維護模式。
您可能需要考慮替代方案JavaFX ( OpenJFX )。 JavaFX 正在積極開發中,每六個月發布一次,與 Java 版本同步。發展是由LED膠子公司與甲骨文公司合作,作為一個子專案的OpenJDK專案。
相同的執行緒規則適用于 JavaFX,其中一個執行緒專用于 GUI。永遠不要從另一個執行緒訪問或操作 Swing 或 JavaFX/OpenJFX 中的 GUI 小部件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408904.html
標籤:
上一篇:JavaSwing中的聊天框區域
