相关疑难解决方法(0)

1/0是合法的Java表达式吗?

以下在我的Eclipse中编译得很好:

final int j = 1/0;
// compiles fine!!!
// throws ArithmeticException: / by zero at run-time
Run Code Online (Sandbox Code Playgroud)

Java的防止了许多"哑代码"从甚至在首位编译(如"Five" instanceof Number不编译),所以其实这甚至没有产生尽可能多的警告是非常令我感到诧异.当您考虑允许在编译时优化常量表达式这一事实时,阴谋会加深:

public class Div0 {
    public static void main(String[] args) {
        final int i = 2+3;
        final int j = 1/0;
        final int k = 9/2;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Eclipse中编译,上面的代码片段生成以下字节码(javap -c Div0)

Compiled from "Div0.java"
public class Div0 extends java.lang.Object{
public Div0();
  Code:
   0:   aload_0
   1:   invokespecial   #8; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0: …
Run Code Online (Sandbox Code Playgroud)

java divide-by-zero

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

为什么人们在事件队列上运行Java GUI

在Java中,要创建和显示新的JFrame,我只需这样做:

public static void main(String[] args) {
   new MyCustomFrameClass().setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

但是,我见过很多人这样做:

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MyCustomFrameClass().setVisible(true);
       }
    });
}
Run Code Online (Sandbox Code Playgroud)

为什么?有什么好处吗?

java swing multithreading jframe eventqueue

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

在AWT队列线程中调试异常

我正在开发一个Swing应用程序,其中包含执行自定义绘制的组件 当我在绘制代码中犯了一些错误并抛出异常时,情况很难调试.弹出窗口显示异常信息,而不是被调试器捕获.此外,线程似乎重新启动,并且由于编码错误的结果异常,它会一次又一次地显示.

当我很幸运地切换到调试器时(这很困难,因为越来越多的弹出窗口随着应用程序获取绘制请求而不断出现),调试控制台会向我显示异常信息,例如:

严重:线程中抛出未捕获的异常[AWT-EventQueue-0,6,main]

....堆栈如下

我的应用程序是用Scala编写的,我使用的是IntelliJ IDEA 14.我的未被捕获的主线程异常由调试器处理得很好(我已Uncaught exception启用Any exception断点启用Java Exception Breakpoints),但AWT线程中的异常不是.

我已经尝试过安装一个处理程序,如下所述我如何检测Java中全局抛出异常的时间?回答,但我的处理程序似乎没有被触发.

我想实现以下(按重要性顺序):

  1. 避免AWT线程在异常时重新启动,或者至少阻止弹出窗口显示
  2. 在调试器中处理未捕获的异常,而不是在控制台中打印

(注意:虽然这是Scala应用程序,但我认为Java的行为是相同的,因此Java标记).

java debugging scala awt intellij-idea

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

EDT和运行时异常

如果某个方法从EDT线程调用未经检查的异常会发生什么?它是否会阻止GUI的响应性或什么?谢谢

java swing

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