小编Vin*_*igh的帖子

为什么在使用 System L&F 时 JMenu 无法正确呈现?

错误报告

这已被确认为错误。你可以在这里跟踪它:

https://bugs-stage.openjdk.java.net/browse/JDK-8258934

背景

  • 除了我在 MCVE 中发布的代码之外,没有其他代码在运行;运行此程序时没有其他 JVM 处于活动状态(尽管我认为这无关紧要)。

  • 我没有安装任何自定义系统 UI 的程序。

目标环境

Java 1.8.0_201
Windows 10 Home Edition
Run Code Online (Sandbox Code Playgroud)

测试过的 JDK

  • JDK 8 到 JDK 15

由第三方测试

  • George Z. - Windows 7 -可以重现错误
  • David Kroukamp - Windows 10,JDK 10 -可以重现错误
  • camickr - Windows 10,JDK 11 -可以重现错误
  • Canvas (Discord) - Windows 10 -可以重现错误
  • Pawnee (Discord) - macOS Catalina 10.15.7, JDK 15 -无法重现错误

MCVE

import javax.swing.*;

public class Demo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(Demo::launchUI); …
Run Code Online (Sandbox Code Playgroud)

java graphics swing look-and-feel jmenu

5
推荐指数
0
解决办法
135
查看次数

你为什么要用JNI在AWT的画布上画画?

我对JNI很陌生,在调查JNI时我偶然发现了这个:

本机代码不仅可以与Java接口,还可以在Java Canvas上绘制,这可以通过Java AWT Native Interface实现

具体/可用的功能是否有特定原因?它是否会改善Windows系统的处理时间?请详细说明为何以及何时使用此类功能

java java-native-interface java-canvas

4
推荐指数
1
解决办法
443
查看次数

编写一个不能过于频繁调用的方法的正确方法是什么?

假设我有一个类,我不希望每五秒钟调用一次以上的方法(例如,它会查询将过于频繁发送查询的应用程序列入黑名单的Web服务器).实现这个的最佳方法是什么?

我想出的解决方案是让方法在每次通过调用运行时在静态成员变量中存储时间戳System.currentTimeMillis(),并在执行时间敏感代码之前检查此时间戳.但是我很紧张,有些突发事件我没有预见到,所以我想看看是否有一种标准的方法来解决这个问题.

java

4
推荐指数
1
解决办法
135
查看次数

@Inherited Java注释

Herbert Schildt在他关于Java的书中提到过,

@Inherited是一个标记注释,只能用于另一个注释声明.此外,它仅影响将在类声明上使用的注释.@Inherited导致超类的注释被子类继承.

因此,当为一个特定的注释的请求到子类制成,如果该注释中不存在的子类,那么它的超类被检查.如果该注释存在于超类中,并且如果注释了@Inherited该注释,则将返回该注释.

我很清楚注释不是继承的.例外是注释,其声明用注释标注@Inherited.

我已经明白了注释的其余部分,其中包括java.lang.annotation中:@Retention,@Documented,和@Target.和其他三@Override,@Deprecated@SuppressWarnings.

@Inherited注释方面我有点困惑.有人可以通过一个简单的foob​​ar示例演示它吗?

其次,在StackOverflow上经历一个关于此的问题,我遇到了这个,

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) @Inherited
public @interface Baz { 
           String value(); }

public interface Foo{
    @Baz("baz") void doStuff();
}

public interface Bar{
    @Baz("phleem") void doStuff();
}

public class Flipp{
    @Baz("flopp") public void doStuff(){} 
}
Run Code Online (Sandbox Code Playgroud)

@Inherited注释在注释时有什么用处@interface Baz

请不要在使用Spring Framework的注释的上下文中解释我,我不熟悉它.

java inheritance annotations

4
推荐指数
1
解决办法
3196
查看次数

getter 违反了得墨忒耳定律吗?

想象有一种GameState类型使用 a GameContext(通过process方法):

abstract class GameState {
    public abstract void process(GameContext context);
}
Run Code Online (Sandbox Code Playgroud)

GameContext 将包含诸如玩家、商店等游戏必需的内容。

一个国家将获得它所需要的东西:

