簡體   English   中英

Java repaint()在瀏覽器中不起作用

[英]Java repaint() Doesn't Work In Browser

我用Java制作了一個游戲,當我在Eclipse中運行它時,它沒有任何問題。 一切看起來都很不錯,並且可以有效完成(至少直到我提出其他相關要求為止)。 因此,我一直試圖將其放置在我的網站上,但是每當我在瀏覽器中運行游戲時,我都會得到一個白屏,盡管檢查Java控制台不會顯示任何錯誤。 我設法將問題縮小到屏幕上的繪畫。 我有一個計時器,可以運行游戲並使事情發生。 最后,它調用repaint()方法。 在Eclipse中,這很好用,但是在瀏覽器中,什么也沒有發生。

這是相關的代碼(所有代碼都在名為FinalProject的主類中):

public class FinalProject extends JApplet implements ActionListener,
                          KeyListener, MouseListener, MouseMotionListener {
    public void init(){
        //...initialize program

        System.out.println("game started");
    }

    /**
     * A method called every so often by a timer to control the game world.
     * Mainly calls other functions to control objects directly, but this 
     * is used as the only timer, which also calls repaint() at it's end.
     */
    private void runGame(){
        //...Run game and do important stuff

        //This Draws The Screen
        System.out.println("about to paint");
        repaint();
    }

    public void paint(Graphics g){
        System.out.println("painting");

        //...paint screen
    }

    public void update(Graphics gr){
        System.out.println("updating");
        paint(gr);
    }
}

runGame()由計時器調用。 在Eclipse中,輸出為:
游戲開始
繪畫
繪畫
即將油漆
繪畫
即將油漆
繪畫
即將油漆
繪畫
...

在瀏覽器中執行此操作時(直接在我的計算機上脫機運行。所有瀏覽器也存在相同的問題),控制台顯示:
...(正在加載東西)
游戲開始
基本:Applet初始化
基本:啟動小程序
基本:完成性能匯總
基本:使小程序可見
基本:Applet開始
基本:已啟動告訴客戶小程序
即將油漆
即將油漆
即將油漆
...

我目前不知道還能嘗試什么。 盡管我付出了很多努力,但我仍然不太完全了解repaint()的作用,我所知道的是它最終將調用update()和paint()。 除非瀏覽器似乎沒有發生這種情況。 我將Windows 7 64x與Java Version 7 Update 5一起使用。在此先感謝您的幫助。

原來,問題出在刪除菜單欄。 不久前我發現了一些代碼,該代碼將從程序中刪除菜單欄,並且可以正常工作。 但是,當放置在瀏覽器中時,似乎阻止了重新繪制。 我不知道為什么重新粉刷由於刪除菜單欄而中斷,但顯然可以。

我使用過的代碼(在init()中):

Frame[] frames = Frame.getFrames();
for (Frame frame : frames){
    frame.setMenuBar(null);
    frame.pack();
}

此代碼確實刪除了所需的菜單欄,但每當程序聯機時也會分解該程序。 刪除此問題已解決。 幸運的是,菜單欄無論如何都不會在線顯示,因此刪除這些代碼不會給您帶來太多損失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM