小编fin*_*nnw的帖子

使用IgnoreCase按键对Map <String,Object>进行排序?

好吧,我测试了TreeMap,但它没有考虑字符串比较中的IgnoreCase.我需要按字典顺序排序并忽略大小写.还有其他方法吗?

谢谢,这是有效的(TreeMap(Comparator c)).但是,我有另一个问题:

public final Comparator<Object> STR_IGN_CASE_COMP = new Comparator<Object>() {

    public int compare(Object h1, Object h2) {
            String s1 = h1.getId();
            String s2 = h2.getId();
            return s1.compareToIgnoreCase(s2);
    }
}; //STR_IGN_CASE_COMP
Run Code Online (Sandbox Code Playgroud)

如何将比较器广泛化以适应不同的对象?假设所有人都有getId()方法.

谢谢,马丁

java sorting collections string-comparison treemap

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

Launch4J和Java Web Start的结合?

我有一个工作的JNLP应用程序,我需要分发给各种非技术最终用户.

如果用户的计算机安装了最新的JVM,一切都很好.他们只需双击我发送的JNLP文件,Java Web Start完成剩下的工作.

现在我想分发一些有或没有JVM的东西,例如一个.exe自动下载兼容JVM的文件(如果不存在),然后调用javaws.exe下载.jar文件并启动应用程序.

Launch4J是我找到的最接近的匹配,但它无法启动程序javaws.exe.唯一的选择是javajavaw

我想要的产品可以:

  • 生成.exe不需要预先安装JVM 的自包含文件
  • .jnlp如果需要,解析文件并确定要下载的正确JVM(我知道Java Web Start可以在必要时下载JVM,但我想避免必须下载两个,第一个用于引导Java Web Start,第二个用于运行应用程序,可能需要特定但不同的JVM.)
  • 自动下载并安装JVM,而不是简单地将用户定向到Java下载页面或打开新的安装向导.
  • 必要时提示输入管理员密码(有关安装JVM的权限.我不认为这是内置于Sun JVM安装程序中的.)
  • 只显示一个安全对话框(我只想提示用户一次,确认他们信任生成的.exe,但我不希望第二次提示确认他们信任.jar来自同一来源并使用相同证书签名的文件.)我假设这需要自动下载程序在启动JWS之前安装证书.)
  • (不是必需的).jar与JVM同时在后台下载应用程序资源(例如文件).这将要求在安装JVM之前运行缓存,因此缓存必须以本机代码实现,DownloadService然后使用JNI 与缓存接口.

这样的产品是否存在?我怀疑它没有,但它值得一试.


更新我发现这篇文章有一些相关问题的解决方案,虽然它是专为离线安装而设计的,我主要关心的是在线安装.

java installer jnlp auto-update

8
推荐指数
1
解决办法
2298
查看次数

将JLabel与JCheckBox的文本对齐

是否有一个外观和感觉无关对准组件的方式(例如JLabel)水平与文本JCheckBox

我试图使用来自的值UIDefaults来预测文本相对于左上角的位置JCheckBox.我找到了一个组合,可以为Metal,Windows,Motif和Aqua Look-and-Feels提供合适的结果:
示例:金属(正确对齐)

但不是在Nimbus:
示例:Nimbus(错误对齐)

是否有某种实用方法能够可靠地为所有外观中的文本提供X,Y偏移量?


代码(注意:为避免任何布局副作用,我在此测试中使用了null布局):

import java.awt.Insets;

import javax.swing.JApplet;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.border.Border;

public class AlignCheckBoxText extends JApplet {

    public AlignCheckBoxText() {
        setLayout(null);
        checkBox = new JCheckBox("Hello, World!");
        label = new JLabel("Hello, World!");
        add(checkBox);
        add(label);
    }

