小编Hải*_*ong的帖子

paintComponent是如何工作的?

这可能是一个非常无聊的问题.我刚刚开始学习Java

我不明白paintComponent方法的操作.我知道如果我想画一些东西,我必须覆盖paintComponent方法.

public void paintComponent(Graphics g)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

但它何时被称为?我从来没有看到像"object.paintComponent(g)"这样的东西,但它仍然是在程序运行时绘制的.

什么是Graphics参数?这个从哪里来?调用方法时必须提供参数.但正如我之前所说,似乎永远不会明确地调用此方法.那么谁提供这个参数呢?为什么我们必须将其转换为Graphics2D?

public void paintComponent(Graphics g)
{
    ...
    Graphics2D g2= (Graphics2D) g;
    ...
}
Run Code Online (Sandbox Code Playgroud)

java swing paintcomponent

61
推荐指数
2
解决办法
12万
查看次数

如何让Play游戏服务在启动时不自动登录?

谷歌提供BaseGameUtils图书馆,并建议我们扩展它BaseGameActivity.但是,该课程使游戏在游戏开始时自动登录.如果玩家不想或不能连接到他的Google帐户,那么在游戏开始这可能非常耗时.

所以我不想要这个功能.相反,我想提供一个登录按钮.只有当他点击该按钮时才能连接播放器.从那时起,每次玩家开始游戏时,他都会自动连接到他的Google帐户,而无需点击任何按钮.我怎样才能做到这一点?

android google-play-services google-play-games

28
推荐指数
2
解决办法
3万
查看次数

如何从Intellij中的git存储库中删除文件

我在git中有一个跟踪文件,但现在我不想再跟踪它了(我不希望它出现在下一次提交中,但我仍然希望将它放在文件夹中).

Changes工具窗口中,我已将该文件设置为但ignoredConfigured Ignored Files某种程度上,当我更改该文件时,更改仍显示在更改列表中?

git intellij-idea

14
推荐指数
1
解决办法
1万
查看次数

10
推荐指数
2
解决办法
569
查看次数

将libgdx游戏配置为"专为平板电脑设计"

我已经通过libgdx构建了一个游戏并将apk文件上传到开发者控制台.但是,它说

您的制作APK需要符合以下条件:

  • 您的布局应该利用平板电脑上的可用空间

那么我应该对布局做出哪些改变?因为据我所知,在libgdx中,布局与游戏完全无关.

layout android tablet libgdx google-play

9
推荐指数
1
解决办法
1330
查看次数

为什么我不能为同一个包名创建多个OAuth 2.0客户端ID?

这里的教程中,它表明完全可以为同一个包名使用两个OAuth 2.0客户端ID.

您应该创建两个客户端ID,一个具有发布证书指纹,另一个具有调试证书指纹.确保为两者使用相同的包名称.这允许Play游戏服务识别来自您使用任一证书签名的链接APK的呼叫

于是,我按照上面的链接教程:第一去Game ServiceDeveloper Console,Add a new Game.然后我添加了一个Linked app这个游戏,它需要我创建一个OAuth 2.0客户端ID.使用我的发布密钥的SHA1创建第一个客户端ID后,我找不到任何按钮来创建另一个客户端ID.所以我转到Cloud Developer Console,发现我可以在APIs & auth- > 下创建第二个客户端ID Credentials.我使用我debug.keystore的SHA1作为第二个客户端ID.然后我用调试密钥和释放密钥编译和测试我的示例游戏.

但是,在运行应用程序并尝试登录后,结果是只接受使用发布密钥的应用程序(使用第一个客户端ID),而使用调试密钥的应用程序(使用第二个客户端ID)不是公认.

然后我尝试在Cloud Developer Console中删除我的发布密钥的客户端ID(以便调试密钥的客户端ID仍然是那里唯一的客户端ID)并再次测试我的应用程序.这次,接受使用调试密钥的应用程序,并且当然不接受使用释放密钥的应用程序.

这是否意味着我无法为同一个包名创建多个OAuth 2.0客户端ID?

android oauth google-play-services

9
推荐指数
1
解决办法
4236
查看次数

wait/notify和wait/interrupt有什么区别?

synchronized (Foo.class) {
    while (someCondition) {
        try {
            Foo.class.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎这个线程在其他一些线程调用时interrupt()notify()在此线程上都会唤醒.这两者有什么不同吗?

- 编辑 -

我知道一个用于通知一个对象,另一个用于中断一个线程.但是这两者都导致了相同的结果,也就是说,这个线程被唤醒了,所以我想问的是这两种情况的后果是如何相互不同的.

java multithreading notify wait interruption

9
推荐指数
1
解决办法
6698
查看次数

一旦SpriteBatch实例不再使用,它​​是否需要调用dispose()?

根据这篇文章,SpriteBatch实例需要在dispose()不再需要时调用.然而,当我查看一些libgdx的官方例子,如Pax Britannica和Super Jumper时,我发现他们从不打电话SpriteBatch.dispose().这是为什么?

libgdx

7
推荐指数
1
解决办法
1721
查看次数

如何检索'try'块中的抑制异常?

从Java 7开始,我们可以使用try-with-resources语句:

static String readFirstLineFromFile(String path) throws IOException {
    try (BufferedReader br =
                   new BufferedReader(new FileReader(path))) {
        return br.readLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果br.readLine()br.close() 两个抛出异常,readFirstLineFromFile将从try块抛出异常(异常),并且将禁止来自try-with-resources语句的隐式finally块(异常)的异常.br.readLine()br.close()

在这种情况下,我们可以通过try块的异常调用方法来隐式finally块中检索抑制的异常,如下所示:getSuppresed

try {   
    readFirstLineFromFile("Some path here..."); // this is the method using try-with-resources statement
}   catch (IOException e) {     // this is the exception from the try block  
    Throwable[] suppressed = e.getSuppressed();
    for …
Run Code Online (Sandbox Code Playgroud)

java exception

6
推荐指数
1
解决办法
1274
查看次数

指针索引的含义是什么?它可以改变哪些方式?

我知道可以用这种方式检索指针索引

int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
Run Code Online (Sandbox Code Playgroud)

它在某些方法中用作参数,如event.getPointerId(int pointerIndex)event.getX(int pointerIndex)

但我不明白它的意义是什么,以及它如何从一个事件改变到另一个事件

android multi-touch

6
推荐指数
1
解决办法
3646
查看次数