小编Ben*_*ole的帖子

Java快速检查网络连接

我的问题相当简单.如果网络连接丢失,我的程序需要立即通知.我正在使用Java 5,所以我无法使用NetworkInterface的非常方便的功能.

目前我有两种不同的检查网络连接的方法:(
try ..catches removed)

方法一:

URL url = new URL("http://www.google.com");
HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection();
// trying to retrieve data from the source. If offline, this line will fail:
Object objData = urlConnect.getContent();
return true;
Run Code Online (Sandbox Code Playgroud)

方法2:

Socket socket = new Socket("www.google.com", 80);
netAccess = socket.isConnected();
socket.close();
return netAccess;
Run Code Online (Sandbox Code Playgroud)

但是,这两种方法都会阻塞,直到达到超时,然后才返回false.我需要一个立即返回的方法,但与Java 5兼容.

谢谢!

编辑:我忘了提到我的程序依赖于IP地址,而不是DNS名称.因此在解析主机时检查错误...

第二次编辑:

使用NetworkInterface找出最终解决方案:

Enumeration<NetworkInterface> eni = NetworkInterface.getNetworkInterfaces();
        while(eni.hasMoreElements()) {
            Enumeration<InetAddress> eia = eni.nextElement().getInetAddresses();
            while(eia.hasMoreElements()) {
                InetAddress ia = eia.nextElement();
                if (!ia.isAnyLocalAddress() && !ia.isLoopbackAddress() …
Run Code Online (Sandbox Code Playgroud)

java networking java-5

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

SQL7008错误 - 解决方法?

我正在为DB2 Universal数据库使用JTOpen JDBC驱动程序.除了简单的语句之外,我对SQL的经验很少.

这个问题中,我看到在尝试"在事务期间插入/更新非日记表中的行"时(抛弃),我得到了错误(SQL7008).

根据项目负责人的说法,我们的数据库没有记录,也不会很快(不要问我为什么,我不是DBA).但是,我正在开发一个能够commit一次性完成任务的项目(而不是每次调用执行时自动提交)几乎是必要的(并非完全需要,但它可以解决很多问题) .

有没有办法解决erorr SQL7008而不启用Journalling?

java sql db2 jdbc ibm-midrange

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

如果不关闭 JDBCPreparedStatements,是否会导致内存泄漏?

我正在使用 java.sqlPreparedStatements,我想知道以下内容:

Java 中是按值传递,该死!,下面给出了 Java 的 Pass-By 约定的示例:

public void foo(Dog d) {
    d = new Dog("Fifi"); // creating the "Fifi" dog
}

Dog aDog = new Dog("Max"); // creating the "Max" dog
// at this point, aDog points to the "Max" dog
foo(aDog);
// aDog still points to the "Max" dog 
Run Code Online (Sandbox Code Playgroud)

在我的代码中,如下所示(半 Java 伪代码):

public void method() {
  PreparedStatement pstmt = null;
  ResultSet rs = null;
  try {
    rs = executeStatement(sql-string, pstmt, conn, vars...);
  } catch (....) …
Run Code Online (Sandbox Code Playgroud)

java sql memory-leaks jdbc prepared-statement

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

在初始化主GUI时可见JProgressBar

我正在为我正在开发的项目构建一个相当复杂的GUI.重要的是,它包含(除此之外)JTabbedPane具有12个以上复杂GUI组件的窗格.

我正在尝试做的是JProgressBar在我实例化这些窗格时进行显示(创建和配置;做所有事情都不能实际显示).实际上,我希望得到类似Eclipse启动画面的最终结果:

在此输入图像描述

这是(更新为包含SplashScreen)伪代码,我正在尝试做什么:

ProgramManager:
private setupGUI() {
    mainGUI = new MainGUI(); // only instantiates internal JFrame field
    mainGUI.setup();
}

MainGUI:
public void setup() {
    //create and configure progress bar
    final SplashScreen ss = SplashScreen.getSplashScreen();
    JProgressBar jpb = new JProgressBar(){
        Graphics g = ss.createGraphics();
        @Override
        public void paint(Graphics pG) {
            // TODO Auto-generated method stub
            super.paint(g);
        }
    };
    jpb.setValue(0);        
    setup1stTab();
    //update Progress
    setup2ndTab();
    //update progress
    etc....
    ss.close();
}
Run Code Online (Sandbox Code Playgroud)

如果这是不可能的,或者如果我只是错了,请告诉我.我环顾四周,看到有人提到了Threading/SwingWorker,但是在搞乱了那个和观察者/可观察的东西之后(诚然只是一点点),我仍然无法弄明白.

java swing splash-screen jprogressbar

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

Java同步/锁定

我对Java的并发性比较陌生(还没有阅读JCIP,但它在我的列表中!)我有一个关于锁定行为的问题.具体来说,Java是锁定对象的引用还是对象本身?

代码示例(不是sscce,因为我不知道如何在实践中演示这种行为):

static final Object lockA = new Object();

public void method1() {
    synchronized(lockA) {
        // do stuff here
    }
}

public void method2() {
    Object lockB = lockA;
    synchronized(lockB) {
        // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

如果另一个线程正在执行method1()(因此锁定lockA),是否method2()允许执行?

谢谢!

java concurrency locking

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