class CombatState extends GameState {
    public void process(GameContext context) {
        Player player = context.getPlayer();

        if(player.isAlive()) {
            //...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该语句player.isAlive()可以重写为context.getPlayer().isAlive()

我的问题

得墨忒耳法则规定,物体只能与直系亲属相互作用。这是否违反原则,如何解决?

对于要动态处理的每个状态,形式参数必须为所有可能的状态所接受。这使得严格传递对象所需的内容变得困难,这就是每个状态从“主要来源”获取其所需内容的原因。我觉得主要来源的内聚力非常低,因为 aShopState需要与 a 不同的数据CombatState

java getter law-of-demeter

4
推荐指数
1
解决办法
1116
查看次数

Observable中的通知并行性

我有以下观察

IObservable<Work> observable = SomeMethodToGetWorkToDo();
Run Code Online (Sandbox Code Playgroud)

每次OnNext调用上面的内容时,我都需要在一个单独的线程中完成工作.每项工作都需要很长时间才能完成,所以我不能让Work队列中的其他项目等待有足够的系统资源.

我认为ObserveOn可以解决我的问题,但是当我运行几个Console.WriteLine调用来查看线程ID时,我看到每个通知调用都有相同的线程ID.

我怎样才能确保并行性OnNext

c# multithreading system.reactive

4
推荐指数
1
解决办法
49
查看次数

如果在Java中关闭socket,是否需要关闭流?

我听说调用“socket.close()”会自动关闭它的流。

会:

public void close() {
     try {
          socket.close();
     }catch(IOException e) { }
}
Run Code Online (Sandbox Code Playgroud)

具有与以下相同的效果:

public void close() {
     try {
          outputstream.close();
          inputstream.close();
          socket.close();
     }catch(IOException e) { }
}
Run Code Online (Sandbox Code Playgroud)

如果您的目标是完全关闭套接字?

java sockets networking stream

3
推荐指数
1
解决办法
2105
查看次数

尝试使用扫描仪时"无法解析为某种类型"

当我运行以下代码时,它显示错误,扫描仪无法解析键入.我检查了jre已安装且版本为1.7我还需要检查什么?请帮忙.

public class student { 

String name;
int rollno;
public void get(String nm, int rno) 
{ name=nm;
rollno=rno;
}
public void  display()
{  System.out.println("Name of student is :" +name);
System.out.println("Roll no of student is :" +rollno);
}  
public static void main(String args[])
{ 
int i ;
int r1;
String n1;
student obj[]= new student[10];
Scanner sc=new Scanner(System.in);
for(i=0;i<10;i++)
{
obj[i]= new student();
}

for(i=0;i<10; i++)
{  System.out.println("Enter name:");
n1=sc.next();
sc.nextLine();
System.out.println("Enter roll no :");
r1=sc.nextInt();


obj[i].get(n1,r1) ;
obj[i].display() ;
} …
Run Code Online (Sandbox Code Playgroud)

java eclipse java.util.scanner

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

如何创建自定义JVM启动器?

有一个" 如何在没有主要方法的情况下启动应用程序 "的问题的历史,大多数陈述类似于" 你不能 "的东西.我注意到现在只需通过扩展即可启动JavaFX应用程序Application.我一直在使用类似的方法Application.launch(),但在这种情况下我总是将主要方法视为样板代码.所以我开始再次寻找答案.

我发现这个答案将我们与我们可以学习创建自己的JVM发射器的地方联系起来,但遗憾的是文章不再存在.我花了很长时间寻找任何可能暗示我应该做什么的事情,但没有结果.

我的问题

如何创建自定义JVM启动程序以根据正在扩展的内容启动应用程序?例如,想象一个具有1个声明类的项目:

class MyApplcation extends App {

} 
Run Code Online (Sandbox Code Playgroud)

由于它扩展了App,因此无需启动项目的主要方法.这不是问题,尽管这是我的目标.问题是有人如何创建自定义JVM启动器?

我的猜测是它会涉及使用某种基础,给我们某种骨架,但我不知道在哪里可以找到这样的东西.

java jvm launcher

3
推荐指数
1
解决办法
1401
查看次数

为什么Scanner使用Scanner#ioException()而不是抛出异常?

这有什么好处/垮台吗?

通常,从流中读取时会抛出异常:

try {
    inputStream.read();
}catch(IOException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但是当使用a时Scanner,你不会被迫处理异常.相反,如果抛出一个,你会使用Scanner#ioException().

我知道Scanner不是一个流,而不是一个解析数据的tokenizer,如果需要,但为什么它处理它的异常不像其他涉及IO的行为?我什么时候应该以这种方式处理异常?

java ioexception java.util.scanner

2
推荐指数
1
解决办法
2425
查看次数