    @Override
    protected void validateTree() {
        checkBox.setLocation(0, 0);
        checkBox.setSize(checkBox.getPreferredSize());
        int labelX = UIManager.getIcon("CheckBox.icon").getIconWidth();
        Insets cbInsets = UIManager.getInsets("CheckBox.margin");
        if (cbInsets != null) labelX += cbInsets.left + cbInsets.right;
        Border cbBorder = UIManager.getBorder("CheckBox.border"); …
Run Code Online (Sandbox Code Playgroud)

java swing jcheckbox

8
推荐指数
1
解决办法
6887
查看次数

Java中Wav文件的音乐转录

我有关于使用Java进行音乐转录的项目,事情是,我创建了一个记录声音并将其保存到WAV文件的applet,播放器应该只播放他/她想要转录的片段,之后我被卡住了在这一点上,我必须从保存的WAV文件中获取信息并使用此信息创建一个MIDI文件,并在创建MIDI文件后,我必须为它生成一个乐谱(乐谱),所有这些必须完成在Java中.

我到处寻找关于如何完成这些工作的明确解释,但我没有找到任何直接的东西:(因为我是Java的新手,我希望有人能帮我解决这个问题,我在编程时遇到的问题是:

  1. 获取有关在WAV文件中播放的音符的信息.
  2. 知道笔记.
  3. 创建一个等同于WAV文件的MIDI文件.
  4. 从MIDI文件生成SCORE.

在对正在读取的数据执行分段后,我也尝试过快速傅立叶变换,但我认为这绝对是在错误的方向:(

如果有人可以帮助我完成上面指定的主题,以及如何只用Java编程,那将非常感激:)

顺便说一句,该项目是:
玩家在钢琴上弹奏音符>>记录他的演奏>>玩家获得他演奏的分数.

java pitch-tracking transcription

8
推荐指数
1
解决办法
3087
查看次数

将音频转换为MIDI的软件

有没有人知道是否有好的软件可以执行从(波形或mp3或其他已知格式)到MIDI的转换?我知道从音频文件到MIDI的转换是一个非常复杂的过程.我目前正在为我的学士学位开发一个课程项目,需要操作MIDI文件.

如果你知道任何好的软件,我会接受建议.我更喜欢通过传递要转换的文件也可以从shell执行的软件.

任何帮助表示赞赏.

midi mp3 pitch-tracking wave

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

libcurl在上传数据之前延迟1秒,命令行卷曲不会

我正在使用libcurl向本地服务发送API命令(即在127.0.0.1上).

该程序旨在替换shell脚本(使用该curl程序.)

一切都在工作,除了在某个地方有1秒的延迟,即从我打电话curl_easy_perform()到第一次调用我的读回调函数时经过1秒.

C程序正在使用这些选项(省略了错误检查和回调代码):

curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:12345/x");
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
curl_easy_setopt(curl, CURLOPT_INFILESIZE, (long)getLengthOfCommandObject());
curl_easy_setopt(curl, CURLOPT_READFUNCTION, &myReadFunction);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &myWriteFunction);
Run Code Online (Sandbox Code Playgroud)

但是,如果我curl像这样从shell 运行:

$ curl --data-binary '<command>' http://127.0.0.1:12345/x
Run Code Online (Sandbox Code Playgroud)

它会立即发送请求,而不会受到1秒延迟的影响.

可能导致延迟的原因是什么,我可以设置一个选项来阻止它吗?


编辑服务器基于mongoose

c curl libcurl mongoose-web-server

8
推荐指数
1
解决办法
1899
查看次数

将ListIterator限制为前N个元素(已优化)

什么是一个简单快速的方法来获得一个从一开始就返回最多N个元素的迭代器List

我能想出的最简单的版本是:

#1:

import com.google.common.collect.Iterators;

// ...

public static <E> Iterator<E> lengthLimitedIterator(Iterable<E> source, int maxLen) {
    return Iterators.partition(source.iterator(), maxLen).next().iterator();
}
Run Code Online (Sandbox Code Playgroud)

#2:

public static <E> Iterator<E> lengthLimitedIterator(List<E> source, int maxLen) {
    return source.subList(0, Math.min(source.size(), maxLen)).iterator();
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,两个版本都创建了一个临时性List,这会显着影响性能,因为我在紧密循环中调用了这个方法数百万次

我可以使用其他任何库函数吗?


注意:我无法避免遍历列表,因为我将它传递给一个以迭代器作为参数的方法,我无法修改该类.

java collections iterator guava

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

Java Regex删除开始/结束单引号但留下引号

我有来自CSV文件的数据,该文件用单引号括起来,例如:

'Company name'
'Price: $43.50'
'New York, New York'
Run Code Online (Sandbox Code Playgroud)

我希望能够在值的开头/结尾替换单引号,但在数据中保留引号,例如:

'Joe's Diner'  should become Joe's Diner
Run Code Online (Sandbox Code Playgroud)

我可以

updateString = theString.replace("^'", "").replace("'$", "");
Run Code Online (Sandbox Code Playgroud)

但我想知道我是否可以将它组合起来只做一次替换.

java regex csv replace

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

如何拉伸图像

我想通过使用图形拉伸图像,但这里不能使用我的代码它显示我想要的图像大小而不是图像

void imageload () {
    FileDialog fd = new FileDialog(MainFram.this,"Open", FileDialog.LOAD);
    fd.show();
    if(fd.getFile() == null){
        //Label1.setText("You have not chosen any image files yet");
    }else{
        String d = (fd.getDirectory() + fd.getFile());
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Image1 = toolkit.getImage(d);
        saveImage = d;//if user want to save Image
        ImageIcon icon=new ImageIcon(Image1);
        lblImage.setIcon(icon);
        lblImage.setMinimumSize(new Dimension(50, 70));
        lblImage.repaint();
    }
}
Run Code Online (Sandbox Code Playgroud)

java image-processing

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

f(x)的无分支实现:=如果x == 0则为0 else(x*log(x))

我有这个C函数:

double f(int x)
{
    if (x <= 0)
        return 0.0;
    else
        return x * log(x);
}
Run Code Online (Sandbox Code Playgroud)

我在一个紧凑的循环中调用,并希望摆脱分支,看看它是否提高了性能.

我不能用这个:

double f(int x)
{
    return x * log(x);
}
Run Code Online (Sandbox Code Playgroud)

因为它返回的NaN时间x == 0(大约25%的时间都是如此).

有没有另一种方法来实现它,以便它返回0x == 0,但仍然摆脱分支?

(我不太关心负输入,因为这些是错误,而零则不是.)

c optimization logarithm nan branch-prediction

7
推荐指数
3
解决办法
806
查看次数