【问题标题】:Why this code don't work on CodeEval?为什么这段代码在 CodeEval 上不起作用?
【发布时间】:2015-04-17 15:50:55
【问题描述】:

因此,下面的代码将序列号作为 txt 文件中的参数,可以在我的计算机上正常工作。每个数字都写在一行上。所以,这里是代码:

import java.io.*;
import java.util.*;
import javax.swing.JOptionPane;

public class Main {
    public static int fiboComputingAct(int serial){
        if (serial == 1 || serial == 2) {
            return 1;
        }else{
            int nMinus2 = 1;
            int nMinus1 = 1;
            int result = 0;
            for (int i = 3; i <= serial; i++){
                result = nMinus1 + nMinus2;
                nMinus2 = nMinus1;
                nMinus1 = result;   
            }
            return result;
        }   
    }

    public static void main (String [] args){
        try {
            File textFile = new File("texts/1.txt"); //"texts/1.txt" will be replaced on args[0] in codeeval
            Scanner scan = new Scanner(textFile);
            int fiboSerialNumber;
            while (scan.hasNextLine()) {
                fiboSerialNumber = scan.nextInt();
              System.out.println(fiboComputingAct(fiboSerialNumber));
                }
            } catch (Exception e) {JOptionPane.showMessageDialog(null, "File is not found");}   
        }   
    }

但它在 CodeEval 中不起作用。这就是网站编译器所说的:

Fontconfig 错误:无法在线程中加载默认配置文件异常 “main” java.awt.HeadlessException:未设置 X11 DISPLAY 变量, 但是这个程序执行了一个需要它的操作。在 java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207) 在 java.awt.Window.(Window.java:535) 在 java.awt.Frame.(Frame.java:420) 在 java.awt.Frame.(Frame.java:385) 在 javax.swing.SwingUtilities$SharedOwnerFrame.(SwingUtilities.java:1759) 在 javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1834) 在 javax.swing.JOptionPane.getRootFrame(JOptionPane.java:1697) 在 javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:863) 在 javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:667) 在 javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:638) 在 javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:609) 在 Main.main(Main.java:45)

【问题讨论】:

  • 你的意思是 args[0] 吗?
  • 所以看起来 CodeEval 没有给你一个 GUI 来显示你的错误信息。当您遇到异常时,不要弹出JOptionPane,而是只需e.printStackTrace()
  • @azurefrog:您应该将其发布为答案。

标签: java


【解决方案1】:

根据堆栈跟踪,错误发生在这里:

JOptionPane.showMessageDialog(null, "File is not found");

查看HeadlessException 的文档,我们看到它是:

在不支持键盘、显示器或鼠标的环境中调用依赖于键盘、显示器或鼠标的代码时引发。

更多 research 让我相信 CodeEval 可能正在尝试在无头 linux 环境中执行您的代码。

为避免此错误,只需在 catch 块中将图形错误报告替换为简单的 e.printStackTrace()

【讨论】:

    猜你喜欢
    • 2010-09-18
    相关资源
    最近更新 更多